整理的笔记
【有错请见谅且指出,无错以后自己看的时候有新见解再添】
目录
资源
视频:https://www.bilibili.com/video/av48144058
书:《Java核心技术(原书第10版) 卷Ⅰ》
流程控制结构
流程控制结构:①顺序结构(从上而下顺序执行)②分支结构(单分支、双分支、多分支)③循环结构(for、while、do…while)
块作用域
java程序都由语句组成,语句可以是”;”结尾的简单语句,也可以是用一对花括号”{}”括起来的复合语句
块(block),即复合语句,指由一对大括号 {} 括起来的若干条简单的Java语句。
- 块确定了变量的作用域。
- 一个块可以嵌套在另一个块中。
- 不能在嵌套的两个块中声明同名的变量
分支结构(单分支、双分支、多分支)
分支结构:条件语句控制,选择一条路来执行
1. 单分支
if(条件) 语句;
//条件使用英文括号()括起来
需要执行多行语句时,就使用块语句。条件为 true 时执行
if(条件){
语句1;
语句2;
...
}
或使用三目运算符?:
条件 ? 语句1 : 语句2;
2. 双分支
if(条件) 语句1; else 语句2;
条件为true时执行语句1,条件为false时执行语句2
else部分是可选的。else子句一般与最邻近的if构成一组。
例:if(x <= 0) if(x == 0) sign = 0; else sign = -1;
实际为:
if(x <= 0) {
if(x == 0)
sign = 0;
else
sign = -1;
}
3. 多分支
if选择
if(条件语句1){
语句1;
}else if(条件语句2){
语句2;
}else{
语句3;
}
//else if大括号后后可能还会有多个else if然后再是else
switch多重选择
switch语句将从选项值相匹配的case标签处开始执行直到遇到break语句,或者执行到switch语句的结束处为止。如果没有相匹配的case标签,而有default子句,就执行这个子句。
【从相匹配的case入口,依次往下执行,遇到break再结束。如果都不匹配,有default直接执行default子句】
switch(表达式)
{
case 常量表达式1: //常量表达式只能是byte int short char类型,枚举常量,JavaSE7后字符串字面量
case 常量表达式2:语句序列1; break;
…
default://默认,如果前面都没有break就输出这一行
语句序列n+1;
}
补充:
-
注意有可能触发多个case分支,如果忘记在case分支语句的末尾写break语句,那程序会接着执行下一个case分支语句。
-
如果喜欢使用switch语句,但又容易忘记加break语句,编译代码时可以考虑加上**-Xlint:fallthrough**选项
javac -Xlint:fallthrough Test.java
//如果某个分支最后缺少一个break语句,编译器就会给出一个警告消息。 -
如果正是想使用的"直通式(fallthrough)"行为,可以为其外围方法加一个标注
@SuppressWarning("fallthrough")
。这样就不会对这个方法生成警告了。 -
当在switch语句中使用枚举常量时,不必在每个标签中指明枚举名,可以由switch的表达式值确定。
枚举类型【暂时】
变量的取值只在一个有限的集合内。
自定义枚举类型,枚举类型包括有限个命名的值。
enum 枚举名 {命名的值1, 值2, 值3....};
例:
enum Size{SMALL, MEDIUM, LARGE, EXTRA_LARGE};
Size s = Size.MEDIUM;
Size类型的变量只能存储这个类型声明中给定的某个枚举值,或者null值,null表示这个变量没有设置任何值。
循环结构(for、while、do…while)
1. for 循环
一般用于确定循环次数的循环
格式:
for(语句1; 语句2; 语句3)
{
需要循环的语句;
}
语句1:通常用于对计数器初始化。在此声明了一个变量后,这个变量的作用域为for循环的整个循环体。
语句2:给出每次新一轮循环执行前要检测的循环条件
语句3:指示如何更新计数器【步长】
for语句的3个部分一般应该对同一个计数器变量进行初始化、检测和更新。
for语句内部定义的变量不能在循环体之外使用。如果需要在循环体外使用循环计数器的最终值,那么这个变量要声明在for语句外部,
可以在各自独立的不同for循环中定义同名的变量。
for循环可以和while循环互换结构。
2. while 循环
当条件为true时,while循环执行一条语句(或者语句块)
格式:
while (条件) 循环体
while (条件)
{
循环体 //一般要包括步长,即计数器的更新
}
如果开始循环条件的值就为false,则while循环体一次也不执行
3. do…while 循环
无论条件是否为true都要至少执行一次语句(或者语句块)
格式:
do 循环体 while(条件);
do
{
循环体 //一般要包括步长,即计数器的更新。也可能包括计数器的初始化
}while(条件);
步骤:①先执行语句(或者语句块)②检测循环条件 ③重复语句②…以此类推
中断控制流程语句及跳转语句(break、continue、return、标签)
在Java中没有使用goto,但goto为保留字。但Java增加了一条带标签的break或者带标签的continue
1. break、break 标签
break:用于退出switch语句,或者用于退出循环语句(if语句,块语句中)。中断该层循环。
-
从分支语句或循环语句中跳出来,此分支语句和循环语句都不执行了,执行之后的语句。
-
多重循环中,遇到break,结束当前层循环,不进行下一轮循环,执行当前层外一层循环。
带标签的break语句:用于跳出多重嵌套的循环语句。
注意,标签必须放在希望跳出的最外层循环之前,并且紧跟一个英文冒号:
例:
jump_this: //标签,相当于html中的书签,跳出后的落点
while(...)
{
...
for(...)
{
...
break jump_this; //起跳点
}
...
}
//跳出语句块,【不提倡使用】
jump:
{
...
if(...) break jump;
...
}
对于任何使用beak语句的代码都需要检测循环是正常结束,还是由break跳出。
注意:只能跳出语句块,不能跳入语句块
2. continue、continue 标签
continue:中断正常的控制流程,将控制转移到最内层煦暖的首部。即,中断当前这一轮的循环,跳过本轮循环剩余的语句,进入该层的下一轮循环。java中continue后面不能写语句了
带标签的continue语句:将跳到与标签匹配的循环首部。即,结束指定标签那一层的当次循环
3. return
return:用来使程序从方法中返回,并为其返回一个值。或者阻止程序继续往下执行。
格式:return 表达式;
return ;
如果return语句未出现在方法中,则执行完方法的最后一条语句后自动返回主程序。
补充:用于记程序所花费的时间。
system有个类currentTimeMillis()方法
//获取当前时间距离1970-01-01 00:00:00 的毫秒数
long start = System.currentTimeMillis();
long end = System.currentTimeMillis();
所花费的时间为:end - start