静态变量
代码:
public class One {
public static void main(String[] args) {
System.out.println("mian--->"+Zi.strFu);
}
}
class Fu{
public static String strFu = "hello world fu";
static{
System.out.println("fu static code.......................");
}
}
class Zi extends Fu{
public static String strZi = "hello world zi";
static{
System.out.println("fu static code.......................");
}
}
结果:
原因:
当使用类的静态变量时只有定义这个静态变量的类才会被初始化,只有类初始化时才会执行类的静态代码块。
静态常量
代码:
public class Two {
public static void main(String[] args) {
System.out.println("mian--->"+Test.strTest);
}
}
class Test{
public static final String strTest = "hello world test";
static{
System.out.println("test static code.......................");
}
}
结果:
原因:
因为常量在编译阶段会存入到调用这个常量的方法所在的类的常量池中,所以在上述例子中常量strTest在运行时存在Two类的常量池中和Test类没有任何关系,所以Test并不会被初始化,理所当然也不会执行Test类的静态代码块。