开关案例语句中的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;
    ...
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章