为什么在对象创建时调用构造函数?

时间:2012-07-23 16:31:50

标签: java constructor

根据this,构造函数实际上是初始化程序。根据{{​​3}},在调用new关键字之后,在构造函数之前已经创建了answer对象。

所以我的问题是如果我不想初始化任何内容,那么在new关键字之后放置构造函数的需要是什么。

6 个答案:

答案 0 :(得分:5)

想想这样......

  1. JVM为对象分配内存,但尚未初始化或连接。
  2. JVM为内存中的对象分配公共内容,比如指向方法,静态变量等的指针。当对象存在时,它仍然没有通过执行构造函数进行唯一初始化。
  3. 调用构造函数,初始化对象。

答案 1 :(得分:4)

如果您不想初始化变量,可以直接声明:

MyObject myObject;

但是,如果您希望能够对myObject执行任何操作,则需要创建变量可以指向的对象,并使用new关键字完成。否则myObject只是指向一个大的东西。

答案 2 :(得分:1)

多年来,Java上游语言中的术语侵入了Java语言。

过去(C)分配是与初始化分开的一步。它们结合了C ++,现在被认为是同样的事情。从技术上讲,“建筑”中的操作顺序是

  1. 为对象分配的内存
  2. 按指定初始化该内存。
  3. 对于对象的父类,可以多次执行这些步骤。关键是分配始终在初始化之前,并且两者紧密耦合。分配必须在初始化之前,或者初始化没有要初始化的内存。构造函数保证两者都是为了避免程序通过访问已分配但未初始化的项来访问随机数据的其他语言中的早期问题。创建构造函数是为了防止此类错误。

    现在,您分配的内容是一个变量,变量包含对值的引用(在Java中,对象)。因此,您可以将变量简单地视为可以取消引用值的名称。如果你想要一个新名字,但希望没有任何参考,那么Keppil的回答是最好的。

    MyType myName;

    将创建一个名称,引用无值(null)。

    但是,在Java中,必须初始化对象值。没有“没有初始化分配”,因为这相当于具有随机内部状态的对象。随机内部状态意味着使用该对象将具有(最多)随机结果,并且(最坏的情况下)对不存在的对象的引用。随着分配和初始化建设的紧密耦合,类型系统工作;没有它,理论上你可以引用一个不存在的对象,在Java中重新创建C的分段错误。

答案 3 :(得分:0)

您希望初始化对象本身,包括为对象分配内存。还需要完成其他内务处理内部工作。

答案 4 :(得分:0)

引用您发布的链接:

  

构造函数的工作是确保新对象处于有效状态......

你真的想创建一个对象而不是它处于有效状态吗?

如果您只想要一个对象引用,只需声明一个而不要调用new。

MyClass mc;

答案 5 :(得分:0)

你是对的,Java语法可能是

String str = new

而不是

String str = new String()

给你一个空字符串。问题是有时我们想将参数传递给像这样的构造函数:

String str = new String("text")

这就是我们调用构造函数的原因。要保持语法一致,还必须调用默认构造函数String()。在这种情况下,String是一个不可变类,因此没有其他方法可以设置它的初始值。