Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
特殊开关盒初始化工作,但为什么?Java开关盒_Java - Fatal编程技术网

特殊开关盒初始化工作,但为什么?Java开关盒

特殊开关盒初始化工作,但为什么?Java开关盒,java,Java,我今天的java课程中出现了这段代码,甚至连教授都无法回答为什么会这样。我希望你们中的一位知道答案并能给我 有了评论的部分,它工作起来很奇怪。如果我对z=3的部分进行注释,则它不起作用。有人能解释一下吗:D? 提前谢谢 public static void main(String[] args) { int a = 2; switch(a) { case 1: int z=6; case

我今天的java课程中出现了这段代码,甚至连教授都无法回答为什么会这样。我希望你们中的一位知道答案并能给我

有了评论的部分,它工作起来很奇怪。如果我对z=3的部分进行注释,则它不起作用。有人能解释一下吗:D? 提前谢谢

public static void main(String[] args) {

        int a = 2;
        
        switch(a) {
        case 1:
            int z=6;
        case 2:
            //z=3;
            System.out.println(z);
        }

开关外壳内声明的变量是局部作用域的一部分。 你应该划定范围

  public static void main(String[] args) {

    int a = 2;
    
    switch(a) {
    case 1: {
        int z=6;
     // if a was 1, case 2 would be reached too, because there is no break here
    }
    case 2:{
        int z=3;
        System.out.println(z);    
    } 
    }
如果您想使用z变量,您应该在swtich旁边声明它

通常的做法是:

  public static void main(String[] args) {

    int a = 2;
    
    switch(a) {
    case 1: {
        int z=6;
     
    }
    break;
    case 2:{
        int z=3;
        System.out.println(z);    
    } 
    break;
    }
此代码无法编译,因为
z
尚未明确分配。如果
a==2
,则未为其分配任何值。因为它是一个局部变量,所以在使用之前必须对其进行明确赋值

如果您取消注释
//z=3
行,它会起作用,因为
z
肯定是赋值的
z
在这里的作用域中,尽管它是在不同的情况下声明的,只是因为Java的作用域规则在开关情况下就是这样工作的

:

块(§14.4)中局部变量声明的范围是声明出现的块的其余部分,从其自身的初始值设定项开始,并包括局部变量声明语句右侧的任何其他声明符


块是紧跟在开关(a)之后的
{…}
。因此,您可以在
int z=

之后的该块中的任何位置引用变量
z
,“工作”到底意味着什么?这个代码是做什么的?您的代码没有编译,原因是:z没有被明确指定。它编译时未注释注释。
z
案例1
中声明。直到那时它才被声明。@HenryTwist当
a
2
时,值是如何分配的?变量
z
将没有赋值,因此会出现错误消息。奇怪的是,您可以取消注释
//z=3
,这样做有效,否则就不会。这意味着
z
案例1:
范围之外可用。
        int a = 2;
        
        switch(a) {
        case 1:
            int z=6;
        case 2:
            //z=3;
            System.out.println(z);
        }