日期:2014-05-20  浏览次数:20981 次

关于一个boolean型的初始化
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();
}
}
}

------解决方案--------------------
因为下面的分支可能都没有运行到,那时候就不知道c是什么了
你直接给c一个true或者false的初始值就好
------解决方案--------------------
这种情况是java为了提高程序的安全性做的检查,楼上的说得有道理,因为你所用到的c这个变量,在声名的时候没有初使化,下面使用到的地方全是在分支语句里,但有可能所有分支都不会运行,所以就会报错了.