加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java类初始化顺序

发布时间:2020-12-14 06:32:38 所属栏目:Java 来源:网络整理
导读:先不考虑父类。 当创建类对象时,先初始化静态变量和静态块,然后是非静态变量和非静态代码块,然后是构造器。由于静态成员只会被初始化一次,所以如果静态成员已经被初始化过,将不会被再次初始化。 例如 A( System.out.println("A(" + maker + ")" A a1 =

先不考虑父类。

当创建类对象时,先初始化静态变量和静态块,然后是非静态变量和非静态代码块,然后是构造器。由于静态成员只会被初始化一次,所以如果静态成员已经被初始化过,将不会被再次初始化。

例如

A( System.out.println("A(" + maker + ")" A a1 = A(1 A a2 = A(2 System.out.println("非静态的代码块" A a3 = A(3 System.out.println("静态块" A a4 = A(4 f() {System.out.println("f()" System.out.println("Test()" A a5 = A(5 }

输出为:

A(14523A(2<span style="color: #000000;">)
非静态的代码块
A(
3<span style="color: #000000;">)
Test()

对于静态成员,不仅是初始化对象时才会初始化,当第一次引用静态变量或者静态函数时都会使静态成员初始化。

还是上面的代码,小改一下:

A( System.out.println("A(" + maker + ")" A a1 = A(1 A a2 = A(2 System.out.println("非静态的代码块" A a3 = A(3 System.out.println("静态块" A a4 = A(4 f() {System.out.println("f()" System.out.println("Test()" A a5 = A(5 }

这次将输出:

A(145A(2<span style="color: #000000;">)
非静态的代码块
A(
3<span style="color: #000000;">)
Test()

然后考虑下父类。

当子类的静态域被初始化时候,那一定要先初始化父类的静态域。

当创建子类对象时,要先初始化静态域(如果之前未初始化),先是父类然后子类。之后初始化父类的非静态域和父类构造器,然后是子类。

例(新手起名废求破):

XD( System.out.println("XD(" + maker +")" System.out.println("Father()" XD xd = XD(1 XD xd1 = XD(2 Son System.out.println("Son()" XD xd = XD(3 XD xd1 = XD(4 f() { System.out.println("f()" }

输出

XD(1324XD(2<span style="color: #000000;">)
Father()
XD(
4<span style="color: #000000;">)
Son()

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读