我的代码在创建构造函数方面有什么问题?

我正在尝试创建一个Person类,其构造函数使用给定的参数启动实例变量,但是当通过主类创建新的person对象时,代码无法编译,因为Person构造函数不需要参数,但是我在构造函数中指定了四个。 我正在使用NetBeans 7.2.1 ..这是我的代码:

public class Person { private String fName; private String mName; private String lName; private String dob; public void Person(String first, String middle, String last, String dateOfBirth){ fName = first; mName = middle; lName = last; dob = dateOfBirth; } public String getFirstName(){ return fName; } public String getMiddleName(){ return mName; } public String getLastName(){ return lName; } public String getDOB(){ return dob; } public void getFullName(){ System.out.println(fName + " " + mName + " " + lName); } public void setFirstName(String name){ fName = name; } public void setMiddleName(String name){ mName = name; } public void setLastName(String name){ lName = name; } public void setDOB(String date){ dob = date; } public static void main(String[] args) { Person p1 = new Person("John","Thomas","Smith", "10 Jul 14"); p1.getFullName(); } } 

这是我运行程序时收到的错误:

 Exception in thread "main" java.lang.RuntimeException: Uncompilable source code - constructor Person in class Person cannot be applied to given types; required: no arguments found: java.lang.String,java.lang.String,java.lang.String,java.lang.String reason: actual and formal argument lists differ in length at Person.main(Person.java:54) Java Result: 1 

这不是构造函数; 因为void ,这是一种方法。

 public void Person(String first, String middle, String last, String dateOfBirth){ 

没有显式构造函数,因此Java编译器创建了一个默认的no-arg构造函数。 这解释了错误消息中指出的部分:

 required: no arguments 

删除void以将其转换为构造函数。

 public Person(String first, String middle, String last, String dateOfBirth){ 

从构造函数中删除void。

将您的代码更改为:

 public class Person { private String fName; private String mName; private String lName; private String dob; public Person(String first, String middle, String last, String dateOfBirth){ fName = first; mName = middle; lName = last; dob = dateOfBirth; } public String getFirstName(){ return fName; } public String getMiddleName(){ return mName; } public String getLastName(){ return lName; } public String getDOB(){ return dob; } public void getFullName(){ System.out.println(fName + " " + mName + " " + lName); } public void setFirstName(String name){ fName = name; } public void setMiddleName(String name){ mName = name; } public void setLastName(String name){ lName = name; } public void setDOB(String date){ dob = date; } public static void main(String[] args) { Person p1 = new Person("John","Thomas","Smith", "10 Jul 14"); p1.getFullName(); } } 

说明:

构造函数没有返回类型。 构造函数的“返回类型”是类的新实例,不必定义。

在构造函数上定义返回类型时,将其设置为方法。 如果没有其他构造函数,Java将使用默认的零参数构造函数。 这就是你得到错误的原因。