目录
一、顺序结构
二、选择结构
2.1 if语句
2.2 switch语句
三、循环结构
3.1 for语句
3.2 while语句
3.3 do while语句
3.4三种循环语句的区别
四、控制跳转语句
4.1 continue语句
4.2 break语句
4.3 return语句
Java中的流程控制语句即可以控制程序的执行流程。
一般可以分为三类:
顺序结构非常简单,一行一行地运行代码。
从上向下,依次执行。
我们用下列代码测试顺序结构的执行步骤:
System.out.println(1);
System.out.println(0);
System.out.println(2);
System.out.println(4);
下面是执行的结果:
选择结构一般分为:
if语句的执行流程是会先计算表达式的值,
如果表达式的返回值为true,则执行if条件后面的语句,
如果表达式的返回值为false,若有else语句,则执行else语句后面的语句。其一般形式如下:
if(Comparison expression 1){
do A;
}
else{
do B;
}
需要注意的是,if后面的判断语句返回值必须是boolean类型,不能和C++那样里面直接写一个非0的数就代表为true。
我们对选择结构进行测试:
public class Main {
public static void main(String[] args){
boolean workhard=true;
if(workhard)
System.out.println("Success :)");
else
System.out.println("Fail :(");
}
}
下面是结果:
如果我们希望if语句能处理多种结果的情况,那么光if-else这两个分支显然不够用,这时我们就需要使用到else if语句:
if(Comparison expression 1){
do A;
}
else if(Comparison expression 2){
do B;
}
else if(Comparison expression 3){
do C;
}
else{
do D;
}
其执行流程为先看比较表达式1,如果为true则执行语句A,如果为false则看比较表达式2,
比较表达式2若为true则执行语句B,若为false则看比较表达式3,
比较表达式3若为true则执行语句C,若为false则直接执行语句D。
我们用一段代码来联系一下else if语句的使用:
public class Main {
public static void main(String[] args){
int age=21;
if(age<18)
System.out.println("Child");
else if(age<50)
System.out.println("Adult");
else
System.out.println("The aged");
}
}
下面是程序的运行结果:
和后面的swtich语句相比,if语句更适合判断区间或者范围的时候使用。
相比于if语句,switch语句更适合判断固定值的时候使用,一般形式如下:
switch(expression e){
case value1:
do code1;
break;
case value2:
do code2;
break;
...
...
default:
do codeN+1;
break;
}
其中表达式e的数据类型可以是基本数据类型和引用数据类型,
基本数据类型有byte、short、char、int,(主要是可以直接转换为int类型的数据并且不损失精度 )
引用数据类型有枚举类型(JDK1.5)与String字符串(JDK1.7)
我们以String类型为例进行代码测试:
public class Main {
public static void main(String[] args){
String language="Java";
switch (language){
case "Java":
System.out.println("Java天下第一");
break;
case "C++":
System.out.println("C++天下第一");
break;
case "C":
System.out.println("C语言天下第一");
break;
default:
System.out.println("Python天下第一");
}
}
}
结果如下:
其中有几个要注意的问题:
循环结构主要有:for、while、do while三种。
for语句的格式一般如下:
for(初始条件语句;条件表达式;循环后操作表达式){
循环语句;
}
其执行流程和C++一样,首先会执行初始条件语句,紧接着就会执行条件表达式,
如果条件表达式为false,则结束循环,如果为true,就执行循环语句,然后接着执行循环后操作表达式,
然后再对条件表达式进行判断,如果为false则结束循环,如果为true则执行循环语句和循环后操作表达式以此循环。
我们以循环输出10次Helloworld为例,对for循环进行代码实现:
public class Main {
public static void main(String[] args){
for(int i=0;i<10;i++){
System.out.println("HelloWorld!");
}
}
}
下面是输出的结果:
while语句的格式一般如下:
初始化语句;
while(判断条件语句){
循环体语句;
控制条件语句;
}
执行步骤一般先执行初始化语句,
然后执行判断条件语句,如果为false则结束循环,
如果为true则执行循环体语句和控制条件语句,
结束后再执行判断条件语句以此循环。
我们还是以输出10次Helloworld为例进行while语句的实验:
public class Main {
public static void main(String[] args){
int count=0;
while(count<10){
System.out.println("HelloWorld!(while语句)");
count++;
}
}
}
运行结果如下图:
do while语句和while语句非常像,其一般形式如下:
初始化语句;
do{
循环体语句;
控制条件语句;
}while(条件控制语句);
一般步骤先执行初始化语句,然后直接进入循环体,执行一次循环体语句和控制条件语句,
最后判断条件控制语句的真假,如果为false则结束循环,如果为真则进入下一次循环,再执行循环体语句和控制条件语句以此循环。
我们还是用helloworld测试do while语句:
public class Main {
public static void main(String[] args){
int count=0;
do{
System.out.println("HelloWorld!(do while语句)");
count++;
}while(count<10);
}
}
其结果如下:
控制跳转语句一般只会出现在switch语句和循环语句中,
其作用是让程序跳出switch选择结构体或者跳出循环体然后顺序执行后续的语句,
控制跳转语句一般有continue语句、break语句和return语句。
continue顾名思义就是继续的意思,只能出现在循环体中出现,
当程序执行到循环体中的continue语句时,会直接进入下一次循环,而不执行continue语句后面的循环体语句。
我们以输出0到10的所有奇数为例体会continue语句的作用:
public class Main {
public static void main(String[] args){
for(int i=0;i<=10;i++){
if(i%2==0)
continue;
System.out.println(i);
}
}
}
运行结果如下:
可以看到当i模2的余数为0时(即i为偶数时),就执行continue语句,然后就进入下一次循环,不输出i的值,
所以输出的都是奇数。
break语句和continue语句差不多,但是有一个很大的区别时,
当程序执行到break语句,不仅不执行break语句后面的循环体语句,就连下次循环都不执行了,直接结束循环。
我们将上面的例子中的continue语句换为break测试一下效果:
结果发现啥也没输出,因为一开始i的初始值为0,满足模2余数为0的条件,执行到break语句直接跳出循环程序结束,
所以啥也没输出。
在使用break时需要注意
但是如果我们想在内层循环中使用break语句直接跳到最外层循环那就需要加入标记。
我们用一个程序为例:
public class Main {
public static void main(String[] args){
flag:for(int i=0;i<10;i++){
for(int j=0;j<10;j++){
break flag;
}
System.out.println("你没有跳出外层循环!");
}
}
}
我们分析一下,如果是用普通的break语句,内层循环会被跳出,然后执行外层循环的内容,
也就是会输出“你没有跳出外层循环!”这句话,
但是如果我们加入了标识符,在最外层循环加入标识符:flag(也可以取其他名字),标识符的命名规则和变量相同,
并且在break语句后面加入flag,那么程序会输出什么呢?
答案是啥也不输出,我们验证一下:
关于这个标号有个很有意思面试题:
System.out.println("123");
http://www.baidu.com
System.out.println("321")
面试官可能会问你这个代码能运行吗?
第一眼看上去中间那行啥玩意儿啊,都不是一条语句,肯定会报错,
但是分析一下,http后面跟的冒号,就是一个标识符而已,然后加上注释“//”所以后面的语句被注释掉了,
所以程序会正常运行,输出123和321。
return语句的作用是跳出方法,而不是跳出循环,
下面我们用代码测试一下return语句的作用。
public class Main {
public static void main(String[] args){
for(int i=0;i<10;i++){
System.out.println("我要开始跳出方法了");
return;
}
System.out.println("你好像没跳出方法");
}
}
其运行结果如下:
如果我们return语句换为break,则其结果如下:
这就是return和break的不同。