什么对象调用构造函数?

时间:2015-05-08 09:31:24

标签: java

Point point = new Point (30, 20);

Point(int, int)这里是Point类的构造函数,默认情况下它不是私有的而不是静态的,所以Point对象需要调用它,但是上面它不是作为Point的方法调用的对象,而是new运算符。 new运算符除了分配内存之外还做了什么?它会自动创建一个空的Point对象,然后将该构造函数作为此Point对象的方法调用吗?因此,如果我将构造函数设为私有,这意味着new运算符除了在类中之外的任何地方都不会工作吗?

2 个答案:

答案 0 :(得分:2)

the JLS中定义了在调用构造函数时在运行时发生的事情。这是部分引用:

  

接下来,为新的类实例分配空间。如果没有足够的空间来分配对象,则通过抛出OutOfMemoryError突然完成对类实例创建表达式的评估。

     

新对象包含在指定类类型及其所有超类中声明的所有字段的新实例。在创建每个新字段实例时,它将初始化为其默认值(§4.12.5)。

     

接下来,从左到右评估构造函数的实际参数。如果任何参数评估突然完成,则不会计算其右侧的任何参数表达式,并且由于相同的原因,类实例创建表达式会突然完成。

     

接下来,调用指定类类型的选定构造函数。这导致为类类型的每个超类调用至少一个构造函数。此过程可以由显式构造函数调用语句(第8.8节)指导,并在第12.5节中详细说明。

     

类实例创建表达式的值是对指定类的新创建对象的引用。每次计算表达式时,都会创建一个新对象。

事实上,如果构造函数是私有的,它将无法在类本身之外使用。

答案 1 :(得分:0)

构造函数不是方法。

在调用构造函数之后进行内存分配。

我们使用new关键字(主要是)来创建类的对象。

当我们用new创建一个类的对象时,它会根据签名调用正确的构造函数。

回答你的问题:

  1. JVM称为构造函数。

  2. 如果您将构造函数设为私有,则无法在该类之外创建该类的对象,因此,new运算符将无法在该类之外工作。