先看下代码,很简单:
public static void main(String[] args) {
byte i=2;
switch(i){
case 1:
byte var=1;
System.out.println(var);
break;
case 2:
var=2;
System.out.println(var);
break;
case 3:
var=3;
System.out.println(var);
break;
}
}
问题是为什么case 1没有做,在case 2 或 3 中就可以直接使用变量var,而且编译不报错?
如果Thinking in Java里面有提到过的话能不能告诉我在第几页或哪一章,谢谢~~

解决方案 »

  1.   

    你这个程序没有问题啊!switch(i)里面的i匹配上面的byte   i=2; i如果是1,就作第一个case 1,如果是3,就作第一个case 3,下面最好写个defanlt:如果什么都不匹配,就做defanlt后面的.
      

  2.   

    To cursor_wang :程序是没有问题,你仔细看case 1里面的byte var=1这一句,再看其他case中的语句,其中case 2、3、……、n都没有定义过变量var,为什么我就可以跳过case 1中的定义直接使用var了呢?下面这么写可能看的更清楚点:        public static void main(String[] args) {
    switch(3){
    case 1:
    byte var=1;  //跳过
    break;
    case 2:
    var=100;  //跳过
    break;
    case 3:           //开始执行
    var=125;
                            System.out.println(var);
    break;
    }
    }输出的值是125是不是和编译的方式有关系?是不是在编译的时候认为我已经定义了变量var,等编译完,执行的时候就可以使用了?