0

所以可以说我有这个类调用 A 它有一个构造函数

       A(String someA, int someB , String[] someC)

在另一个类中,我创建了一个将其作为类变量的 main

    private static String[] someC = new String[4];
    private static ArrayList<A> thisA;

然后我从 dat 文件中提取一些信息

                someA= readFile.nextLine(); //some normal string such as  bob Billy
                someB= readFile.nextInt();   //some integer like 5
                unitCode[0] = readFile.next(); //some code such as HITHERE34
                unitCode[1] = readFile.next(); // all the 4 is the same style
                unitCode[2] = readFile.next();
                unitCode[3] = readFile.next();
         thisA.add(new A(someA,someB,unitCode); // create object and store into array list

我尝试运行它,当我打印 unitCode 时它给了我一个 nullPointerException 错误,它返回给我一个地址。我该如何解决 ?

4

3 回答 3

2

您必须先初始化列表thisA,然后才能执行.add. 只要没有初始化对象,就不能运行集合的方法。

thisA = new ArrayList<A>();

如果你可以估计,你需要多少条目(四舍五入),你可能会对这个构造函数感兴趣:

thisA = new ArrayList<A>(120);

初始化列表后,您可以添加元素。

于 2013-10-19T17:15:20.607 回答
2
private static ArrayList<A> thisA;

这只是一个成员的声明。默认情况下,JVM 会将“thisA”(或任何引用类型成员)初始化为空值。要克服这个问题,您需要手动将其初始化为其他内容:

private static ArrayList<A> thisA = new ArrayList<A>();
于 2013-10-19T17:15:21.483 回答
0

正如您所写的“私有静态 ArrayList thisA;” , 这意味着只有引用变量被创建并存储在堆栈内存中但没有在堆内存中创建对象,因此thisA当前没有指向任何对象并且默认值为null,并且您正在尝试访问该对象使用这个甚至没有创建的变量,因此你得到了 nullPointerException。

因此,将其设为私有静态 ArrayList thisA = new ArrayList; 你的问题就会得到解决

谢谢 :)

于 2013-10-19T19:03:13.443 回答