Mar*_*Ion 8 java scope initialization switch-statement variable-declaration
Java编译器如何处理以下交换机块?'b'变量的范围是什么?
请注意,'b'变量仅在switch语句的第一个分支中声明.尝试在第二个分支中声明它也会导致"重复的局部变量"编译错误.
int a = 3;
switch( a ) {
case 0:
int b = 1;
System.out.println("case 0: b = " + b);
break;
case 1:
// the following line does not compile: b may not have been initialized
// System.out.println("case 1 before: b = " + b);
b = 2;
System.out.println("case 1 after: b = " + b);
break;
default:
b = 7;
System.out.println("default: b = " + b);
}
Run Code Online (Sandbox Code Playgroud)
注意:上面的代码用java 1.6编译器编译.
Kai*_*Kai 12
范围b是块.你只有一个包含所有cases的块.这就是你b在第二次重新声明时遇到编译错误的原因case.
你可以将每个包装case在一个自己的块中
case 0:
{
int b = 1;
...
}
case 1:
{
int b = 2;
...
}
Run Code Online (Sandbox Code Playgroud)
但我认为FindBugs或CheckStyle会抱怨这一点.