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

时间:2014-07-08 22:10:47

标签: java constructor

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

3 个答案:

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