构造函数缺少错误,尽管实现了构造函数



我从以下代码中得到了这个构造函数未定义的错误:

package arrayClassObject;
public class Constructor {
public class Student{
String name;
public Student() {
}
public Student(String name) {
this.name = name;
}
void setName(String name) { // setter
this.name = name; 
}   
public String getName() { // getter
return name;
}
}   
public static void main(String[] args) {        
Student s = new Student();
s.setName("Jack");
System.out.println(s.getName());
}
}

谁能解释我为什么会出现这样的错误?我相信我已经在学生班上完成了结构定义

The constructor Constructor.Student() is undefined
at arrayClassObject.Constructor.main(Constructor.java:18)

当您有一个非静态内部类时,只有在存在封闭类的实例时才能创建实例。 因此,在不更改上述class structures的情况下,您需要执行以下操作:

Constructor c = new Constructor(); // instance of the enclosing class
Student s = c.new Student();       // special syntax 
s.setName("Jack");
System.out.println(s.getName());

您将Student定义为封闭类Constructor的嵌套内部类。 由于Student是非静态的,因此它只能与Constructor的关联实例一起存在。

有关嵌套类的更多信息,请参见嵌套类(>学习 Java 语言>类和对象的 Java™ 教程(。

有多种方法可以解决此问题。

  1. 使Student静态。这样,您就不需要Constructor实例即可创建Student

  2. Student保留非静态内部类。然后,首先需要构造一个Constructor实例,以便与Student相关联。(new Constructor().new Student()(

  3. Student移动到其自己的文件。可能没有必要将Student作为内部类。所以只要把它变成一个普通的课。

最新更新