使用数组时出现NullPointerException

我正在尝试为在线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

您创建了一个大小为numEmp的新数组,但每个元素的默认值为null 。 这意味着该数组最初包含numEmp null引用。 您需要使用new来实例化每个Employee对象,然后才能调用它们上的方法。

您可以在创建arrays后立即执行此操作:

 Employee employee[] = new Employee [ numEmp ]; for( int j = 0; j < numEmp; j++ ) { employee[j] = new Employee(); } 

或者你可以在你现有的循环中完成它,就在你第一次需要使用该对象之前:

 employee[j] = new Employee(); employee[j].setFirstName(nameF); 

您没有创建任何Employee对象。 创建数组不会创建任何Employee对象 – 数组不包含对象,它包含引用 ,并且最初所有这些引用都为null。 您只需要:

 employee[j] = new Employee(); employee[j].setFirstName(nameF); 

值得清楚的是对象和引用之间的差异 – 它会影响语言的所有方面,从默认值到赋值运算符,到参数传递,再到垃圾收集。 如果你来自C ++背景,我可能会特别困惑。

  employee[ j ] = new Employee(); employee[ j ].setFirstName( nameF );