为什么不能像函数一样调用构造函数?

时间:2014-04-05 23:07:41

标签: java function constructor

以下代码不起作用,因为编译器说函数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)

7 个答案:

答案 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)

关于原因的答案要么变得相当哲学,要么只是引用Java Language Specification。无论如何,

new AnotherNewClass("Hello World!!")

应该有用。

答案 4 :(得分:0)

我假设你从语言的角度提问。换句话说,为什么 Java不允许它而不是如何这样做。

我认为这是因为函数(方法)通常需要一个对象的实例。构造函数是一种特殊情况,因为它会创建此实例,这需要new关键字。不应该在任何其他时间调用构造函数,因为我希望这是显而易见的原因!

在上面的main方法中,您没有调用构造函数的AnotherNewClass实例,这是编译器告诉您的。

答案 5 :(得分:0)

所以这是我从下面的评论和答案中理解的:

构造函数本质上与Java中的其他函数不同,实际上它只是一种形式的函数而且从不在处理中。

构造函数只能处理由“new”运算符或任何本地内存分配给它的内存。而函数可以处理调用对象可以引用它的内存。

'new'运算符分配这段内存,从而基本上“创建”一个对象,构造函数'填充'那段内存。这段内存(由'new'运算符赋予它)是函数和构造函数在处理方面的主要差异。

答案 6 :(得分:0)

首先,您只能从main方法调用静态方法。正如其他人所说,必须使用new运算符调用构造函数。

AnotherNewClass an = new AnotherNewClass("Hello World!!");

有了实例后,您可以调用其他方法,如下所示。

an.someMethod();