Java 无参数调用构造函数

Java 无参数调用构造函数,java,Java,我正在尝试构建一个具有构造函数、变异器和访问器的类。通过阅读书籍和在线文章,我了解到可以使用或不使用参数调用构造函数。然而,我下面的案例似乎不起作用。我甚至不能编译没有错误。当我使用student jane=new student(“”)时,它会起作用。我做错了什么 Devolution.java:6: cannot find symbol symbol : constructor student() location: class Governor student jane

我正在尝试构建一个具有构造函数、变异器和访问器的类。通过阅读书籍和在线文章,我了解到可以使用或不使用参数调用构造函数。然而,我下面的案例似乎不起作用。我甚至不能编译没有错误。当我使用student jane=new student(“”)时,它会起作用。我做错了什么

Devolution.java:6: cannot find symbol
symbol  : constructor student()
location: class Governor
        student jane = new student();
                         ^
其他代码如下

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;
   }

 }

您需要创建另一个构造函数,如下所示:

public Student(){
//do things here
}
说明:

当类中没有定义构造函数时,就有一个默认构造函数(没有
任何参数)已存在。在这种情况下,您不需要定义它。但是,如果您有任何带有某些参数的构造函数,那么您也需要定义不带参数的构造函数。

您需要创建另一个构造函数,如下所示:

public Student(){
//do things here
}
说明:

当类中没有定义构造函数时,就有一个默认构造函数(没有
任何参数)已存在。在这种情况下,您不需要定义它。但是,如果您有任何具有某些参数的构造函数,那么您也需要定义不带参数的构造函数。

您只编写了一个构造函数,即具有四个参数的构造函数。您没有没有没有参数的构造函数,因此无法编写
newstudent()

请注意,如果您根本不编写任何构造函数,编译器将自动为您生成一个无参数的构造函数,但只要您编写一个构造函数,就不会发生这种情况


顺便说一句,大多数人使用大写字母作为班级名称(所以
Student
,而不是
Student
)。这样就可以很容易地将它们与其他标识符的名称区分开来。养成这样做的习惯对你有好处。

你只写了一个构造函数——一个有四个参数的构造函数。您没有没有没有参数的构造函数,因此无法编写
newstudent()

请注意,如果您根本不编写任何构造函数,编译器将自动为您生成一个无参数的构造函数,但只要您编写一个构造函数,就不会发生这种情况


顺便说一句,大多数人使用大写字母作为班级名称(所以
Student
,而不是
Student
)。这样就可以很容易地将它们与其他标识符的名称区分开来。养成这样做的习惯对你有好处。

学生
课程中没有没有没有参数的构造函数。只有在您没有定义任何其他构造函数(您已经定义了其他构造函数)的情况下,编译器才会生成这样的构造函数

只需添加构造函数:

   public student()
   {
       this.name = null;
       this.nationalID = null;
       this.county = null;
       this.gender = null;
   }

student
类中没有没有没有参数的构造函数。只有在您没有定义任何其他构造函数(您已经定义了其他构造函数)的情况下,编译器才会生成这样的构造函数

只需添加构造函数:

   public student()
   {
       this.name = null;
       this.nationalID = null;
       this.county = null;
       this.gender = null;
   }

它被称为重载构造函数。在类中,再次声明一个不带参数要求的构造函数。请参阅此以了解更多信息,它被称为重载构造函数。在类中,再次声明一个不带参数要求的构造函数。有关更多信息,请参见此

构造函数是创建类实例的一种方法:

Student s = new Student(...);
将创建
学生
类的新实例,并使您能够使用
s
访问它

通常,在创建类的实例时,需要指定用于构建实例的某些信息。对于学生来说,可能是姓名、年龄等。您将有一个如下所示的构造函数:

public Student(String name, int age) {
    //...
}
public Student() {
}
但在某些上下文中,您可以构建类的实例,而无需(至少在最初)指定任何内容。例如,您可能有这样一个构造函数

public Student() {
    //...
}
这会使name和age字段留空或置零,直到稍后使用该类的另一个方法设置它们

关键的一点是,您已经创建了一个需要各种参数的构造函数,但是您没有指定像第二个示例这样不需要任何参数的构造函数。就目前情况而言,你可以写作

Student s = new Student("Bob", "ABC12345", "Surrey", "Male");
因为您有一个构造函数,它接受四个
String
s作为参数。但你不会写字

Student s = new Student();
因为您没有创建不带参数的构造函数

这其中的一个小问题是,如果您不在类中指定任何构造函数,那么Java将自动为您创建一个不带参数且不做任何特殊操作的构造函数。因此,如果您不编写任何构造函数,您将免费获得一个如下所示的构造函数:

public Student(String name, int age) {
    //...
}
public Student() {
}

但只有当你自己不写的时候。因为您已经指定了一个接受参数的函数,所以Java不会免费为您提供无参数函数。如果您希望能够创建没有任何参数的实例,则必须将其放在自己身上。

构造函数是创建类实例的一种方法:

Student s = new Student(...);
将创建
学生
类的新实例,并使您能够使用
s
访问它

通常,在创建类的实例时,需要指定用于构建实例的某些信息。对于学生来说,可能是姓名、年龄等。您将有一个如下所示的构造函数:

public Student(String name, int age) {
    //...
}
public Student() {
}
但在某些上下文中,您可以构建类的实例,而无需(至少在最初)指定任何内容。例如,您可能有这样一个构造函数

public Student() {
    //...
}
这会使name和age字段留空或置零,直到稍后使用该类的另一个方法设置它们

关键的一点是,您已经创建了一个需要各种参数的构造函数,但是您没有指定像第二个示例这样不需要任何参数的构造函数。就目前情况而言,你可以写作

Student s = new Student("Bob", "ABC12345", "Surrey", "Male");
因为您有一个构造函数,它接受四个
String
s作为参数。但你不能