Java基础语法(二)

53 阅读5分钟

1.自动类型转换

类型范围小的变量 , 可以直接赋值给类型范围大的变量 .

例 : byte a = 20; int b = a;

   a的数值范围比b的小 , 当把 a 赋给 b 时会进行自动类型转换.

image.png

例1 : byte a = 10 ; int b = 20 ; double c = 1.0 ; double d = a + b + c ; //31.0

  byte -> int -> double  接收数据时如果不使用double会产生异常.

例2 : byte a = 10; byte b = 20; byte c = a+b ;(报异常,可以把byte 改为 int 类型)

修改后 : byte a = 10; byte b = 20; int c = a+b ;

a+b 的数据无法使用byte来接收 .因为a 和 b 在运行的过程中自动转换成了 int 类型 .

注意 :

表达式的最终结果类型由表达式中的最高类型决定. 在表达式中 , byte , short , char 是直接转换成 int 类型参与运算的.

2.强制类型转换

可以强行将类型范围大的变量 , 数据赋值给类型小范围小的变量 .

image.png

image.png

注意 :

强制类型转换可能造成数据(丢失). 浮点型强制转成整型 , 直接丢失小数部分 , 保留整数部分返回 .

3.运算符

  运算符 : 对字面量或者变量进行操作的符号.

image.png

一 . + 号的使用

(1) + 号可作为连接符使用 .

image.png

例 : int a = 10 ; string b = "abc"; System.out.printn(a+b);//10abc

注意 : + 在作为连接符时当字符串与数值相加时返回的是一个字符串 , + 也可作为运算符 ,

(2) 自增自减运算符

image.png

注意 :

++ 和 -- 既可以放在变量的后面 , 也可以放在变量的前面 . ++ , -- 只能操作变量 , 不能操作字面量的 .

image.png

二 . = (赋值运算符)

image.png

三 . 关系运算符

image.png

四 . 逻辑运算符

image.png

image.png

五 . 三元运算符

image.png

image.png

六 . 运算符优先级

image.png

image.png

4.流程控制语句

一 . If 分支

(1) if的作用

根据判定的结果( 真或假 )决定执行某个分支的代码.

image.png

(2) if分支的三种格式

image.png

二 . Switch 分支

(1) whitch 的作用

 根据匹配条件去执行分支 , 适合做值匹配的分支选择 , 结构清晰 , 格式良好 .

(2) whitch 执行流程

  • 先执行表达式的值 , 拿着这个值去与case 后的值进行匹配 .
  • 匹配哪个 case 的值为 true 就执行哪个 case , 遇到break 就跳出switch 分支 .
  • 如果 case 后的值不匹配则执行default 代码 .

image.png

例 :

image.png

Break : 跳出并结束当前所在循环的执行.

Countinue : 用于跳出当前循环的当次执行 , 进入下一次循环 .

注意事项 :

  • 表达式类型只能是 byte , short , int , char , JDK5 开始支持枚举 , JDK7 开始支持String , 不支持 double , float , long .
  • case 给出的值不予许重复 , 且只能是字面量 , 不能是变量 .
  • 不能忘记写break , 否则穿透现象.
  • Break : 只能用于结束所在循环 , 或者结束所在switch分支的执行 .
  • Continye : 只能在循环中进行使用 .

Switch 的穿透性

如果代码执行行到没有写break的case块 , 执行完后将直接进入下一个case块执行代码 (而且不会进行任何匹配) , 直到遇到break才跳出分支,这就是switch 的穿透性. 例

image.png

三 . For 循环

for循环可以控制一段代码反复执行多次.

语法 : for( 初始化语句 ; 循环条件 ; 迭代语句 ) {

            循环体语句(重复执行的代码);     

    }

image.png

例 :

For (int I = 0 ; I < 3 ; i++){ System.out.println("Hello World");

}

结果返回 三行 Hello World , 当执行到第四条数据时 I 大于 3 了,返回 flser ,结束循环.

四 . While 循环

  while循环可以控制一段代码反复执行多次.

语法 : while(循环条件){

    循环体语句 ( 被重复执行的代码 );

    迭代语句;

}

image.png

例 :

Int I = 0;

While( I < 3 ){ System.out.println( "Hello Word" );

 i++;

}

结果返回 三行 Hello World , 当执行到第四条数据时 I 大于 3 了,返回 flser ,结束循环.

注 : for 和 whlie 的使用规范 : 知道循环几次 ,就使用 for ; 不知道循环多少次的建议使用 whlie.

五 . Do-While 循环

先执行再判断循环条件.

语法 :

初始化语句;

Do{

循环体语句;

迭代语句;

}while(循环条件);

image.png

例 :

Int I = 0 ;

Do{ System.out.println("Hello World!");

i++;

}while( I < 3 );

Do-while循环的特点 : 一定会先执行一次循环体.

5.数组

  数组 : 存储一批同种类型数据的内存区域 .

(1)静态初始化数组

 定义初始化数组的形式   :  数据类型 [ ]  数组名 = new 数据类型 [ ] {元素1 , 元素2 , 元素 3 ...};

                            简写   :  数据类型 [ ] 数组名 = { 元素1 , 元素2 , 元素3 , ...  };

image.png

注意 : 数组变量名中存储的是数组在内存中的地址 , 数组是引用类型 .

Length : 数组的长度属性 .

注意 :

  • 数据类型 [ ] 数组名 也可以写成 数据类型 数组名 [ ] ;
  • 什么类型的数组存放什么类型的数据 , 否则报错 .
  • 数组一旦定义出来 , 程序执行的过程中 , 长度 , 类型就固定 .

(2) 动态初始化数组

    定义数组的时候只确定元素的类型和数组的长度 , 之后再存入具体数据 .

    定义动态初始化数组的形式   :  数据类型 [ ]  数组名 = new 数据类型 [ 长度 ] ;

                                                   int [ ] arr = new int [ 3 ] ;

两种数组定义的特点与区别

  • 当前已经知道存入的元素值 , 用静态初始化 .
  • 当前还不清楚要存入那些数据 , 要动态初始化 .

image.png

(3) 数组遍历

遍历 : 数据一个一个的进行访问 .

例 :

Int [ ] arr = { 12 , 45 , 32 , 56 , 32 };

For ( int I = 0 ; I < arr.length ; i++){

 System.out,println( arr [ i ] );

}

(4) 数组的内存分配机制

方法区 : 字节码文件加载时进入的内存 .

栈内存 : 方法运行时所进入的内存变量也是在这里 .

堆内存 : new 出来的对象会在这块内存中开辟空间并产生地址 .

image.png