第一部分: 变量的详细介绍
1,变量的生命周期 : 一个变量被创建并分配内存空间开始,到这个变量被销毁并清除其所占用内存空间的过程
2,变量的分类:
2.1:成员变量
2.2:局部变量
3,成员变量(实例变量)
在类中方法外声明,作用范围是整个类.
参考代码:ch03/InstanceVariable.java
成员变量:会默认赋值。
整型:0
浮点型:0.0
char类型:'\u0000'
boolean:false
引用数据类型: null
4,局部变量
在方法中,代码块中声明,作用范围就只能在该方法中,该代码块中使用。
局部变量不会默认赋值,必须要先赋值再使用
局部变量不能在声明该局部变量以外的方法使用。
第二部分: 操作符
1,赋值操作符:
= : int x = 0;
*= : a*=b;<==> a = a * b;
/= : a/=b;<==> a = a / b;
%= : a%=b;<==> a = a % b;
+= : a+=b;<==> a = a + b;
-= : a-=b;<==> a = a - b;
+= 和 -=中的小问题(强制类型转换)
2,比较操作符: 返回值 一定是 true/false
> : 大于
>= : 大于等于
< : 小于
<= : 小于等于
注意:比较操作符,只能用来比较整型和浮点型
3,相等操作符 返回值 一定是 true/false
== : 内存地址相等
new 的一定内存地址不同
!= : 不相等
注:相等操作符可以用来比较任意的数据类型是否相等。
4,数学运算操作符
+ : 数据类型值相加 或者 字符串连接
1,数据类型值相加
int a = 3;
int b = 20
int c = b+a;
System.out.println(c);//打印23
2,字符串拼接
String a = "tom";
String b = a+10;//这时候的b是个字符串,字符串的值为tom10
String c = 10+b;//这时候的c是个字符串,字符串的值为10tom10
/ : 整除 , 操作数均为整数,运算结果为商的整数部分。
% : 取余操作符,
参考代码: Add.java
5,移位操作符
有符号位移位: >>
有符号位移位,如果是正数用0补全,如果是负数用1补全
无符号移位: >>>
无符号位移位,不管正负都用0补全
>> : 算术右移位运算,也称做带符号右移位运算。
测试:
eg:12>>1
1,把12转换为二进制的形式
12 <==> 0000 0000 0000 0000 0000 0000 0000 1100
2,把12对应的二进制数向右移动2位:
0 0000000 00000000 00000000 00001100
0 000 0000 0000 0000 0000 00 00000011 有符号移位,12是正数,所以前面补0
0 000 0000 0000 0000 0000 00 00000011
----------------------------------------------------------------------结果
3
eg: -12 >> 1
1,把-12转换为二进制的形式
注:得到负数的二进制形式需要把正数 转换为二进制以后取反 加 1;
正数转换为二进制:
-12 :1 000 0000 0000 0000 0000 0000 0000 1100
取反:1 111 1111 1111 1111 1111 1111 1111 0011
+1 :1 111 1111 1111 1111 1111 1111 1111 0100 : -12//这个二进制码就是-12
-12 <==>1 111 1111 1111 1111 1111 1111 1111 0100
2,把-12对应的二进制数向右移动一位
1 111 1111 1111 1111 1111 1111 1111 0100
1 111 1111 1111 1111 1111 1111 1111 010 有符号移位,-12是负数,所以前面补1
1 1111 1111 1111 1111 1111 1111 1111 010 -->负数补1
减一1 1111 1111 1111 1111 1111 1111 1111 001
取反1 0000 0000 0000 0000 0000 0000 0000 110 -->结果:-6
>>> : 逻辑右移位运算,也称为不带符号右移位运算。
知识点速记:>> 右移是除
12>>2 <==> 12/(2^2) = 3
12>>3 <==> 12/(2^3) = 1
<< 左移是乘
12<<2 <==> 12*(2^2) = 48
12<<3 <==> 12*(2^3) = 96
详细移位运行请查看文档 二进制操作.txt
参考代码:Move.java
6,位运算符
& : 与 对两个操作元的每个二进制位进行与运算,运算规则为:1&1->1, 1&0->0, 0&1->0, 0&0->0;
| : 或 对两个操作元的每个二进制位进行或运算,运算规则为:1|1->1, 1|0->1, 0|1->1, 0|0->0;
~ : 非 取反运算, ~1->0, ~0->1;
^ : 异或 对两个操作元的每个二进制位进行或运算,运算规则为:1^1->0, 1^0->1, 0^1->1, 0^0->0; 两个值相同,为0, 不同为1;
7,逻辑操作符:
& : 逻辑与 没有短路效果
| : 逻辑或 没有短路效果
&& : 短路与
|| : 短路或
理解短路效果:
eg: (1+1==4) & (1+2==3)
false & true ----> false
当知道 括号1 中的值为false 的时候 & 的结果一定是false 括号2 中的值已经不重要了。但是&没有短路效果,所以括号2也会执行,然后比较
(1+1==4) && (1+2==3)
false
当知道括号1中的值为false时,括号2 没有计算的必要,&& 会发生短路效果,即:括号2不执行。
测试代码参考:ShortCircuit.java
8,三目运算符:
语法 : 布尔表达式 ? 表达式 1 : 表达式2
注:布尔表达式为true--->三目运行符执行 表达式 1
布尔表达式为false执行---->三目运行符执行 表达式 2
参考代码:Three.java
第三部分:java中的语句
1,if语句
语法: if(布尔表达式){代码块}
含义: if代码块中的代码只有当if后面的布尔表达式为true才执行.
2,if(){}else{}语句
语法: if(布尔表达式){
//代码块1
}else{
//代码块2
}
含义:当布尔表达式为true执行 代码块1
当布尔表达式为false执行 代码块1
3,if(){}else if(){}else if(){}else{}
语法:
if(布尔表达式 1){
//代码块 1
}else if(布尔表达式 2){
//代码块
}else if(布尔表达式 2){
//代码块 2
}else{
//代码块 3
}
含义:
如果布尔表达式 1 为true 那么执行代码块1 ,整个if else if 结束
如果布尔表达式 1 为false 那么继续判断布尔表达式 2 ...
如果所有布尔表达式都为false 那么执行代码块3
注意: if else if 语句 代码块 1 2 3 一定是只有一个代码块执行。其他的都不会执行。
参考代码: If.java
课堂练习:
写一个方法实现分时问侯, 如是8点至12点,返回"上午好", 12点至14点,返回"中午好", 14点至18点,返回"下午好", 其它时间返回"晚上好".注:时间用int date=10;表示
4,switch语句
语法: switch(expr){
case value1:
代码;
break;
case value2:
代码;
break;
...
default:
代码;
break;
}
expr支持的数据类型:
switch表达式后面的数据类型只支持byte,short,char,int四种整形类型、枚举类型和java.lang.String类型。
其中枚举和String在jdk1.7以后支持
流程解释:
1,获取expr值
2,从上到下和case 的 value比较
如果相同执行当前case下面的代码(可以是多句,多行代码),
如果没有break,那么接下来所有的case 都会匹配成功(即使case 的value 和 expr不同),然后执行case下的代码。然后执行default
如果有break,那么switch执行完毕,跳出。
3,如果所有的case都匹配失败
执行default中的代码
参考代码:Switch.java
课堂练习:
写一个程序,能把数字1-7转换为对应的星期一到七
5,循环语句
用来反复执行某一段代码。
循环语句包含:
. 初始化部分:用来设置循环的一些初始条件,比如循环控制变量的初始值; 可以不要
. 循环条件: 这是一个布尔表达式,每一次循环都要对该表达式求值,以判断到底继续循环还是终止循环。
. 循环体: 这是循环操作的主体内容,可以是一条语句,也可以是多条语句; 可以不要
. 迭代部分: 用来改变循环控制变量的值,从而改变循环条件表达式的值; 可以不要
6,for循环
语法: for(初始化部分:循环条件:迭代部分){
循环体
}
写一方法,完成计算从1加到100的和;
for代码执行流程:
1,执行 初始化部分
2,判断 循环条件 满足
3,执行 循环体
4,执行 迭代部分
5,判断 循环条件 满足
6,执行 循环体
7,执行 迭代部分
......
n,判断 循环条件 不满足
n+1, 跳出循环
参考代码:For.java
7,while循环
语法:while(循环条件){
循环体
}
练习 : 使用while完成 完成计算从1加到100的和
while执行流程:
1,判断循环条件 满足
2,执行循环体
3,判断循环条件 满足
4,执行循环体
...
n,判断循环条件 不满足
n+1,跳出循环
参考代码:While.java
8,do---while循环
语法:do{
循环体
}while(循环条件);
练习 : 使用while完成 完成计算从1加到100的和
do---while循环执行流程:
1,执行循环体
2,判断循环条件 满足
3,执行循环体
4,判断循环条件 满足
5,执行循环体
...
n,判断循环条件 不满足
n+1,跳出循环
参考代码DoWhile.java
问题:执行 循环体 的时候由于某种原因需要跳出循环
9,打印三角形
任选一种循环打印三角形
例子1:
*
**
***
****
*****
参考代码:Triangular.java
例子2:
*
**
***
****
*****
参考代码:Triangular2.java
10,循环语句中流程跳转:参考代码Skip.java
1,break;
跳出当前循环.
for(int i = 0;i<9;i++){
if(i==5){
break;
}
System.out.println("break: "+i);
}
System.out.println("结束");
2,break lable;
跳出指定循环.
3,continue;
跳出当次循环,进入下一次循环
for(int i = 1;i<=9;i++){
if(i==5){
continue;
}
System.out.println("continue: "+i);
}
System.out.println("结束");