使用数组时出现NullPointerException

时间:2011-10-09 07:10:13

标签: java arrays string object 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

3 个答案:

答案 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 );