下面的代码在第 4 行显示错误
class MyClass{
public MyClass(int a){ } //Line 2
public static void main(String a[]){
MyClass n = new MyClass(); //Line 4
System.out.print("TRUE");
}
}
但是,一旦我删除第 2 行,它就会运行没有任何错误。虽然,我没有添加默认构造函数。为什么 ?
下面的代码在第 4 行显示错误
class MyClass{
public MyClass(int a){ } //Line 2
public static void main(String a[]){
MyClass n = new MyClass(); //Line 4
System.out.print("TRUE");
}
}
但是,一旦我删除第 2 行,它就会运行没有任何错误。虽然,我没有添加默认构造函数。为什么 ?
请记住,只有在您没有给出任何显式构造函数的情况下,才会Compiler
为您的类提供 a 。default constructor
一旦您声明了自己的构造函数,参数化或 0-arg,编译器就不会为您提供默认构造函数。
现在在您的代码中,您已经声明了一个参数化构造函数,编译器不会给出默认构造函数。因此,您实际上没有任何 0-arg 构造函数,因此您不能使用它。
一旦我删除第 2 行,它运行没有任何错误。虽然,我没有添加默认构造函数。为什么 ?
当然,如果您删除第 2 行,那么您还没有声明任何显式构造函数,在这种情况下,编译器会添加一个默认的 0-arg 构造函数,因此您的代码会成功。另请注意,默认构造函数是编译器提供的。当您声明0-arg 构造函数时,它不称为默认构造函数,而只是一个0-arg 构造函数。
因此,每当您声明参数化构造函数时,请确保您还0-arg constructor
显式声明了一个,如果您当然正在使用它。
public MyClass() {
}
每个类都有一个不带参数的隐式默认构造函数。但是,当您使用 args 声明构造函数时,会省略默认构造函数。因此
MyClass n = new MyClass();
将无法编译。
请注意,一个类可以有多个构造函数,如果您有其他构造函数,则可以显式声明默认的无参数构造函数。例如
class MyClass{
public MyClass(int a){ }
public MyClass(String a){ }
public MyClass(){ } // no-arg declaration now required
}
那是因为一旦你声明了一个带参数的构造函数,没有参数的默认构造函数就不再可用了。
在您的类中缺少默认构造函数,它仅包含参数化构造函数。但是您正在使用默认构造函数进行初始化。所以你会在第 4 行得到错误。在你的代码中添加默认构造函数作为打击
作为您使用默认构造函数创建对象,MyClass n = new MyClass();
您的代码应该具有默认构造函数。
public MyClass(){ }
现在它可以正常工作了。
如果您想使用参数化构造函数,请按如下方式创建对象。
MyClass n = new MyClass(pass parameter here);
如果您没有在类中定义构造函数,则只有编译器会自动插入默认构造函数(无参数)
阅读http://docs.oracle.com/javase/tutorial/java/javaOO/constructors.html的最后一段
当您创建参数化 cunstructor 时,默认构造函数将被删除,除非您创建自己的默认构造函数。
因此,您必须如下创建构造函数。
public MyClass(){}