菜单
本页目录
第2单元   编程基础

2.1  Java基本语法

2.1.1 Java程序基本格式

修饰符 class 类名{
         程序代码;
} 

程序代码:结构定义语句
                功能执行语句

Java严格区分大小写

有排版要求:两个词或符号之间插入空格

字符串不能分成两行书写

长字符串:两个短字符串通过“+”链接:字符串1+字符串2

2.1.2 Java注释
1、单行注释  //
2、多行注释  /*     */
3、文本注释   /**      /

2,1.3  Java中的标识符

标识符:
定义:按一定规则制定的符号,表示一些名称:包名,类名,方法名,参数名,变量名等
构成:字母、数字、下划线或美元符号,且首位不能是数字,不能是关键字
                                                             (关键字:Java语言保留的有特定意义的标识符:if,else, while。break,continue,class,)
包名:字母小写                         chapter01
类名和接口名:每个单词首字母大写            HelloWorld,Student
常量名:每个字母都大写: PI=3.14                                                                                     3.1415926
变量名和方法名:第一个单词首字母小写,第二个单词开始首字母大写
                     变量名:一般名词                    name ,userName      
                     方法名:动宾结构(动词+名词) getName,setName
使用有意义的单词定义标识符

区分变量名和方法名:变量名:没有括号;方法(参数):有括号

2.1.4 关键字(保留字)
关键字:Java语言保留的有特定意义的标识符:if,else,classwhile

关键字字母小写
关键字不能作为标识符

2.1.5 Java常量

1、整型常量:
2、浮点常量:
3、字符常量:  'a' 或 '\u0000'       转义字符                 
4、字符串常量: "","a","agegaegreg544654658**-*/*/*-奏国歌如果"
5、布尔常量:true ,false
6、null常量:引用类型的对象为空(不指向任何对象)

2.2 Java中的变量

1、变量:能随时改变的量,用变量标识符定义


2、变量的类型:2类:基本数据类型,引用数据类

基本数据类型:数值类型:整数类型:byte,short, int,long
                                         浮点类型:float,double
                        字符类型:char
                        布尔类型:true, false
                      
引用数据类型:类(class)
                        接口(interface)
                        数组                             {1,2,3,4,5}
                        枚举(enumerate)
                        注解(annotation)

基本数据类型:使用的是值。
引用数据而类型:使用的是(内存)地址。

基本数据类型使用:声明(定义)、赋值
引用数据类型使用:声明(定义)、创建(new关键字创建)和赋值
                                                     

3、基本数据类型变量的使用:声明(定义)与赋值

声明(定义):数据类型 变量名;
赋值:              变量=值; 
                            <=>   
声明+赋值;    数据类型 变量名=值; 

例子:
1、
int x;    //声明(定义一个int型变量x)   
x=10;  // 给int变量x赋初值10                        <=>   int x=10;        

2、
int x=0,y;   //2个int变量x,y   x=0,y                       int x=0; int y
y=x+3;      //y=x=3

声明:int x;

赋值:

声明与赋值:以10为底的幂次

  2^10*2^5=1024*32=300000

整型数据类型:4种类型,不同类型占用内存大小不同
                          0    1   -2   123456      123456789987654321
                                                                                                                                              -128~127
4种不同类型: byte      8位(8个二进制位) (1个字节)           8个二进制位(bit)=1个字节(byte)  (-2^7~2^7-1)
                      short    16位(2个字节)    00000000  00000000                                                          ~2^15-1
                      int        32位(4个字节)    00000000  00000000  00000000   00000000                        2^31-1
                      long      64位(8个字节): 

计算机底层二级制:0或1   
              
           0  或  1:     1个二进制位:           2个:2^1
 
           00  01  10  11   :  2个二进制位:4个:  2^2

           000    001   010    011    100   101   110    111  :3 个二进制位数: 8个:  2^3
 
                                                                                          n个二进制位数: n个               2^n

如果是long类型变量,后面要加字母l(或L),说明是long类型;
若赋的值未超过int类型取值范围,可省略字母l(或L)

long num=220000000L;
long num=198l;
long num=198;

int x=0;


198(4);  198l(8)

浮点类型数据:2种类型,不同类型占用内存大小不同

2种类型:float        32位(4个字节)
              double     64位(8个字节)(默认)

E(e)=10^
3.14E2=3.14*10^2=314.0
314e-2=3.14*10^-2=3.14

10^-1=1/10=0.1
10^-2=1/100=0.01

浮点类型,默认是double类型,  如果是doule类型变量,字母d(或D)可加可不加
                                               如果是float类型变量,后面必须加字母f(或F)
                                           
double d1=100.1;
double d2=199.3d;(建议)

float f=123.4f;(必须加f)

给浮点型赋整型值:可行(自动类型转换)
float f=100;
double d=100;

3、字符类型变量(char):一个字符2个字节,单引号''
                                    Java字符,Unicode编码,每个字符对应唯一的数值   'a':97
                                    字符变量赋值时,可以赋字符,也可以赋数值(计算机自动将数值转换对应字符)

char c='a';    <=>  char c=97;



4、布尔数据类型:boolean关键字声明,只有true和false两个值

boolean  flag=false;
flag=true; 


2.2.3 变量的类型转换

目的:解决数据类型不一致
类型:自动数据类型转换: 小--->大
         强制数据类型转换: 大---->小,数据类型不同

1、自动数据类型转换:3种
                             原值           目标值
(1)整型类型间: byte-->short,int,long                             short s=15b           iint i =15b;   long l=15b
                             short、char--->int ,long
                             int--->long                                              long l =198;
(2)整数类型、字符类型转化为floa型:byte、short、int、char---->float                  float f =15;
(3)整数类型、字符类型和单精度float型转化为double型:byte、short、int、char、float---->double

强制数据类型转换:两种数据类型不兼容或目标类型取值范围小于原类型             int x=(int) 195l;

2、强制数据类型语法:

目标类型  变量=(目标值)值

注意:对变量进行强制数据类型转换时,可能会造成数据丢失。


2.2.4 变量的作用域(作用范围):

变量先声明(定义)再赋值,最后使用
变量一定被定义在一对大扩号内,大括号所包含的区域就是该变量的作用域。(找变量最近的左括号)

public static void main(String[] args){
           int x=4;
           {

                   int y=9;

           }
}


2.3  Java中的运算符

     在Java中,运算符种类:算术、赋值、比较和逻辑 ,4类运算符

2.3.1   算术运算符
           
类型:+,-,++,--,*,/,%
作用:进行算数运算

1、+
(1)+特殊用法:字符串与不同基本数据类型的链接: 字符串类型+基本数据类型:    : 结果是字符串类型。  “1”+2:“12”
(2)自加、自减操作: 1)++(或--)在操作数前(++a):  先自加(或自减),再进行其他运算
                                     2)++(或--)在操作数后(a++):  先进行其他运算,再自加(或自减)

例子:
int  a=1;
int  b=2;
int  x=a+b++;                   b++:   a+b  x:3 b:3                   
System.out.println("b="+b);    b=3
System.out.println("x="+x);     x=3


2、/: 分子 (被除数)/ 分母(除数)  6/3
(1)被除数和除数,都是整数:结果为整数,小数舍去: 2510/1000:   2
(2)被除数或除数有浮点数:结果为浮点数。 
例子:   
          25/10.0 :      2.5
          25.0 /10:      2.5
          25.0/10.0:    2.5

3、%:求余数(求模)
(1)余数的正负,取决于%左边的数(先不管符号,算完再处理)
例子:
(-5)%3  = -2
  5%(-3)= 2


2.3.2   赋值运算符:

类型:  =,+=,-=,*=,/=,%=
作用:将右边常量、变量或表达式的值赋给左边的变量

a+=1  <=>      a=a

    变量 = 表达式 (常量、变量或表达式)  ( 变量   <----  表达式)

1、=:
(1)=:赋值号(或赋值运算符)
(2)作用:将右边常量、变量或表达式的值赋给左边的变量
(3)赋值方向:从右往左赋值(右边表达式的结果,赋值给左边变量)
        变量 = 表达式 (常量、变量或表达式)  ( 变量   <----  表达式)

(4)单个变量赋值:先声明,再赋值。
 例子:
 int x;
 x=5;                  < =>    int x=5;

(5)多个变量赋值:先声明,再赋值。
例子:


int x=5;
int y=5;            (√)
int z=5;
------------------------ 

int x,y,z;
x=1;
y=2;
z=3;         (√)

------------------
int x=y=z=5;    (×)


2、自运算符: +=,-=,*=,/=,%= 
(1)会算:
例子     
a=3,b=2;
a+=b;            
a-=b;
a*=b;
a/=b;
(2)自运算符,强制类型转换会自动完成,不需要处理。

short s=3;
int  i = 5;
s+=i     ;                     // 自运算,强制类型转换自动完成


2.3.3   比较运算符

类型:   ==,!=,<,>, <=,>=
作用:比较两个量的大小,其结果为布尔值(true、false二选一)

注意:
(1)“abc”=="Abc": false  (Java区分大小写)
(2)<=(小于或等于),>=(大于或等于)
例子:
3<=4:   true      
3>=4: false
5>=4:   true      
5<=4:false   

2.3.4   逻辑运算符:
    
类型: &(与),|(或),^(异或),!(非),&&(短路与),||(短路或)
作用:对布尔类型数据进行判定,结果为布尔值

1、&和&&:
(1)相同点:全真为真,一假为假
(2)区别:  &:符号两边表达式都要运算
                  &&:符号左边为false时,右边不算。

例子:2.6
int x = 0; 						
int y = 0; 						
int z = 0; 						
boolean a, b; 					
a = x > 0 & y++ > 1;    // x=0; y=1  a:false			
System.out.println(a);
System.out.println("y = " + y);   //y=1
b = x > 0 && z++ > 1;               //x=0  ,z=0			
System.out.println(b);
System.out.println("z = " + z);   z=0



2、|和||:
(1)相同点:一真为真,全假为假
(2)区别:  |:符号两边表达式都要运算
                    ||:符号左边为true时,右边不算。

例子:
int x=0;
int y=0;
boolean b= x==0 || y++>0


3、^:异或
口诀:布尔值相同,结果为false
          布尔值不同,结果为true
例子:
true ^ true:     false
false ^ false:   false
true ^ false:    true
false ^ true:  true

2.3.5   运算符优先级

1、不同类型,优先级不同:括号>算术运算符>比较运算符>逻辑运算符(&>^>|)>赋值运算符
2、同级别,从左往右处理。  
3、分不清,加括号(括号优先级最高)

例子:
int a=2;
int b= a+3*a;
----------------

int a=2;
int b=(a+3)*a;


2.4  选择结构语句

选择语句:if条件语句:  if单分支,if双分支,if多分支
                  switch语句

2.4.1  if条件语句

1、if语句:if 单分支语句
语法:
if (条件语句){                   // 条件语句为true,执行{}中的代码块;否则,不执行{}中的代码块
     代码块;
}



2、if......else语句:if 双分支语句
语法:
if (条件语句){                   // 条件语句为true,执行{}中的代码块1;否则,执行{}中的代码块2
     代码块1;
}
else{
     代码块2;
}


3、if......else if.....else语句:if 多分支语句(只选择一个分支)
语法:
if (条件语句1){                   //条件语句1为true,执行{}中的代码块1;否则,执行条件语句2,以此类推满足
     代码块1;                     //当所有条件都不满足,执行else后面的代码块n+1。
}
else if (条件语句2){     
{
     代码块2;
}
......
else if (条件语句n){     
{
     代码块n;
}
else{
     代码块n+1;
}


2.4.2  三元运算符:

1、if...else 双分支结构的简化码
2、三元运算符语法:
   
判定条件 ? 表达式1:表达式2

注释:当判定条件为true,执行表达式1,且该值作为整个表达式的结果;否则执行表达式2,且该值作为整个表达式的结果

注意:
(1)三元运算符,?与:不能分开
(2)优先级:赋值运算符<三元运算符<算术或关系运算符
(3)条件运算符嵌套:自右向左结合
         a > b ?  a : c > d  ?  c :d  <=>  a > b ? a : (c >d ? c : d)

例子:比较两个数的大小
if.....else 结构

int x=0;
int y=1;
int max;
if (x>y){
     max=x;
}
else{
    max=y;
}
System.out.println(max);
--------------

三元运算符:

int x=0;
int y=1;
int max= x>y ? x : y;
System.out.println(max);
--------------

2.4.3  switch条件语句:对表达式进行匹配,且只匹配一次。
1、基本语法:

switch(表达式值){
      case 目标值1:
              执行语句1;
              break;
      case 目标值2:
              执行语句2;
              break;
......

      case 目标值n:
              执行语句n;
              break;
     [ default:
              执行语句n;       //这段代码块可缺省
              break;
     ]
}

解释:
(1)表达式的值与case语句的目标值进行匹配,匹配成功,执行对应case后面的语句;如果没有匹配的case语句,执行default后的语句。
(2)break关键字作用:结束并跳出switch结构。

2、执行语句存在重复,只需写一次即可
例子2-11 

 
switch(表达式值){
      case 目标值1:          
      case 目标值2:
      case 目标值3:
              执行语句1;
              break;
......
      
      case 目标值4:
      case 目标值5:
              执行语句2;
              break;
     [default:
              执行语句n;
              break;]
}


2.5  循环结构语句

循环语句:while循环语句:  while循环 ,do......while循环
                 for循环语句:

2.5.1  while循环语句:先判定,再循环
语法:

while (循环条件){
       执行语句;                        //循环体,有缩进
       ......
}

解释:当循环条件为true,执行大括号内的执行语句
          否则,当循环条件为false,结束整个while循环,跳出while循环结构(while关键字+循环条件+循环体)

例子2-12:


2.5.2 do......while循环语句:先循环,再判定(至少循环一次)
语法:
do{
       执行语句;                        //循环体,有缩进
       ......
}while (循环条件);

解释:先循环,再判定
          当循环条件为true,再次执行大括号内的执行语句
          否则,当循环条件为false,结束整个do.....while循环,跳出循环结构

例子2-13:


2.5.3 for循环语句
语法:
for (初始表达式; 循环条件; 操作表达式){
       执行语句;                                             //循环体,有缩进
       .....
}

解释:for关键字后面的三个内容:1、初始表达式     2、循环条件    3、操作表达式
                                                     4、执行语句(循环体)

for(int i=1;i<=10;i++){
     Systm.out.println("i="+i);
     Systm.out.println("*****")
}

for( 1 ;  2  ;  3 ) {
              4;
}
for循环流程:
第一步:执行1(初始表达式)
第二步:判定2(循环条件),如果为true,则执行第三步;如果为false,执行第五步
第三步:执行4(循环体)
第四步:执行3(操作表达式),然后重复第二步
第五步:退出循环       

例子2-14


2.5.4 循环嵌套
1、定义:在一个循环语句中再定义一个循环语句。while、do.....while和for语句,这3种循环语句间相互嵌套

典型:双层for循环
for (初始表达式; 循环条件; 操作表达式){
       执行语句;                                             //循环体,有缩进
       .....
      for (初始表达式; 循环条件; 操作表达式){
       执行语句;                                             //循环体,有缩进
       ......
       }
       ......
}

注意:
1、外层循环、内层循环变量尽量不同(原因:变量作用域)
2、循环变量的声明(定义)与赋值,放在for循环内。
3、外层循环:行数
      内层循环:列数

例子2-15



2.5.5 跳转语句:break关键词,continue关键词

1、break关键词作用:  break之后的循环体不执行
                                     跳出整个循环结构(本循环结构)
                                     执行循环结构外(后)的语句

2、continue关键词作用:continue之后的循环体不执行
                                        终止本次循环,并执行下一次循环

2.6   方法

2.6.1 方法(函数)

1、定义:可重复调用的程序。通过调用方法名,实现方法对应的功能。
2、方法语法格式:
                                 
修饰符  返回值类型  方法名(参数类型 参数名1,参数类型 参数名2,....,参数类型 参数名n){
             执行语句;
             ........
          [  return 返回值; ]      //[]:缺省    无返回值,返回值类型void(空)
} 

修饰符:对访问权限进行限定:private、protected、default、public
                                                static、final                                            
返回值类型:限定方法返回值的数据类型;(若没有返回值,该类型为void)
参数类型:限定调用方法时传入参数的数据类型
参数名:是一个变量,用于接受调用方法时传入的数据              
return关键字:返回方法指定类型的值,并结束方法。
返回值:return语句返回的值,该值返回给调用者。

注意:参数列表:可以为空,即 方法名()
          方法的返回值类型必须是方法声明类型返回值类型,若方法没有返回值,return语句可以不写,且方法的返回值类型声明为void


例子2-19:无return语句的方法

例子2-20:有return语句的方法

2.6.2   方法的重载:

1、定义:在同一个作用域内,方法名相同,但参数个数或参数类型不同(3种情况)的方法。

方法的重载:与方法名和参数有关,与方法的返回值类型无关。




2.7   数组

定义:是指一组类型相同的数据的集合。
注意:1、数组中的每个数据称为元素
          2、数组元素类型可以任意,但同一个数组,元素类型必须一致
          3、数组分为:一维数组 和 多维数组
 
2.7.1 数组的定义  
数组:1、定义(声明)
          2、创建
          3、赋值

1、一维数组声明(定义)、创建

(1)第1种(仅声明):

数据类型[]   数组名;

(2)第2种(声明、创建、自动赋初值):

数据类型[]  数组名;
数组名 = new 数据类型[长度];

例子
int[]  x;                            //声明一个int[]类型数组
x=new int[100];             //为数组分配100个int元素空间             

解释:
1、第一行代码 int[] x ,声明了一个变量x,该变量的类型是int[],即int类型数组。变量x占用一块内存空间,声明时没有分配初始值
2、第二行代码 x=new int[100];(1)(在内存中)创建了一个长度为100个int元素的数组:第一个元素的名称为x[0],第二个元素名称为x[1],.....第100个元素的名称为x[99]
                                                    (2)将创建的数组的首地址,赋值给变量x(即数组变量,保存数组对象首地址)
                                                    
2、访问一维数组中的元素:
语法:
变量名[索引(或下标)]       

例子:x[0],x[1],......x[99]     
 
注:
1、数组索引最小值:0,最大值:length-1  
2、length:数组属性,获取该数组长度
    用法: 数组名.length

例子2-22


3、数组创建成功后,没有赋初值:系统自动赋予一个默认值。(引用数据类型,创建成功后未赋值,系统自动赋初值)

整型:byte、short、int、long                 0 
浮点型:float、double                           0.0
字符型:char                                  空字符,即'\u0000'
布尔型:boolean                                     false
引用数据类型                                null,变量没有引用对象

(3)声明、创建、自动赋初值
数据类型[]  数组名  = new 数据类型[长度];

例子
int[]  x;                              <=>      int[] x=new int[100];
x=new int[100]; 

2、一维数组赋值:
(1)动态初始化:声明、创建数组后未赋值,系统自动赋值(可通过赋值语句修改默认值)
(2)静态初始化赋值:声明、创建数组的同时给数组的每个元素赋值。
静态初始化语法:

1)数组类型[]   数组名=new 数组类型[]{元素1,元素2,....,元素n}    ([]内不能填写具体数值)
2)数组类型[]   数组名={元素1,元素2,....,元素n}    (推荐√)

例子 2-24

2.7.2   数组的常见操作

1、数组遍历:

例子2-27     数组遍历

2、最值获取:

例子2-28     数组最值

3、数组排序(冒泡排序)

例子2-29     数组排序

2.7.3  二维数组:

多维数组:即数组的元素是一个数组


1、二维数组定义(声明)、创建

(1)第1种:行数和列数确定

数组类型[][]  数组名=new 数据类型[行数][列数];

例子
int[][]  xx=new int[3][4];
             ----->xx[0]---------->xx[0][0]      xx[0][1]     xx[0][2]    xx[0][3]
     xx     ----->xx[1]---------->xx[1][0]      xx[1][1]     xx[1][2]    xx[1][3]
             ----->xx[2]---------->xx[2][0]      xx[2][1]     xx[2][2]    xx[2][3]


解释:

(2)第2种:行数确定,列数不确定

数组类型[][]  数组名=new 数据类型[行数][];


(3)第3种:静态初始化

数组类型[][]  数组名={{第0行初始值},{第1行初始值},......,{第n-1行初始值}};

例子
int[][]  x={{1,2},{3,4,5,6},{7,8,9}};

         ----->xx[0]----------> 1     2
xx     ----->xx[1]----------> 3     4     5    6
         ----->xx[2]----------> 7    8     9


二维数组元素的访问:索引访问

数组名[行索引][列索引]


例子2-30