Java switch语句-在一种情况下使用变量,在另一种情况下声明

Java switch语句-在一种情况下使用变量,在另一种情况下声明,java,switch-statement,Java,Switch Statement,我对Java并不陌生,但这是我以前从未见过的东西。 假设有一个switch case,在case 0中声明一个变量会使变量在其他情况下可见,这是一件奇怪的事情,我认为不是java风格的 public static void main(String[] args) { String _case = "case"; switch (_case) { case "1": String foo = "foo"; break

我对Java并不陌生,但这是我以前从未见过的东西。
假设有一个switch case,在case 0中声明一个变量会使变量在其他情况下可见,这是一件奇怪的事情,我认为不是java风格的

public static void main(String[] args) {
    String _case = "case";

    switch (_case) {
        case "1":
            String foo = "foo";
            break;
        case "2":
            String bar = "bar";
            break;
        case "case":
            foo = "foo";
            System.out.println(foo);
            // System.out.println(bar); //Variable bar might not have been initialized
            break;
    }
}
如果未验证case
1
,为什么以及如何声明
字符串foo
变量


代码在线

因为您在上一个案例中设置了
foo=“foo”
,所以它保证变量在该点被实例化。在最后一种情况下,
bar
没有被实例化的时刻,给你这个错误。这是因为一个实例中变量的作用域等于整个switch语句的作用域。关于的更多信息,因为您在上一个案例中设置了
foo=“foo”
,它保证变量在该点被实例化。在最后一种情况下,
bar
没有被实例化的时刻,给你这个错误。这是因为一个实例中变量的作用域等于整个switch语句的作用域。更多关于

的信息是的,我知道,但我在案例一中声明了foo!为什么在最后一个案例中它是可见的?这是我的question@RobertoManfredacase中变量的作用域等于整个switch语句是的,我知道,但是我在case 1中声明了foo!为什么在最后一个案例中它是可见的?这是我的question@RobertoManfreda案例中变量的范围等于整个switch语句我找到了答案,我很惊讶我可以发誓我是正确的是,看到这样的情况对我来说也很奇怪:DAnother问题==另一篇帖子。。。每个帖子请回答1个问题。我找到了答案,我很惊讶。我可以发誓我是对的。是的,看到这样的事情对我来说也很奇怪:DAnother问题==另一篇帖子。。。每个帖子请回答一个问题。