在使用JDK提供的SystemClassLoader类加载器时,loadClass()方法只会加载类信息,并不会执行类中的静态代码块。只有程序第一次声明对象时,才会执行静态代码块。注意:此时是先执行静态代码块,再执行构造函数。当声明子类对象时,先执行父类静态代码块,接着执行子类静态代码块,再执行父类构造函数,最后在执行子类构造函数。
测试实例如下:
public class Person {
static {
System.out.println("person static");
}
public Person() {
System.out.println("person constructor");
}
}
public class Teacher extends Person {
static {
System.out.println("teacher static");
}
public Teacher() {
super();
System.out.println("teacher constructor");
}
}
public class PersonDemo {
public static void main(String[] args) {
System.out.println("start");
Teacher teacher = new Teacher();
System.out.println("end");
}
}
运行结果如下(JDK1.8):