流程控制的陷阱
流程控制的陷阱:
switch语句陷阱:
default分支会永远执行吗?
只有前面的分支都没有执行或者没有break,return等终止的时候default语句才执行。
public static void main(String[] args){
char s = 'B';
switch(s){
case 'A':
System.out.println('A');
case 'B':
System.out.println('B');
case 'C':
System.out.println('C');
default:
System.out.println('D');
}
}//输出B C D
break的重要性:
在case分支后的每个代码块都有一天break;语句,这个break;语句具有很重要的意义,用于终止当前分支的执行体。如果某个case分支之后没有使用break;来终止这个分支的执行体,它将越过下一个分支的执行条件,进行下一个分支的执行。
switch表达式的类型:
byte、short、int、char、enum(1.5)、String(1.7)
循环体的省略花括号:
java在if语句、while语句、for语句有些时候可以省略花括号。
如果省略花括号,表示作用范围到该语句之后的第一个分号结束。
最好不要省略循环的花括号。
class Cat{
private static long instanceCount = 0;
public Cat(){
instanceCount++;
}
public static long getInstanceCount(){
return instanceCount;
}
}
public class CatTest{
public static void main(String[] args){
for(int i = 0; i < 10; i++)
Cat cat = new Cat();
System.out.println(Cat.getInstanceCount());
}
}
程序报错:CatTest.java:21:不是语句
Cat cat = new Cat();
CatTest.java:21:需要‘;’
Cat cat = new Cat();
为什么吗会这样呢?因为java语言规定:for、while、或者do循环中的重复执行语句不能是一条单独的局部变量定义语句;如果程序要使用循环来定义局部变量,这条局部变量定义语句必须放在花括号内才有效。
for循环中的注意:
使用forEach的时候不要在循环内对循环变量进行复制,虽然这种赋值在语法上是允许的,但是没有太大意义。因为forEach循环中的循环计数器本身不是数组元素、集合元素,它只是一个中间变量,临时保存了正在遍历的数组元素、集合元素。

浙公网安备 33010602011771号