关于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