调用默认的构造函数(在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(“金鱼”);该程序将编译并运行。
我不确定我是否使用了正确的词汇表,因此请随时纠正任何不准确/令人困惑的内容。谢谢!
你的理解是非常正确的。我将改变的一件事是“创建一个新对象”,以“参照s
中的java.lang.String引用”创建A的新实例“。在这种情况下,构造函数将该参数分配给一个字段,但它可以完全使用它(例如,使用它来为某个字段计算不同的值)。
创建一个类型为'a'的新对象与创建一个'a' AFAIK的新实例是一样的,尽管在Java中(它们几乎总是把类实例称为对象),我更喜欢前者。另一件事,你的意思是*'参考值a作为参数'* – Li357
@AndrewL。修正后一种术语;它措辞不佳。 – hexafraction
'a'不是一个参数,它是对内存中对象的引用。 – Li357
你写的东西大致正确。
更确切地说:“调用类/构造函数”并不完全正确。 A a = new A();
打算来调用构造函数(调用一个类并不意味着什么)。
虽然构造函数是不是方法,你可以把它们有点像的方法:如果你的类定义了一个方法,像这样:
public void myMethod(String s) { ... }
然后试图调用myMethod()
不带任何参数会失败。这里也一样。
默认构造函数仅在没有构造函数的类中创建。 –