构造类的过程中各种代码的访问顺序

来源:互联网 发布:软件系统设计方案 编辑:程序博客网 时间:2024/05/18 00:58

构造类的过程中各种代码的访问顺序:

访问类时首先初始化静态变量、静态代码块;

类实例化时先定位到最终实例化使用的构造器,然后首先初始化普通变量、普通代码块,然后继续访问构造器进行实例化。


所以,此例中,先进入无参构造器,发现调用了另一个构造器进而进入被调用的构造器,在构造器继续进行初始化前先访问普通代码块,所以this(a)传入的参数是10而不是8。

同理,涉及到继承时,由于需要先初始化父类,所以顺序是:进入无参->进入有参->进入父类构造器->返回有参->范围普通代码块...


由于这样的访问顺序,所以构造器在调用其它构造器的代码必须是构造器内的首句代码。


(测试代码转载自网络)

public class TT {    public static int a = 0;    static {        a = 10;        System.out.println("静态代码块在执行a=" + a);    }    {        a = 8;        System.out.println("非静态代码块在执行a=" + a);    }    public TT() {        this(a); // 调用另外一个构造方法        System.out.println("无参构造方法在执行a=" + a);    }    public TT(int n) {        System.out.println("构造a: " + a);        System.out.println("构造n: " + n);    }    public static void main(String[] args) {        TT tsc = null;        System.out.println("!!!!!!!!!!!!!!!!!!!!!");        tsc = new TT();        System.out.println(TT.a);    }}


输出:

静态代码块在执行a=10
!!!!!!!!!!!!!!!!!!!!!
非静态代码块在执行a=8
构造a: 8
构造n: 10
无参构造方法在执行a=8
8

阅读全文
0 0
原创粉丝点击