Java NullPointerException和ArrayList

Java NullPointerException和ArrayList,java,arraylist,nullpointerexception,Java,Arraylist,Nullpointerexception,鉴于以下情况: import java.util.ArrayList; public class IntegerList { public ArrayList<Integer> list; private int front; private int[] integers = getIntegers(); public IntegerList (int maxCapacity) { list = new ArrayList<

鉴于以下情况:

import java.util.ArrayList;

public class IntegerList {

    public ArrayList<Integer> list;
    private int front;
    private int[] integers = getIntegers();

    public IntegerList (int maxCapacity) {
        list = new ArrayList<Integer>(maxCapacity);
        for (int i = 0; i < maxCapacity; i++) {
            list.add(null);
        }
        front = 0;
    }

    public int getCapacity() {
        if (list.get(front) == null) 
            return 0;
        else 
            return 10;
    }

    public int[] getIntegers() {
        int[] integers = new int[getCapacity()];
        return integers;
    }
}
import java.util.ArrayList;
公共类整数列表{
公共阵列列表;
私人内部阵线;
private int[]integers=getIntegers();
公共整数列表(整数最大容量){
列表=新阵列列表(最大容量);
对于(int i=0;i
当我通过将20传递给构造函数中的maxCapacity参数来实例化类IntegerList时,我在编译时得到以下消息:

Exception in thread "main" java.lang.NullPointerException
    at IntegerList.getCapacity(IntegerList.java:18)
    at IntegerList.getIntegers(IntegerList.java:26)
    at IntegerList.<init>(IntegerList.java:7)
    at Test.main(Test.java:5)
线程“main”java.lang.NullPointerException中的异常 在IntegerList.getCapacity(IntegerList.java:18) getIntegers(IntegerList.java:26) 在IntegerList.(IntegerList.java:7) at Test.main(Test.java:5)

为什么我会得到例外?问题似乎出现在getCapacity()中的list.get(front)中,但这不会返回null,因此if语句会返回true吗?

您的初始值设定项
integers=getIntegers()
隐式插入到构造函数顶部,并在
list=new ArrayList(maxCapacity)之前运行


在初始值设定项中使用除可立即计算的表达式之外的任何其他表达式都会经常遇到此类问题。最好在构造函数中显式地进行复杂的初始化。

原因如下:
private int[]integers=getIntegers()


当您实例化这个类时,它会导致调用方法
getIntegers
,该方法调用
getCapacity
,但是
list
尚未初始化,它是
null
。因此,当它调用
list.get(front)
时,它会获取
NPE
您的代码
private int[]integers=getIntegers()IntegerList
实例期间执行code>

将代码更改为

public int getCapacity() {
    if (list == null || list.get(front) == null) 
        return 0;
    else 
        return 10;
}

移除构造函数数组中的null元素。默认情况下,空值已经存在。 其次更改私有int[]integers=getIntegers() 事物到私有int[]整数

并将此作为构造函数代码的最后一行:


integers=getIntegers()

关键是
实例成员初始化在您提供的显式构造函数代码之前秘密进行

private int[] integers = getIntegers();
在初始化IntegerClass调用构造函数时作为第一行执行,此时ArrayList列表仍指向null,因此无法使用。

请仔细查看

public int getCapacity() {
        if (list.get(front) == null) 
            return 0;
        else 
            return 10;
    }
您正在获取nullPointerException,因为您正在存储
null
。和
list.get(front)
当您尝试获取值时,它将在比较之前抛出异常

你存储0而不是空值是最好的。或者将此代码放置在try catch块中。像下面这样

 public int getCapacity() {
  int result =0;
try{
      if (list.get(front) != null) 
             return 10;
   }catch(Exception e) {
     return 0
 }

}

@AniketThakur不在
列表中
,他们不会。是的,将其混淆为
数组
。感谢大家的输入-非常感谢