简单的OOP /私有变量查询 - Java

时间:2013-06-03 20:18:43

标签: java arrays variables object private

不太确定为什么这不起作用,当我尝试编译并运行它时会给我一个空指针异常。我知道这是非常简单的,可能是一个愚蠢的问题,但我似乎无法弄明白!

import javax.swing.JOptionPane;

public class Whatever
{

    private int age; 
    private String name;
    private float salary;

    public Whatever ()
    {
        String userName = JOptionPane.showInputDialog ("What is your name?");
        Whatever listData[] = new Whatever [10];
        listData[6].name = userName; 
    }

    public static void main (String [] args)
    {
        Whatever testWhatever = new Whatever ();
    }
}

2 个答案:

答案 0 :(得分:5)

Whatever个实例的数组 - 全部为null

我猜你在修复它时会遇到OutOfMemoryError的另一个问题,因为当你调用new来初始化Whatever数组元素时,他们将构造自己的数组并调用new ,依此类推,直到你收到OOM错误。

我会为你拼出来,这样你就可以得到下一个错误:

import javax.swing.JOptionPane;

public class Whatever
{
    private int age; 
    private String name;
    private float salary;

    public Whatever () {
        String userName = JOptionPane.showInputDialog ("What is your name?");
        Whatever listData[] = new Whatever[10];
        for (int i = 0; i < listData.length; ++i) {
            listData[i] = new Whatever();  // This is where you'll get the OOM error.  See why?
        }
        // You'll never get here.
        listData[6].name = userName; 
    }

    public static void main (String [] args)
    {
        Whatever testWhatever = new Whatever();
    }
}

你将Swing代码放在构造函数中?您是否打算将此作为如何编写错误代码的示例?

为了将来参考,你应该在一个好的IDE中运行你的代码 - 比如市场上最好的IntelliJ--打开调试并逐步完成代码。你会在问题所在的地方很快找到答案,比在SO处告诉你更快。

所以是的,这是一个非常愚蠢的例子。希望你不是真的写这样的东西。

答案 1 :(得分:1)

有了这个

Whatever listData[] = new Whatever [10];

您初始化了一个新数组,但未初始化数组中的元素。

因此,当您访问listData[6].name时,您会收到NullPointerException。

你可以试试这个:

for(int i = 0; i < listData.length; i++) {
    listData[i] = new Whatever(); 
}

,但请不要在构造函数本身中执行此操作。 因为那样你会得到像duffymo说的OutOfMemoryException。

尝试直接在main中执行此操作。