繁体   English   中英

Java,我需要帮助实例化一个对象

[英]Java, I need help instantiating an object

您好,我是Java新手。 我正在尝试创建一个对象并通过它传递名称。 我不知道我在做什么错?

public class Employee
{
      private String name, number;
      private String date;


      public Employee()
      {
          name= "";
          number = "";
          date = "";
      }

      public Employee(String name, String number, String date)
      {
            setName(name);
            setNumber(number);
            setDate(date);
      }

      public void setName(String n)
      {
            name = n;
      }
      public void setNumber(String n)
      {
            number = n;
            // you can check the format here for correctness
      }
      public void setDate(String d)
      {
            date = d;
      }

      public String getName()
      {
            return name;
      }
      public String getNumber()
      {
            return number;
      }
      public String getDate()
      {
            return date;
      }
}





import java.util.Scanner;

public class TeamLeadDemo

{

    public static void main(String[] args)

    {



        String name;

        // create scanner object

        Scanner keyboard = new Scanner(System.in);

        // inputting data

        System.out.println("Enter Name:");

        name = keyboard.nextLine();



        // instantiating object, HERE IS THE PROBLEM

        Employee thename = new Employee(name);

        // outputting data

         System.out.println("Employee Name:"+thename.getName());

        System.out.println("Employee Details:\n" + thename);

    }

}// Function definition

我该怎么办??

嘿,新手程序员!

看一下如何初始化对象:

Employee thename = new Employee(name);

由于仅给它提供String名称作为参数,因此Java无法初始化Employee对象,因为它没有单个参数构造函数!

这是构造函数的方法签名:

public Employee()
public Employee(String name, String number, String date)

一个不带参数,另一个带3个参数。

如果您看一下它的初始化方式,则仅传递1个参数!

您需要创建一个具有单个参数的新构造函数,以便您的代码起作用。 或更简单的是,您只需输入数字和日期字符串值的“”,“”即可。

如果他们是错误的,更多有经验的程序员请不要犹豫纠正我的编程语义。 我觉得我使用的是我不完全理解的单词。

您的Employee类有两个构造函数:一个带有零个参数的构造函数,另一个带有三个参数的构造函数。 但是,您试图用一个参数来构造它。 那不会编译。

有两种可能的解决方案:

  1. 添加另一个带有一个参数的构造函数。

     public Employee(String name) { this.name = name; } 
  2. 使用带有三个参数的构造函数,并传递null

     Employee employee = new Employee(name, null, null); 

具体问题无关 ,在默认构造函数中将值设置为空字符串,并在第二个构造函数中调用setter并不是一个好习惯。 首先,什么也不做,将其默认设置为null 在第二个构造函数中,您应该更喜欢直接设置属性,而不是调用setter。

您需要一个仅接收您传递的名称的构造函数:

  public Employee(String name) {
        this.name = name;
        this.number = "";
        this.date = "";
  }

当前,您只有一个默认构造函数,而一个可以接收所有三个属性。

您还需要将numberdate传递给构造函数。 尝试:

Employee thename = new Employee(name, "", "");

Employee thename = new Employee(name);

您没有只需要一个String的构造函数

如果您有非常非常强烈的理由不使用Employee thename = new Employee(name, "", "");可以使用Employee thename = new Employee(name, "", ""); ,您可以尝试“ varargs”

如:公共类Employee {字符串fname =“”; 字符串lname =“”;

public Emp(String... attrs) {
    if ( attrs.length > 1 ) {
        fname = attrs[0];
        lname = attrs[1];
    }else if(attrs.length == 1) {
        fname = attrs[0];
    }
}
public String toString() {
    return fname + " " + lname;
}
public static void main(String[] args){
    Employee e1 = new Employee ("Test");
    Employee e2 = new Employee ("Test" ,"case");

    System.out.println(e1);
    System.out.println(e2);
}

}

注意 :这仅是为了回答您的问题-在实际情况下使用前请三思。 不是从设计/最佳方法的角度来看。 但这是不同的并且可以满足您的问题;-)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM