以下代码不起作用,因为编译器说函数AnotherNewClass()不存在?这是为什么?不是构造函数只是一个函数吗?为什么在没有引用特定对象的情况下无法构造函数?
class AnotherNewClass
{
public AnotherNewClass(){
System.out.println("Hello World!!");
}
public AnotherNewClass(String arg){
System.out.println("Hello World!!");
}
public static void main(String []args){
AnotherNewClass("Hello World!!");//This is the offending code; where the compiler throws an error
}
}
PS。从下面的一些评论中我想澄清一点,我明白我没有使用new关键字,这个问题的目的是突出函数和构造函数之间的区别(不能称为WITHOUT' new&# 39)
答案 0 :(得分:3)
可以,但您需要new
关键字。
new AnotherNewClass("Hello World!!");
请注意,这不仅仅是调用构造函数。这正是您需要new
关键字的原因。 new
关键字将在您的类的对象可以容纳的堆上分配内存。但是该内存还没有包含这样的对象。然后构造函数初始化那段内存。这就是为什么你不想将构造函数用作常规函数。
答案 1 :(得分:2)
拥有构造函数的目的是用Java初始化对象
不能直接调用构造函数;当new
关键字创建对象时,它们会被隐式调用。可以直接在已使用new创建的对象上调用方法。
所以根据我的问题,你的问题的答案是,他们不能因为他们不应该是,这就是它的设计方式。您可以进一步了解当我们深入了解new Class()
时会发生什么,您将了解实际原因。
答案 2 :(得分:0)
1 - 构造函数用于实例化类,在这里你做错了。它应该是
new AnotherNewClass("Hello World!!");
请查看此question以获得更好的解释。
2 - 在Java中,我们说方法而不是函数。
答案 3 :(得分:0)
答案 4 :(得分:0)
我假设你从语言的角度提问。换句话说,为什么 Java不允许它而不是如何这样做。
我认为这是因为函数(方法)通常需要一个对象的实例。构造函数是一种特殊情况,因为它会创建此实例,这需要new
关键字。不应该在任何其他时间调用构造函数,因为我希望这是显而易见的原因!
在上面的main
方法中,您没有调用构造函数的AnotherNewClass
实例,这是编译器告诉您的。
答案 5 :(得分:0)
所以这是我从下面的评论和答案中理解的:
构造函数本质上与Java中的其他函数不同,实际上它只是一种形式的函数而且从不在处理中。
构造函数只能处理由“new”运算符或任何本地内存分配给它的内存。而函数可以处理调用对象可以引用它的内存。
'new'运算符分配这段内存,从而基本上“创建”一个对象,构造函数'填充'那段内存。这段内存(由'new'运算符赋予它)是函数和构造函数在处理方面的主要差异。
答案 6 :(得分:0)
首先,您只能从main
方法调用静态方法。正如其他人所说,必须使用new
运算符调用构造函数。
AnotherNewClass an = new AnotherNewClass("Hello World!!");
有了实例后,您可以调用其他方法,如下所示。
an.someMethod();