java.lang.ExceptionInInitializerError由以下原因引起:java.lang.NullPointerException
这是来自OCJP示例。我已经编写了以下代码java.lang.ExceptionInInitializerError由以下原因引起:java.lang.NullPointerException,java,exception,nullpointerexception,Java,Exception,Nullpointerexception,这是来自OCJP示例。我已经编写了以下代码 public class Test { static int x[]; static { x[0] = 1; } public static void main(String... args) { } } 输出:java.lang.ExceptionInInitializeError 原因:java.lang.NullPointerException atx[0]=1 为什么它抛出Nu
public class Test {
static int x[];
static {
x[0] = 1;
}
public static void main(String... args) {
}
}
输出:java.lang.ExceptionInInitializeError
原因:java.lang.NullPointerException atx[0]=1代码>
为什么它抛出NullPointerException
而不是ArrayIndexOutOfBoundException
为什么它抛出NullPointerException而不是ArrayIndexOutOfBoundException
因为您没有初始化数组
初始化数组
static int x[] = new int[10];
原因:
当应用程序在需要对象的情况下尝试使用null时引发。
这些措施包括:
- 调用空对象的实例方法
- 访问或修改空对象的字段
- 将null的长度视为数组
- 像数组一样访问或修改null的插槽。
- 将null作为可丢弃的值抛出
由于数组为null
,因此您没有初始化x
数组,因此被粗体点击中。变量的声明和初始化之间存在差异。当你写intx[]时
您只需声明一个变量,该变量作为实例字段,使用默认值null
初始化。要实际创建数组,必须编写intx[]=newint[10]代码>或您需要的大小
获取NullPointerException
而不是ArrayIndexOutOfBounds
的原因是,当您确实有一个数组并尝试寻址其边界以外的位置时,会抛出后者,但在您的情况下,您根本没有数组,并尝试将某些内容放入一个不存在的数组中。这就是为什么NPE
在静态块中抛出
的原因,您试图将值1分配给数组的第一个元素(x[0]=1)。请注意,名为x的int[]数组尚未初始化
public class Test {
static int x[];
static {
x[0] = 1;// Here is the place where NullPointException is thrown.
}
public static void main(String... args) {
}
}
有两种方法可以修复它
1使用静态整数x[]=新整数[5]代码>
而不是静态int x[]代码>
二,
改变
static {
x[0] = 1;
}
到
请记住:在使用阵列之前对其进行初始化。
static int x[];
static {
x[0] = 1;
}
导致NullPointerException,因为中的x数组未初始化(为null)
如果访问了超出边界的索引,则会发生ArrayIndexOutOfBoundException:
static int x[] = new int[10];
static {
x[20] = 1; //<-----accessing index 20
}
static int x[]=new int[10];
静止的{
x[20]=1;//它之所以抛出,是因为x为null
x[]已声明,但未初始化。
对象具有空值之前,原语具有默认值(例如0、false等)
因此,应按如下所示进行初始化:
静态整数x[]=新整数[20];//在声明x时
或
静态整数x[];
x=new int[20];//在声明x[]之后和在代码中使用x[]之前
如果使用非法索引初始化和访问数组,则将发生
例如:
x包含20个元素,因此如果我们使用任何索引<0
或
index>19
,将引发ArrayIndexOutOfBoundException
这很简单。这里x是null
,您试图在未初始化的数组中存储一个值。因此NullPointerException
NullPointerException:
尝试访问未初始化对象的属性时引发此异常
阵列索引边界外异常:
当使用对象初始化数组,但尝试使用无效索引访问数组时,会引发此异常
在您的情况下,由于您尚未初始化对象,因此将获得NullPointerException。您创建了一个名为“x”的人,但未关联任何人(数组对象)
如果将第2行更改为
static int x[] = new int[];
然后您将获得ArrayIndexOutOfBoundsException而不是NullPointerException。异常InInitializerRor是未经检查的异常
执行静态块时,静态变量初始化,如果出现任何异常,则为ExceptionInInitializeError
例如:
class Test{
static int x = 10/0;
}
输出:
Runtime Exception: ExceptionInInitializerError caused by java.lang.ArithmeticExcpetion.
例如:
class Test{
static{
String s = null;
System.out.println(s.length());
}
}
输出:
Runtime Exception: ExceptionInInitializerError caused by java.lang.NullPointerException.
是的,我知道我没有初始化数组。我想知道对哪个null调用哪个方法?
Runtime Exception: ExceptionInInitializerError caused by java.lang.NullPointerException.