Java中对象的初始化生成过程

70 篇文章 1 订阅
43 篇文章 0 订阅

Java是面向对象的一种语言,在Java对象生成的过程,涉及子类和父类的加载、静态成员变量的初始化、子类和父类对象的初始化等过程,其具体过程通过下述代码来说明。

 
  1. class A 
  2.     public A(String s) 
  3.     { 
  4.         System.out.println(s+" Constructor A"); 
  5.     } 
  6.  
  7. class B 
  8.     public B(String s) 
  9.     { 
  10.         System.out.println(s+ " Constructor B"); 
  11.     } 
  12.  
  13. class C 
  14.     public C(String s) 
  15.     { 
  16.         System.out.println(s+ " Constructor C"); 
  17.     } 
  18.  
  19. class Base 
  20.     static A a1 = new A("a1: static"); 
  21.     A a2 = new A("a2: normal"); 
  22.     public Base() 
  23.     { 
  24.         A a3 = new A("a3: normal"); 
  25.         System.out.println("Constructor Base"); 
  26.     } 
  27.  
  28. class Derived extends Base 
  29.     static B b1 = new B("b1: static"); 
  30.     B b2 = new B("b2: normal"); 
  31.     public Derived() 
  32.     { 
  33.         B b3 = new B("b3: normal"); 
  34.         System.out.println("Constructor Derived"); 
  35.     } 
  36.  
  37. public class Test { 
  38.     static C c1 = new C("c1: static"); 
  39.     C c2 = new C("c2: normal"); 
  40.     public static void main(String[] args) { 
  41.         C c3 = new C("c3: normal"); 
  42.         Derived derived = new Derived(); 
  43.         System.out.println("end"); 
  44.     } 

该段代码的执行结果为:

c1: static Constructor C
c3: normal Constructor C
a1: static Constructor A
b1: static Constructor B
a2: normal Constructor A
a3: normal Constructor A
Constructor Base
b2: normal Constructor B
b3: normal Constructor B
Constructor Derived
end

对上述执行结果进行分析,其生成过程为:

1)程序执行时,首先加载main函数所在的类Test,由于Test类包含静态成员变量c1,因此对该变量进行初始化,调用其构造函数。

2)由于c2是Test类的对象成员变量,且此处并没有初始化Test类对象,因此不需要初始化c2。

3)执行main函数。

4) main函数声明且初始化变量c3,因此调用其构造函数。

5)main函数声明且初始化变量derived,此过程可具体划分为以下步骤:

  a) 加载Derived类,由于其继承自Base类,因此还需加载Base类。

  b) 类加载完成后,由父类至子类,先后完成其中静态成员变量的初始化,因此先后调用a1,b1的构造函数。

  c) 静态成员变量初始化后,由父类至子类,先后完成类对象的初始化。在类对象的初始化过程中,首先初始化对象成员变量,再调用构造函数。因此,在Base类,首先调用a2的构造函数,再调用Base的构造函数,在构造函数中,调用a3的构造函数;而在Derived类,首先调用b2的构造函数,再调用Derived的构造函数,在构造函数中,调用b3的构造函数。

6) 综上,完成了整个对象的初始化生成过程和程序运行。

❤提问/互动请留言,可直接在最底右下方"写留言即可"

❤Java初高级一起学习分享,共同学习才是最明智的选择,喜欢的话可以我的学习群64弍46衣3凌9,或加资料群69似64陆0吧3(进群备注平台名)

❤如果觉得写得不错请点击“订阅”,每天更新全新的内容!

❤你们的喜欢和关注就是我最大的动力支撑!!!



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值