Java类加载过程后,成员变量的初始化

本文详细解析了Java中对象创建过程,包括类加载、成员变量初始化及构造方法调用的顺序。通过具体代码示例,阐述了父类与子类在初始化时的执行流程,揭示了类加载机制下成员变量初始化的细节。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Java类的加载和成员变量初始化,创建对象的顺序。



  1. class X {
  2. Y b=new Y();
  3. X() {
  4. System.out.println("X");
  5. }
  6. }
  7. class Y {
  8. Y() {
  9. System.out.println("Y");
  10. }
  11. }
  12. public class Z extends X {
  13. Y y=new Y();
  14. Z() {
  15. super();
  16. System.out.println("Z");
  17. }
  18. public static void main(String[] args) {
  19. new Z();
  20. }
  21. }
  22. //YXYTest
以上代码输出结果为YXYZ


看以看出,public类加载后并没有初始化成员变量y。在main方法使用new Z()创建对象时,先去构建class X父类对象,此时父类X的成员变量初始化输出Y,然后构造方法输出X,以后再进行class Z中y成员变量初始化输出Y,紧接着Z()中的输出语句输出Z。

网上找来的,可能是最好的解释了。

-------------------------------------------------------------------------------------------------------

在类被继承的情况下,初始化的顺序:

1.初始化子类,类加载器在加载它的时候会发现它继承了另外一个类,类加载器要先把父类加载进来。于是开始加载父类,父类的静态部分被按顺序加载。之后子类的静态部分被加载。这样的顺序是考虑子类的静态域可能会依赖父类的静态域;

2.父类的非静态部分被加载;

3.子类指定的父类的构造器;

4.子类的非静态部分被加载;

5.子类构造器的其余部分。

------------------------------------------------------------------------------------------------





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值