if...else语句:最常用的分支语句
switch语句:多路分支语句
while语句:最常用的循环语句,先检查循环条件,再执行循环体
do...while语句:先执行循环体,再检查循环条件,循环体至少会执行一次
for语句:先检查循环条件,再执行循环体,通常用于事先确定循环次数的场合
一、条件语句
if...else,while,do...while,for语句的条件表达式都必须是布尔表达式,不能为数字类型。switch表达式和case表达式必须是byte、short、char或int类型,而且case表达式必须为常量。
1、if...else语句为两路分支语句,基本语法为:
if(布尔表达式){
程序代码块;//布尔表达式为true,执行这段代码
}else{
程序代码块;//布尔表达式为false,执行这段代码
}
if...else语句的注意事项:
a、if后面的表达式必须是布尔表达式,而不能是数字类型;
int x =0;
if (x) {//编译出错,注意这儿写x=0也是不对的,一开始原以为赋值表达式是可以的呢,正确做法是把if(x)该为if(x!=0)
System.out.println("x不等于0");
}else{
System.out.println("x等于0");
}
b、if语句后面的else语句不是必需的;
c、假如if语句或者else语句的程序代码块中包括多条语句,则必须放在大括号内;若程序代码只有一条语句,则可以不用大括号{}。流程控制语句可以作为一条语句对待
int a = 1,b=1;
if(a>b)
a++;
b--;
System.out.println("a="+a+"b="+b);// 打印a=1,b=0
d、if...else语句的一种特殊串联编程风格
if (condition1) {
statement1
} else if(condition2) {
statement2
}else if (condition3) {
statement3
} else {
statement4
}
2、switch语句为多路分支语句,它的基本语法为:
switch (expr) {
case value1:
statements;
break;
...
case valueN:
statements;
break;
default:
statements;
break;
}
switch语句的使用注意事项:
a、
在switch(expr)语句中,expr表达式的类型必须是与int类型兼容的基本类型,所谓与int类型兼容,就是指能自动转换为int类型,因为expr表达式的合法类型包括byte、 short、char和int类型,long和浮点类型不能自动转换为int类型,因此不能作为expr表达式的类型。
double d = 11.2;
switch(d){//编译出错,类型不匹配
}
b、在case valueN子句中,valueN必须满足以下条件:
1、valueN的类型必须是与int类型兼容的基本类型,包括byte、 short、char和int类型
2、valueN必须是常量
3、各个case子句的valueN表达式的值不同
int x = 4,y = 3; final byte z = 4; switch (x) { case 1://合法 System.out.println("1"); break; case 4/3+1://合法,4/3+1为int类型的常量表达式 System.out.println("2"); break; case 1://编译出错,不允许出现重复的case表达式 System.out.println("repeat 1"); break; case y://编译出错,y不是常量 System.out.println("3"); break; case z://合法,z是与int兼容的常量 System.out.println("4"); break; case 5,6,7://编译出错,case表达式的语法不正确 System.out.println("5,6,7"); break; default: break; }
c、在switch语句中最多只能有一个default子句,default子句是可选的。当switch表达式的值不与任何case子句匹配时,程序执行default子句,假如没有default子句,则程序直接跳出switch语句,default子句可以位于switch语句中的任何位置,通常都将default子句放在所有case子句的后面
d、如果switch表达式与某个case表达式匹配,或者与default情况匹配,就从这个case子句或者default子句开始执行,假如遇到break语句,就跳出整个switch语句,否则一次执行switch语句中的后续的case子句,不再检查case表达式的值
int x = 5; switch (x) { default: System.out.println();//x与default情况匹配,因此从这行开始执行 break; case 1: System.out.println("case1"); case 2: System.out.println("case2"); case 3: System.out.println("case3"); break; case 4: System.out.println("case4"); } 以上代码的打印结果为: default case1 case2 case3
e、switch语句的功能也可以用if...else语句来实现
在某些情况下,假如决定流程分支的条件表达式的类型与int类型兼容,则使用switch语句会使程序更加简洁,可读性更强。而if...else语句的功能比switch语句的功能更强大,它能够灵活控制各种复杂的流程分支。
二、循环语句
循环语句的作用是反复执行一段代码,知道不满足循环条件为止,循环条件一般包括以下4个部分:
初始化条件:用来设置循环的的一些初始条件,比如设置循环控制变量的初始值
循环条件:这是一个布尔表达式,每次循环都要对该表达式求值,以判断是否继续循环还是终止循环,其中通常会包含循环控制变量
循环体:循环操作的主体部分,可以是一条语句,也可以是多条语句
迭代部分:通常属于循环体的一部分,用来改变循环控制变量的值,从而改变循环表达式的布尔值
Java语言提供了3种循环语句:
while语句:最常用的循环语句,先检查循环条件,再执行循环体
do...while语句:先执行循环体,再检查循环条件,循环体至少会执行一次
for语句:先检查循环条件,再执行循环体,通常用于事先确定循环次数的场合
1、while语句 最基本的循环语句,格式如下,其中初始化部分是可选的。
[初始化部分]
while(循环条件){
循环体,包括迭代部分
}当代表循环条件的布尔表达式的值为true时,就重新执行循环,否则终止循环。
使用注意事项:
a、如果循环体内有多条语句,必须将其放在大括号内,若循环体只有一条语句,则可以不用大括号
b、while语句在循环一开始就计算条件表达式,弱表达式的值为false,则循环体一次也不会执行
c、while语句(for语句和do...while语句)的循环体可以为空,这是因为一个空语句在语法上是合法的
d、对于while语句(for语句和do...while语句),都应该确保提供终止循环的条件,避免死循环
2、do...while语句
do...while语句首先执行循环体,然后再判断循环条件,基本格式如下,初始化部分是可选的。
[初始化部分]
do{
循环体,包括迭代部分
}while(循环条件)
在任何情况下,do...while语句会至少执行一次循环体,然后再判断循环条件,当代表循环条件的boolean表达式为true时,就继续执行循环体,
否则终止循环
3、for语句
for语句与while语句一样,也是先判断循环条件,再执行循环体,它的格式为:
for(初始化条件;循环条件;迭代条件){
循环体
}
在执行for语句时,先执行初始化部分,这部分只会被执行一次,接下来计算作为循环条件的布尔表达式,如果为true,就执行循环体,接着执行迭代部分,然后再计算作为循环条件的布尔表达式,如此反复。
for (int i = 3; i > 0; System.out.println("i="+(--i))) { System.out.println("循环体打印:i="+i); }
运行结果为:
循环体打印:i=3
i=2
循环体打印:i=2
i=1
循环体打印:i=1
i=0
注意事项:
a、如果for语句的循环体只有一条语句,可以不用大括号
b、控制循环的变量常常只用于笨循环,而不用在其他地方,这种情况下,可以在循环的初始化部分声明变量
for(int n=1;n<=10;n++){
System.out.println("ticket "+n);
}
c、在初始化部分和迭代部分可以使用逗号语句。逗号语句是用逗号分隔的语句序列
public static int[] inverse(int[] oldArray){ if (oldArray==null||oldArray.length==0) throw new IllegalArgumentException("无效的数组"); int [] newArray = new int[oldArray.length]; for (int i = 0, j = oldArray.length-1;i<oldArray.length; i++,j--) { newArray[j]=oldArray[i]; } return newArray; }
d、for语句的初始化部分、循环条件或者迭代部分都可以为空
e、作为一种编程惯例,for语句一般用在循环次数事先可以确定的情况下,而while和do...while语句则用在循环次数事先不可确定的情况下