遇到 ExceptionInInitializerError 怎么解决?java报错
在编写java的样例代码时出现这种问题。这种情况应该如何解决和避免那?
package com.lang.ininitialException;
import java.util.ArrayList;
import java.util.List;
public class StaticParamsSingle {
private static StaticParamsSingle sps = buildStaticParams();
// private static StaticParamsSingle sps = new StaticParamsSingle();
private static int NUM_A = getA();
private static int NUM_B = getB();
private static List<String> LIST_A = getListA();
private StaticParamsSingle(){
System.out.println("初始化构造方法");
}
private static StaticParamsSingle buildStaticParams() {
if (sps == null) {
sps = new StaticParamsSingle();
}
int result = NUM_A + NUM_B;
System.out.println("result is:" + result);
LIST_A.add("haha");
return sps;
}
public static StaticParamsSingle getInstance() {
return sps;
}
private static int getA(){
System.out.println("初始化A");
return 5;
}
private static int getB() {
System.out.println("初始化B");
return 10;
}
private static List<String> getListA() {
System.out.println("初始化List");
return new ArrayList<String>();
}
public static void main(String args[]) {
StaticParamsSingle.getInstance();
}
}
错误信息:
Exception in thread "main" java.lang.ExceptionInInitializerError
Caused by: java.lang.NullPointerException
at com.lang.ininitialException.StaticParamsSingle.buildStaticParams(StaticParamsSingle.java:25)
at com.lang.ininitialException.StaticParamsSingle.<clinit>(StaticParamsSingle.java:8)
原因是什么,为什么会发生异常,以及下面到底发生了什么。如果有人能帮忙?提前谢谢
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
楼主。看了你的错误信息,有可能一下两种情况:
1.类的静态变量未初始化就被调用。这个问题出现在使用单例模式时,那个类里面还有静态变量,根据静态变量的加载顺序是按照静态变量声明的位置开始的这个语法,静态变量的初始化写在了instance实例初始化之后导致的,检查静态变量初始化的顺序即可。
2.就是类的静态变量或者静态代码块初始化或者加载过程中出现了异常。针对这个问题,对该类的静态变量一个个检查找出某个变量初始化失败的原因就行了。