2014-07-08 39 views
1

我正在尝试创建一个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 

回答

10

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

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

也没有明确的构造函数,所以Java编译器创建一个默认的,无参数的构造函数。这解释了错误消息的部分内容:

required: no arguments 

删除void将其变成构造函数。

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

非常感谢你为我解决了这个问题! – ArcherGilly

1

删除无效。

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将使用默认的零参数构造函数。这就是你得到错误的原因。

相关问题