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

关于static 块的问题?????????
1.public   class   Main   {
public   static   void   main(String[]   args){
System.out.println(Sta.test);
}
}
class   Sta{
public   final   static   String   test= "abc ";  
static{
System.out.println( "111 ");//不会显示“111”
}  
}

2.public   class   Main   {
public   static   void   main(String[]   args)   {
System.out.println(Sta.test);
}
}
class   Sta{
public   final   static   String   test=new   String( "abc ");
static{
System.out.println( "111 ");//显示111
}  
}

3.public   class   Main   {
public   static   void   main(String[]   args)   {
System.out.println(Sta.test);
}
}

class   Sta{
public   final   static   String   test;  
static{
test= "abc ";
System.out.println( "111 ");//显示111
}  
}
这是为什么?????



------解决方案--------------------
首先要静态初始化块是在类被加载的时候执行的

1不会显示“111”是因为,public final static String test= "abc "; test是静态初始化常量并且是用子面量;进行初始化,java编译器在优化的时候是直接把test替换成”abc“的。所以不会加载Sta类。

2因为要执行NEW操作进行初始化所以必须加Sta载类。
3这个和1很相似区别是test= "abc ";是赋值而不是初始化,这样java系统是先建立test应用,让后把”abc“零时对象赋值给test,所以也要加载Sta