import java.util.Random;
public class Holder{
public static void f(boolean b) throws Exception{
System.out.println("Kobe");
if(b)
throw new Exception("Error from f()");
}
public static void main(String[] args) throws Throwable{
try{
Random rand=new Random();
int a=rand.nextInt(2);
boolean c;//我这里没有初始化,但下面根据来初 
          //始化了,但是却不能被编译,说是c没
                                     //有被初始化,这是怎么回事?
                           switch(a){
case 0:
c=true;
break;
case 1:
c=false;
break;
default: 
System.out.print("Bryant");
}
f(c);
}catch(Exception e){
System.err.println("f() Error!");
e.printStackTrace();
}
}
}

解决方案 »

  1.   

    因为下面的分支可能都没有运行到,那时候就不知道c是什么了
    你直接给c一个true或者false的初始值就好
      

  2.   

    这种情况是java为了提高程序的安全性做的检查,楼上的说得有道理,因为你所用到的c这个变量,在声名的时候没有初使化,下面使用到的地方全是在分支语句里,但有可能所有分支都不会运行,所以就会报错了.