调用默认的构造函数(在Java中)在一类只有一个定义的构造函数需要参数

问题描述:

请告诉我,如果我有下面的代码的正确理解:调用默认的构造函数(在Java中)在一类只有一个定义的构造函数需要参数

public class Test { 
    public static void main(String[] args) { 
    A a = new A(); 
    a.print(); 
    } 
} 

class A { 
    String s; 

    A(String s) { 
    this.s = s; 
    } 

    void print() { 
    System.out.println(s); 
    } 
} 

行“A A = new A();“调用类/构造函数以创建一个带有引用变量”a“的新对象。类A有一个定义的构造函数,它需要一个字符串参数,因此它没有默认的构造函数。这意味着没有任何字符串参数的实例化会导致编译器错误。

如果我要在实例中添加一个字符串参数,例如A =新A(“金鱼”);该程序将编译并运行。

我不确定我是否使用了正确的词汇表,因此请随时纠正任何不准确/令人困惑的内容。谢谢!

+0

默认构造函数仅在没有构造函数的类中创建。 –

你的理解是非常正确的。我将改变的一件事是“创建一个新对象”,以“参照s中的java.lang.String引用”创建A的新实例“。在这种情况下,构造函数将该参数分配给一个字段,但它可以完全使用它(例如,使用它来为某个字段计算不同的值)。

+0

创建一个类型为'a'的新对象与创建一个'a' AFAIK的新实例是一样的,尽管在Java中(它们几乎总是把类实例称为对象),我更喜欢前者。另一件事,你的意思是*'参考值a作为参数'* – Li357

+0

@AndrewL。修正后一种术语;它措辞不佳。 – hexafraction

+0

'a'不是一个参数,它是对内存中对象的引用。 – Li357

你写的东西大致正确。

更确切地说:“调用类/构造函数”并不完全正确。 A a = new A();打算来调用构造函数(调用一个类并不意味着什么)。

虽然构造函数是不是方法,你可以把它们有点像的方法:如果你的类定义了一个方法,像这样:

public void myMethod(String s) { ... } 

然后试图调用myMethod()不带任何参数会失败。这里也一样。