声明不是“运行”-不需要执行声明,它们只是告诉编译器变量的类型。(将运行一个初始化程序,但这很好-您在分配变量值之前不尝试读取该变量。)
switch语句中的作用域绝对是奇怪的,但是基本上在第一个声明的变量
case仍然在第二个的范围内
case。
从JLS的6.3节开始:
块中的局部变量声明的范围(第14.4节)是该声明在其中出现的其余部分,从其自身的初始化程序开始,并在局部变量声明语句的右侧包括其他任何声明符。
除非您创建额外的块,否则整个switch语句都是一个块。如果需要每种情况的新作用域,则可以使用花括号:
case 1: { int y = 7; ...}case 2: { int y = 5; ...}


