以下代码演示了创建一个对象并调用方法各个代码块之间的优先关系:
public class Person {
static{
System.out.println("1.我是静态块,优先于构造块执行!并且只有创建第一个对象的时候执行一次!");
}
{
System.out.println("2.我是构造块,优先于构造方法执行!每创建一个对象执行一次!");
}
public Person() {
System.out.println("3.我是构造方法,每创建一个对象执行一次");
}
public void function1(){
System.out.println("我是非静态方法中的普通代码块,方法被调用时执行!");
}
public static void function2(){
System.out.println("我是静态方法中的普通代码块,方法被调用时执行,晚于静态块执行!");
}
}
测试类:
public class HelloWrold {
public static void main(String[] args) {
new Person().function1();
new Person().function1();
System.out.println("=================");
Person.function2();
Person.function2();
}
}
运行结果:
我们可以看出:静态块总是最先执行的,并且只有在创建该类的第一个实例的时候才会执行一次;第二执行的是构造块;第三执行的是构造方法。