JAVA--浅谈实例化对象时的初始化顺序

xiaoxiao2021-02-28  94

一、子类与父类之间,调用构造方法的顺序:

先看代码:

public class Son extends Parent { Son() { System.out.println("Son类的构造方法"); } public static void main(String[] args) { new Son(); } } ---------- class Parent { Parent() { System.out.println("Parent类的构造方法!"); } }

结果:

Parent类的构造方法! Son类的构造方法

当子类继承父类,在实例化子类的对象时,首先会调用父类的构造方法,调用完父类的构造方法之后, 才会调用子类的构造方法!


二、 父类与之类都有成员变量的时候:

先看代码:

public class Son extends Parent { S s=new S(); Son() { System.out.println("Son类的构造方法--4"); } public static void main(String[] args) { new Son(); } } ---------- class Parent { P p=new P(); Parent() { System.out.println("Parent类的构造方法!--2"); } } ---------- class P{ P(){ System.out.println("这个类的的对象作为Parent的成员变量--1"); } } ---------- class S{ S(){ System.out.println("这个类的的对象作为Son类的成员变量--3"); } }

运行结果:

这个类的的对象作为Parent的成员变量--1 Parent类的构造方法!--2 这个类的的对象作为Son类的成员变量--3 Son类的构造方法--4

通过结果,可以直观的看到:当父类和子类同时有成员变量和构造方法的时候,在main方法中执行new Son(); 的时候,同样的首先还是会去找父类的构造函数,当父类中有成员变量的时候,会优先初始化父类的成员变量, 然后调用父类的构造函数。执行完了之后,回到子类。如果子类中也有成员变量,那么会先初始化子类的成员变量,然后调用子类的构造方法。所有我们就看到上面的结果。


三、 当我们引入静态成员变量和静态块的时候:

还是先看代码:

public class Son extends Parent { S s=new S(); static SStatic sstatic=new SStatic();//子类中的静态成员变量 static{ System.out.println("子类Son中的静态块!"); } Son() { System.out.println("Son类的构造方法--4"); } public static void main(String[] args) { new Son(); } } ---------- class Parent { P p=new P(); static PStatic pstatic=new PStatic(); static{ System.out.println("父类Parent中的静态块"); } Parent() { System.out.println("Parent类的构造方法!--2"); } } ---------- class P{ P(){ System.out.println("P类的的对象作为Parent的成员变量--1"); } } ---------- class S{ S(){ System.out.println("S类的的对象作为Son类的成员变量--3"); } } ---------- class PStatic{ PStatic(){ System.out.println("父类Parent中的静态成员变量"); } } ---------- class SStatic{ SStatic(){ System.out.println("子类Son中的静态成员变量"); } }

结果:


父类Parent中的静态成员变量 父类Parent中的静态块 子类Son中的静态成员变量 子类Son中的静态块! P类的的对象作为Parent的成员变量--1 Parent类的构造方法!--2 S类的的对象作为Son类的成员变量--3 Son类的构造方法--4

通过上面的案例就知道:静态块在类加载的时候,首先会对静态块和静态成员变量进行一个初始化,然后通过main 方法执行new Son(); 的时候还是会首先找父类中的构造函数,当父类中有成员变量的时候,按照写在父类中的的成员变量的顺序,对他们进行初始化。结束后调用父类的构造方法。 然后在回到子类的构造方法,子类中有成员变量的时候,按照顺序对子类中的成员变量进行初始化。然后在调用子类的构造方法。

转载请注明原文地址: https://www.6miu.com/read-27146.html

最新回复(0)