class RandomShapeGenerator{
private Random rand = new Random(47) ;
public Shape do1(){
switch(rand.nextInt(3)){
default:
case 1:
return new Triangle() ;
case 2:
return new Square() ;
case 0:
return new Cricle() ;
}
}
}
这里如果把default:放在后面,即:class RandomShapeGenerator{
private Random rand = new Random(47) ;
public Shape do1(){
switch(rand.nextInt(3)){
case 1:
return new Triangle() ;
case 2:
return new Square() ;
case 0:
return new Cricle() ;
default:
}
}
}
则会报错,说:“此方法必须返回Shape类型的结果”,为什么呢?
当有case匹配的时候,就执行该case中的内容,如果case中没有退出switch-case的语句(break或return),他会顺着执行这个case下面的所有case,直到break或者return。(在这里不纠exit,exception,error等)。
当没有case匹配的时候,就执行default中的内容,如果default中没有退出switch-case的语句,他会顺着执行default下面的所有case,直到退出switch-case。default放在最前面,没有case匹配的时候,它执行default中的内容,default中没有退出switch-case的语句,并顺着执行default下面的case,现在你的default下面的case都有return,所以不会报错。default放在最后时,没有case匹配的时候,它执行default中的内容,default中没有退出switch-case的语句下面也没有case,当然也有return,所以会报错。