我正在尝试为在线Java课程创建一个程序。该程序包括Employee类和Name类。我必须创建多个Employee对象并提示用户输入员工的姓名。我将所有Employee对象存储在一个雇员数组中。
以下是代码:
//Creates employee array with the number of array elements being however many
//employees there are:
Employee employee[] = new Employee [ numEmp ];
for( int j = 0; j < numEmp; j++ )
{
System.out.println( "Please enter the first name of employee number "
+ ( j + 1 ) );
Scanner input2 = new Scanner( System.in );
String nameF = input2.nextLine();
//This should set the employee object at employee array element "j" to the
//String nameF
employee[ j ].setFirstName( nameF );
问题是编译器在运行程序时说最后一行是NullPointerException。 我不确定我做错了什么。有什么建议吗?
谢谢! -Sean
答案 0 :(得分:3)
您创建了一个大小为numEmp
的新数组,但每个元素的默认值为null
。这意味着该数组最初包含numEmp
个空引用。您需要使用new
来实例化每个Employee对象,然后才能调用它们的方法。
您可以在创建阵列后立即执行此操作:
Employee employee[] = new Employee [ numEmp ];
for( int j = 0; j < numEmp; j++ )
{
employee[j] = new Employee();
}
或者您可以在现有循环内部进行,就在您首次需要使用该对象之前:
employee[j] = new Employee();
employee[j].setFirstName(nameF);
答案 1 :(得分:3)
您没有创建任何Employee
个对象。创建数组不会创建任何Employee
个对象 - 数组不包含包含对象,它包含引用,最初所有这些引用都为null。你只需要:
employee[j] = new Employee();
employee[j].setFirstName(nameF);
值得清楚的是对象和引用之间的差异 - 它会影响语言的所有方面,从默认值到赋值运算符,到参数传递,再到垃圾收集。如果你来自C ++背景,我可能会特别困惑。
答案 2 :(得分:1)
employee[ j ] = new Employee();
employee[ j ].setFirstName( nameF );