Java流程控制结构

整理的笔记
【有错请见谅且指出,无错以后自己看的时候有新见解再添】

资源

视频:https://www.bilibili.com/video/av48144058

书:《Java核心技术(原书第10版) 卷Ⅰ》

流程控制结构
流程控制结构:①顺序结构(从上而下顺序执行)②分支结构(单分支、双分支、多分支)③循环结构(for、while、do…while)

块作用域

java程序都由语句组成,语句可以是”;”结尾的简单语句,也可以是用一对花括号”{}”括起来的复合语句

块(block),即复合语句,指由一对大括号 {} 括起来的若干条简单的Java语句。

  1. 块确定了变量的作用域。
  2. 一个块可以嵌套在另一个块中。
  3. 不能在嵌套的两个块中声明同名的变量

分支结构(单分支、双分支、多分支)

分支结构:条件语句控制,选择一条路来执行

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;
}

补充:

  1. 注意有可能触发多个case分支,如果忘记在case分支语句的末尾写break语句,那程序会接着执行下一个case分支语句。

  2. 如果喜欢使用switch语句,但又容易忘记加break语句,编译代码时可以考虑加上**-Xlint:fallthrough**选项

    javac -Xlint:fallthrough Test.java //如果某个分支最后缺少一个break语句,编译器就会给出一个警告消息。

  3. 如果正是想使用的"直通式(fallthrough)"行为,可以为其外围方法加一个标注@SuppressWarning("fallthrough")。这样就不会对这个方法生成警告了。

  4. 当在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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值