创建一个对象时,在一个类中的调用顺序:
- 调用静态代码块和静态属性初始化(注意:静态代码块和静态属性初始化调用的优先级一样,如果有多个静态代码块和多个静态变量初始化,则按他们定义的顺序调用)
- 调用普通代码块和普通属性的初始化(注意:普通代码块和普通属性初始化调用的优先级一样,如果有多个普通代码块和多个普通属性初始化,则按定义顺序调用)
- 调用构造方法。
小结:
调用顺序: 静态代码块、静态属性(按定义的顺序先后执行) > 普通代码块、普通属性(按定义的顺序先后执行) > 构造器
package test;public class Main {public static void main(String[] args) {// (1) getN1被调用...// (2) A 静态代码块01// (3) getN2被调用...// (4) A 普通代码块01// (5) A() 构造器被调用A a = new A();}}class A {//无参构造器public A() {System.out.println("A() 构造器被调用");}//普通属性的初始化private int n2 = getN2();{ //普通代码块System.out.println("A 普通代码块01");}//静态属性的初始化private static int n1 = getN1();static { //静态代码块System.out.println("A 静态代码块01");}public static int getN1() {System.out.println("getN1被调用...");return 100;}public int getN2() { //普通方法/非静态方法System.out.println("getN2被调用...");return 200;}}

