0

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

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 ();
    }
}
4

2 回答 2

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 上询问会告诉你的速度更快。

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

于 2013-06-03T20:20:03.093 回答
1

有了这个

Whatever listData[] = new Whatever [10];

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

因此,当您访问listData[6].name.

你可以试试这个:

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

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

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

于 2013-06-03T20:42:45.270 回答