switch case语句中的java范围声明如何?
以下Java代码在Java 1.7中无错误地执行
public static void main(String[] args) { int x = 5; switch(x) { case 4: int y = 3423432; break; case 5: { y = 33; } } }
java如何确定y是一个int,因为声明永远不会运行。 在case语句中没有使用大括号时,case语句中的变量声明是否限定为switch语句级别?
声明不是“运行” – 它们不是需要执行的东西,它们只是告诉编译器变量的类型。 (初始化程序会运行,但这很好 – 在为其赋值之前,你不是要尝试读取变量。)
在switch语句中确定范围绝对是奇怪的,但基本上在第一种case
声明的变量在第二种case
仍然在范围内。
从JLS第6.3节开始 :
块(第14.4节)中局部变量声明的范围是声明出现的块的其余部分,从其自己的初始化程序开始,并在本地变量声明语句中包含右侧的任何其他声明符。
除非您创建额外的块,否则整个switch语句是一个块。 如果您想为每个案例设置一个新范围,您可以使用大括号:
case 1: { int y = 7; ... } case 2: { int y = 5; ... }
案件本身并未声明范围。 范围受{
和}
限制。 因此,您的变量y
在外部范围(整个开关)中定义,并在内部范围( case 5
)中更新。
据我所知,完整的switch语句是一个范围。 没有rest; 或返回; 声明其他开关案例也将被解释。 因此,当您在switch语句中定义变量时,它在孔开关盒中可见。