gpt4 book ai didi

java - 调用构造函数是否意味着创建对象?

转载 作者:太空狗 更新时间:2023-10-29 22:52:06 26 4
gpt4 key购买 nike

当我们创建一个扩展抽象类的子类对象时,抽象类构造函数也会运行。但是我们知道我们不能创建抽象类的对象。那么是不是说即使一个构造函数无一异常(exception)地运行完毕,也不能保证对象是否被创建?

最佳答案

Hence does it mean that even if a constructor completes running without any exception, there is no guarantee whether an object is created?

简单地说,构造函数 不创建对象。它只是初始化对象的状态。它是创建对象的 new 运算符。现在,让我们详细了解一下。

当您使用如下语句创建对象时:

new MyClass();

对象首先由new 运算符创建。就在对新创建的对象的引用作为结果返回之前,指示的构造函数被处理以初始化新对象。


现在考虑 Abstract class 的情况,它是具体的 SubClass,当您这样做时:

AbstractClass obj = new ConcreteClass();

new 运算符创建一个 ConcreteClass 对象,并调用其构造函数来初始化创建对象的状态。在这个过程中,抽象类的构造函数也从ConcreteClass构造函数中调用,对抽象类中对象的状态进行初始化。

所以,基本上 AbstractClass 的对象没有被创建。只是调用它的构造函数来初始化对象的状态。

经验教训:

  • 对象是由new 运算符创建的,而不是通过调用构造函数本身创建的。 因此,该对象已在调用任何构造函数之前创建

  • 构造函数只是用来初始化所创建对象的状态。它本身不创建对象。

  • 对象状态也可以包含在抽象父类(super class)中。

  • 所以,调用抽象类构造函数的目的,只是为了完全初始化对象,过程中并没有创建对象。

参见:

关于java - 调用构造函数是否意味着创建对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14453270/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com