1、什么是选择语句?
选择语句又称为分支语句,通过对给定条件进行判定,从而决定执行两个或多个分支的哪一个。在java中选择语句有if语句和switch语句。
2、if语句
1)if语句的语法格式:
-
第一种写法:
if(布尔表达式){ java语句; java语句; }
执行方式:
如果布尔表达式的结果为true,则执行大括号里的程序,如果结果为false,大括号中的代码不执行。
-
第二种写法:
if(布尔表达式){ //分支1 java语句; }else{ //分支2 java语句; }
执行方式:
先对布尔表达式进行判定,如果结果为true,则执行分支1,分支2不执行,如果结果为false,分支1不执行,执行分支2。
-
第三种写法:
if(布尔表达式1){ //分支1 java语句; }else if(布尔表达式2){ //分支2 java语句; }else if(布尔表达式3){ java语句; }else if(布尔表达式4){ java语句; }......
执行方式:
先判断“布尔表达式1”,如果“布尔表达式1”的结果为true,则执行分支1,然后if语句就结束了。
当”布尔表达式1“的结果是false,那么会继续判断布尔表达式2的结果,如果布尔表达式2的结果是true,则执行分支2,然后整个if就结束了。
从上往下依次判断,主要看第一个true发生在那个分支上,第一个true对应的分支执行。只要一个分支执行,整个if结束。
-
第四种写法:
if(布尔表达式1){ // 分支1 java语句; }else if(布尔表达式2){ // 分支2 java语句; }else if(布尔表达式3){ java语句; }else if(布尔表达式4){ java语句; }else{ java语句; // 以上条件没有一个成立的。这个else就执行了。 }
2)需要注意的地方
-
对于if语句来说,在任何情况下只能由一个人分支执行,不可能存在两个或更多分支的执行。if语句中只要有一个分支执行了,整个if语句就结束了。
-
以上4种语法机制中,凡是带有else分支的,一定可以保证会有一个分支执行。以上4种当中,第一种和第三种没有else分支,这样的语句可能会导致最后一个分支都不执行。第二种和第四种肯定会有1个分支执行
-
当分支中的java语句语句只有一条时,大括号可以省略。
例如:
if(i==10)
System.out.println(“i=”+i);
-
if后的括号里只能是true或者false,不能是其他。
3)代码示例
public class Test{
public static void main(String[] args){
//判断数字区间
int i=25;
if(i<0)
System.out.println("是一个负数");
else if(i<50)
System.out.println("该数是一个小于50的正数");
else{
System.out.println("这是一个大于100的数");
System.out.println(".....");
}
}
}
输出结果:“该数是一个小于50的正数”
3、switch语句
1)语法格式
switch(变量){
case value :
//语句
break; //可选
case value :
//语句
break; //可选
......
//你可以有任意数量的case语句
default : //可选
//语句
}
2)switch case语句规则
- switch 语句中的变量类型可以是:int或者String。switch语句本质上是只支持int和String,但是byte,short,char也可以使用在switch语句当中,因为byte short char可以进行自动类型转换。从 Java SE 7 开始,switch 支持字符串 String 类型了,同时 case 标签必须为字符串常量或字面量。
- switch 语句可以拥有多个 case 语句。每个 case 后面跟一个要比较的值和冒号。
- case 语句中的值的数据类型必须与变量的数据类型相同,而且只能是常量或者字面常量。
- 当变量的值与 case 语句的值相等时,那么 case 语句之后的语句开始执行,直到 break 语句出现才会跳出 switch 语句。
- 当遇到 break 语句时,switch 语句终止。程序跳转到 switch 语句后面的语句执行。case 语句不必须要包含 break 语句。如果没有 break 语句出现,程序会继续执行下一条 case 语句,直到出现 break 语句。
- switch 语句可以包含一个 default 分支,该分支一般是 switch 语句的最后一个分支(可以在任何位置,但建议在最后一个)。default 在没有 case 语句的值和变量值相等的时候执行。default 分支不需要 break 语句。
3)代码示例
示例一:
public class Test{
public static void main(String[] args){
char grade='c';
switch(grade){
case 'a':
System.out.println("优秀");
break;
case 'b':
System.out.println("良好");
break;
case 'c':
System.out.println("及格");
break;
case 'd':
System.out.println("不及格");
default:
System.out.println("无法识别的等级");
}
}
}
输出结果:“及格”
示例二:
public class Test{
public static void main(String[] args){
char grade='c';
switch(grade){
case 'a':
System.out.println("优秀");
case 'b':
System.out.println("良好");
case 'c':
System.out.println("及格");
case 'd':
System.out.println("不及格");
default:
System.out.println("无法识别的等级");
}
//switch case语句遇到break才会停止,否则从匹配的case语句开始,会一直往下执行
//这种现象称为“穿透现象”
}
}
输出结果: