int a = 1;
switch (a) {
case 0: 
int k = 0;
System.out.println("case 0: " + k);
break;
case 1: 
int kk = 9;//在这里会报kk重复定义的错误
System.out.println("case 1: " + k);
}                int a = 1;
switch (a) {
case 0: 
int kk = 0;
System.out.println("case 0: " + kk);
break;
case 1: 
System.out.println("case 1: " + kk);//这里报kk没有赋初始值的错误
}
//这块没有出现错误
                int a = 1;
switch (a) {
case 0: {
int k = 0;
System.out.println("case 0: " + k);
break;
                        }
case 1: 
                       {
int kk = 9;
System.out.println("case 1: " + k);
                       }
}
坐等高手来解释下。

解决方案 »

  1.   

    case内部定义的变量,只在case内部存在,是局部变量你第二个例子中k是在case 0中定义的,所以case 1里会报k没定义同理,第三个就是正确的了,每一个case里都定义了
    第一个例子,需要看你完整的代码kk到底定义没?
      

  2.   

    楼主实话说,三段代码应该都有问题包括第三个,第一个报错System.out.println("case 1: " + k);k没有初值
    第二个报错System.out.println("case 1: " + kk);kk没有初值,以上两种情况比较像,因为case语句都在swatch语句块中,但是case 1:后面没有赋值给打印输出的变量
    第三个应该也有错 你把case 1:后面写了个语句块,而且定义的是int kk = 9; 打印的是k 编译器应该不识别k  不知道怎么回事你那没报错
      

  3.   

    第一个,System.out.println("case 1: " + k) 中k未定义;以为case0没有执行,所以k未定义。
    第二个,System.out.println("case 1: " + kk)也是这个问题
    第三个,也是case1里定义的是kk,不是k,所以和第一个问题一样根据代码片段,只有第二个符合你说的问题
    不知道你是怎么回事,还是要看你完整的源码?