选择语句、循环语句、转向语句、返回语句
if 语句是分支语句,也可以叫做条件语句 对于一个完整的 if 语句来说(if 嵌套除外),在任何情况下只能有1个分支执行,不可能存在2个或多个分支执行,if 语句中只要有1个分支执行了,整个 if 语句就结束 语法结构:
第一种写法 if(布尔表达式){ Java语句; Java语句; }该语法的执行原理:如果布尔表达式的结果是true,则执行大括号中的代码,否则不执行
第二种写法 if(布尔表达式){ //分支1 Java语句; }else{ //分支2 Java语句; }该语法的执行原理:如果布尔表达式的结果是true,则执行分支1,分支2不执行;如果布尔表达式的结果是false,则执行分支2,分支1不执行,以上语句可以保证一定会有一个分支执行
第三种写法 if(布尔表达式1){ //分支1 Java语句; }else if(布尔表达式2){ //分支2 Java语句; }else if(布尔表达式3){ //分支3 Java语句; }else if(布尔表达式4){ //分支4 Java语句; }else{ //分支5 Java语句; }该语法的执行原理:先判断布尔表达式1,如果布尔表达式1的结果为true,则执行分支1,然后 if 语句结束;如果布尔表达式1的结果是false,则执行分支2,然后 if 语句结束(从上往下依次此判断,主要看第一个true发生在哪个分支上,第一个true对应的分支执行,只要一个分支执行,整个 if 结束)
第四种写法 if(布尔表达式1){ //分支1 Java语句; }else if(布尔表达式2){ //分支2 Java语句; }else if(布尔表达式3){ //分支3 Java语句; }else if(布尔表达式4){ //分支4 Java语句; }......该语法的执行原理:分支1、2、3没有一个成立的,则执行else
以上4种语法机制中,凡是带有else分支的,一定可以保证会有一个分支执行当分支当中的“Java语句;”只有一条,那么大括号{}可以省略,但为了可读性,最好不要省略;控制语句和控制语句之间是可以嵌套的,嵌套后不要冗杂在一起分析代码,最好一条语句一条语句的分析swich语句是选择语句,也可以叫做分支语句
语法结构 switch(值){ case 值1: Java语句; Java语句; ...... break; case 值2: Java语句; Java语句; ...... break; case 值3: Java语句; Java语句; ...... break; ...... default: Java语句; } "值"的确定: 在JDK1.5之前,switch循环只支持byte short char int四种数据类型 JDK1.5 在switch循环中增加了枚举类与byte short char int的包装类,对四个包装类的支持是因为Java编译器在底层手动进行拆箱,而对枚举类的支持是因为枚举类有一个ordinal方法,该方法实际上是一个int类型的数值 JDK1.7开始支持String类型,但实际上String类型有一个hashCode算法,结果也是int类型,而byte short char类型可以在不损失精度的情况下向上转型成int类型,所以总的来说,可以认为switch中只支持int 该语法的执行原理:拿“值”与“值1”进行比较,如果相同,则执行该分支中的Java语句,然后遇到“break;”语句,switch语句就结束了;如果“值”与“值1”不相等,会继续拿“值”与“值2”进行比较,如果相同,则执行该分支中的Java语句,然后遇到“break;”语句,switch结束… 如果分支执行了,但分支最后没有“break;”,此时会发生case穿透现象(如:“值”与“值1”匹配完成,执行完Java语句后,发现没有“break;”语句,则“值”不与“值2”进行比较,直接执行下面的Java语句…)其中break语句和default分支不是必须的switch语句支持 int 类型和 String 类型(注意JDK版本,JDK8之前不支持String类型),但是 byte、short、char(小容量)也可以使用在switch语句当中,因为 byte、short、char可以进行自动类型转换(小容量自动转大容量)当所有的 case 都没有匹配成功,则执行default 语句该语法的执行原理:先执行初始化表达式,并且初始化表达式只执行一次,然后判断条件表达式的结果,如果条件表达式结果为true,则执行循环体,循环体结束之后,执行更新表达式,更新完之后,再判断条件表达式的结果,如果还是true,继续执行循环体,直到更新表达式执行结束之后,再次判断条件时,条件为false,for循环终止 初始化表达式最先执行,并且在整个循环中只执行一次;初始化变量属于for循环局部变量,只能在for循环中使用,在main方法中没有办法直接使用,for循环结束之后,变量的内存就释放了 条件表达式结果必须是一个布尔类型(true或false) 更新表达式是为了控制循环的次数,即更新某个变量的值,这样条件表达式的结果才有可能从true变成false,从而终止for循环的执行,如果缺失更新表达式,很有可能会导致死循环
初始化表达式、条件表达式、更新表达式都不是必须的 public static void main(String[] args){ for(;;){ System.out.println("死循环"); } }该语法的执行原理:判断布尔表达式的结果,如果为true就执行循环体,循环体结束之后,再次判断布尔表达式的结果,如果还是true,继续执行循环体,直到布尔表达式结果为false,while循环结束
while循环的次数是0~n次该语法的执行原理:先执行循环体当中的代码,执行一次循环体之后,判断布尔表达式的结果,如果为true,则继续执行循环体,如果为false则循环结束
do…while循环的次数是1~n次