Point point = new Point (30, 20);
Point(int, int)
这里是Point类的构造函数,默认情况下它不是私有的而不是静态的,所以Point对象需要调用它,但是上面它不是作为Point的方法调用的对象,而是new
运算符。 new
运算符除了分配内存之外还做了什么?它会自动创建一个空的Point对象,然后将该构造函数作为此Point对象的方法调用吗?因此,如果我将构造函数设为私有,这意味着new
运算符除了在类中之外的任何地方都不会工作吗?
答案 0 :(得分:2)
在the JLS中定义了在调用构造函数时在运行时发生的事情。这是部分引用:
接下来,为新的类实例分配空间。如果没有足够的空间来分配对象,则通过抛出OutOfMemoryError突然完成对类实例创建表达式的评估。
新对象包含在指定类类型及其所有超类中声明的所有字段的新实例。在创建每个新字段实例时,它将初始化为其默认值(§4.12.5)。
接下来,从左到右评估构造函数的实际参数。如果任何参数评估突然完成,则不会计算其右侧的任何参数表达式,并且由于相同的原因,类实例创建表达式会突然完成。
接下来,调用指定类类型的选定构造函数。这导致为类类型的每个超类调用至少一个构造函数。此过程可以由显式构造函数调用语句(第8.8节)指导,并在第12.5节中详细说明。
类实例创建表达式的值是对指定类的新创建对象的引用。每次计算表达式时,都会创建一个新对象。
事实上,如果构造函数是私有的,它将无法在类本身之外使用。
答案 1 :(得分:0)
构造函数不是方法。
在调用构造函数之后进行内存分配。
我们使用new关键字(主要是)来创建类的对象。
当我们用new创建一个类的对象时,它会根据签名调用正确的构造函数。
回答你的问题:
JVM称为构造函数。
如果您将构造函数设为私有,则无法在该类之外创建该类的对象,因此,new运算符将无法在该类之外工作。