我正在尝试使用构造函数,mutators和accessors构建一个类。通过书籍和在线阅读,我了解到你可以调用带或不带参数的构造函数。但是,我的情况似乎不起作用。我甚至无法编译而没有错误。当我使用学生jane =新学生("")时,它会起作用。我做错了什么?
Devolution.java:6: cannot find symbol
symbol : constructor student()
location: class Governor
student jane = new student();
^
public class designers {
public static void main(String[] args) {
student jane = new student();
student smith = new student("jane", "36365355", "Nairobi", "Male");
System.out.println("Janes's Properties: "+jane.name() + " " + jane.nationalID() + " " + jane.county()+" "+jane.gender());
System.out.println("Smith's Properties: "+smith.name() + " " + smith.nationalID() + " " + smith.county()+" "+smith.gender());
}
}
其他代码在
之下public class student {
//Private fields
private String name;
private String nationalID;
private String county;
private String gender;
//Constructor method
public student(String name, String nationalID, String county, String gender)
{
this.name = name;
this.nationalID = nationalID;
this.county = county;
this.gender = gender;
}
//Accessor for name
public String name()
{
return name;
}
//Accessor for nationalID
public String nationalID()
{
return nationalID;
}
//Accessor for county
public String county()
{
return county;
}
//Accessor for gender
public String gender()
{
return gender;
}
}
答案 0 :(得分:5)
构造函数是一种创建类实例的方法:
Student s = new Student(...);
将创建Student
类的新实例,并允许您使用s
访问它。
通常,在创建类的实例时,需要指定在构建实例时使用的某些信息。对于学生,可能是姓名,年龄等。你有一个看起来像这样的构造函数:
public Student(String name, int age) {
//...
}
但在某些情况下,您可以构建一个类的实例,而无需(至少最初)指定任何内容。例如,你可能会有像这样的构造函数
public Student() {
//...
}
将名称和年龄字段留空或清零,直到您稍后使用该类的其他方法设置它们。
您正在做的事情的关键点是您已经制作了一个需要各种参数的构造函数,但您还没有像第二个示例那样指定一个不需要任何参数的构造函数。 。事实上,你可以写
Student s = new Student("Bob", "ABC12345", "Surrey", "Male");
因为你有一个构造函数需要四个String
作为参数。但你不能写
Student s = new Student();
因为你没有创建一个不带参数的构造函数。
如果你没有在你的类中指定任何构造函数,那么Java会自动创建一个不带参数的构造函数。并没有做任何特别的事情。因此,如果您不编写任何构造函数,那么您将免费获得一个构造函数:
public Student() {
}
但如果你不写任何自己的那只 。由于您已经指定了 的参数,因此Java不会免费为您提供无争议的参数。如果你想能够创建没有任何参数的实例,你必须把它放在自己身上。
答案 1 :(得分:3)
你只写了一个构造函数 - 一个有四个参数的构造函数。你没有没有参数的构造函数,所以你不能写new student()
。
请注意,如果您根本不编写任何构造函数,编译器将自动为您创建一个没有参数的构造函数,但只要您编写一个构造函数,就不会发生这种情况。
顺便说一句,大多数人都使用大写字母表示类名(所以Student
,而不是student
)。这使得很容易将它们与其他标识符的名称区分开来。养成做同样的习惯对你有好处。
答案 2 :(得分:3)
student
类中没有参数的构造函数。只有在您没有定义任何其他构造函数时,编译器才会生成这样的构造函数。
只需添加构造函数:
public student()
{
this.name = null;
this.nationalID = null;
this.county = null;
this.gender = null;
}
答案 3 :(得分:1)
你需要制作另一个构造函数:
public Student(){
//do things here
}
<强>解释强>
如果在类中没有定义构造函数,那么就有一个默认构造函数(没有 任何参数)已经。在这种情况下,您不需要定义它。但是如果你有任何带有一些参数的构造函数,那么你也需要定义没有参数的构造函数。
答案 4 :(得分:1)
它被称为重载构造函数。在您的类中,再次声明构造函数而不需要参数。有关详细信息,请参阅此post
答案 5 :(得分:0)
您没有没有参数的构造函数。只有在你没有写自己的情况时才会这样。当您希望有或没有参数创建类的对象时,您的代码中需要两个不同的构造函数。