[英]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
类有两个构造函数:一个带有零个参数的构造函数,另一个带有三个参数的构造函数。 但是,您试图用一个参数来构造它。 那不会编译。
有两种可能的解决方案:
添加另一个带有一个参数的构造函数。
public Employee(String name) { this.name = name; }
使用带有三个参数的构造函数,并传递null
。
Employee employee = new Employee(name, null, null);
与具体问题无关 ,在默认构造函数中将值设置为空字符串,并在第二个构造函数中调用setter并不是一个好习惯。 首先,什么也不做,将其默认设置为null
。 在第二个构造函数中,您应该更喜欢直接设置属性,而不是调用setter。
您需要一个仅接收您传递的名称的构造函数:
public Employee(String name) {
this.name = name;
this.number = "";
this.date = "";
}
当前,您只有一个默认构造函数,而一个可以接收所有三个属性。
您还需要将number
和date
传递给构造函数。 尝试:
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.