我正在尝试创建一个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
答案 0 :(得分:10)
这不是构造函数;因为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){
答案 1 :(得分:1)
从构造函数中删除void。
答案 2 :(得分:1)
将您的代码更改为:
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将使用默认的零参数构造函数。这就是你得到错误的原因。