写点什么

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

作者:编程江湖
  • 2021 年 11 月 26 日
  • 本文字数:1288 字

    阅读完需:约 4 分钟

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

class A 

    public A(String s) 

    { 

        System.out.println(s+" Constructor A"); 

    } 


class B 

    public B(String s) 

    { 

        System.out.println(s+ " Constructor B"); 

    } 


class C 

    public C(String s) 

    { 

        System.out.println(s+ " Constructor C"); 

    } 


class Base 

    static A a1 = new A("a1: static"); 

    A a2 = new A("a2: normal"); 

    public Base() 

    { 

        A a3 = new A("a3: normal"); 

        System.out.println("Constructor Base"); 

    } 


class Derived extends Base 

    static B b1 = new B("b1: static"); 

    B b2 = new B("b2: normal"); 

    public Derived() 

    { 

        B b3 = new B("b3: normal"); 

        System.out.println("Constructor Derived"); 

    } 


public class Test { 

    static C c1 = new C("c1: static"); 

    C c2 = new C("c2: normal"); 

    public static void main(String[] args) { 

        C c3 = new C("c3: normal"); 

        Derived derived = new Derived(); 

        System.out.println("end"); 

    } 

该段代码的执行结果为:

c1: static Constructor Cc3: normal Constructor Ca1: static Constructor Ab1: static Constructor Ba2: normal Constructor Aa3: normal Constructor AConstructor Baseb2: normal Constructor Bb3: normal Constructor BConstructor Derivedend

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

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 的构造函数。java培训

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

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

用户头像

编程江湖

关注

IT技术分享 2021.11.23 加入

还未添加个人简介

评论

发布
暂无评论
Java中对象的初始化生成过程