java.lang.exceptionininitializererror_java.lang.ExceptionInInitializerError异常的解决方法
今天在开发的过程中,遇到java.lang.ExceptionInInitializerError异常,百度查了一下,顺便学习学习,做个笔记
静态初始化程序中发生意外异常的信号,抛出ExceptionInInitializerError表明在计算静态初始值或静态变量的初始值期间发生异常。
要理解这个异常从Java类中的静态变量初始化过程说起,在Java类中静态变量的初始化顺序和静态变量的声明顺序是一致的。示例程序为:
package com.lang.ininitialException;
import java.util.ArrayList;
import java.util.List;
public class StaticParams {
private static int NUM_A = getA();
private static int NUM_B = getB();
private static List LIST_A = getListA();
private StaticParams() {
System.out.println("初始构造方法");
}
public static StaticParams getInstance() {
return new StaticParams();
}
private static int getA(){
System.out.println("初始化A");
return 5;
}
private static int getB() {
System.out.println("初始化B");
return 10;
}
private static List getListA() {
System.out.println("初始化List");
return new ArrayList();
}
public static void main(String args[]){
StaticParams.getInstance();
}
}
运行结果:
初始化A
初始化B
初始化List
初始构造方法
如果交换NUM_A和NUM_B的位置,那么结果就是:
初始化B
初始化A
初始化List
初始构造方法
即:在某个静态变量的初始化还未执行之前就使用该静态变量。
复现ExceptionInInitializerError异常的程序如下:
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 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 getListA() {
System.out.println("初始化List");
return new ArrayList();
}
public static void main(String args[]) {
StaticParamsSingle.getInstance();
}
}
sps变量初始化中使用到的其他的变量,但其他的静态变量还未初始化,故而在sps初始化时就会产生异常:
初始化构造方法
result is:0
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.(StaticParamsSingle.java:8)
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程小技巧。
相关文章
总结
如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您喜欢交流学习经验,点击链接加入交流1群:1065694478(已满)交流2群:163560250
java.lang.exceptionininitializererror_java.lang.ExceptionInInitializerError异常的解决方法相关推荐
- Java中的ExceptionInInitializerError异常及解决方法
2019独角兽企业重金招聘Python工程师标准>>> 当在静态初始化块中出现了异常的时候,JVM会抛出 java.lang.ExceptionInInitializerError异 ...
- java.lang.ClassNotFoundException: com.mysql.jdbc.Driver 解决方法 java.lang.ClassNotFoundException: com.
java.lang.ClassNotFoundException: com.mysql.jdbc.Driver 解决方法 java.lang.ClassNotFoundException: com.m ...
- Android DialogFragment 遇到 java.lang.IllegalStateException: Fragment already added: 的解决方法
Android DialogFragment 遇到 java.lang.IllegalStateException: Fragment already added: 的解决方法 参考文章: (1)An ...
- Idea运行web项目时,提示java.lang.ClassNotFoundException: com.mysql.jdbc.Driver解决方法
Idea运行web项目时,提示java.lang.ClassNotFoundException: com.mysql.jdbc.Driver解决方法 参考文章: (1)Idea运行web项目时,提示j ...
- 出现 java.lang.UnsupportedClassVersionError 错误的原因及解决方法
1 错误描述 正常运行程序,报出如下错误: 2 错误原因 通过观察上述标记出来的错误描述,咱们可以知道: java.lang.UnsupportedClassVersionError:Unsuppor ...
- 关于Android 8.0java.lang.SecurityException: Permission Denial错误的解决方法
关于Android 8.0java.lang.SecurityException: Permission Denial错误的解决方法 参考文章: (1)关于Android 8.0java.lang.S ...
- Maven常见异常及解决方法
异常1: [ERROR] Failed to execute goal on project biz_zhuhai: Could not resolve dependencies for projec ...
- Adobe flash cs5 的Java运行时环境初始化错误 完美解决方法
Adobe flash cs5 的Java运行时环境初始化错误 完美解决方法 下载网络上的Adobe flash cs5 精简版(绿色版),Java运行时环境初始化时出现错误,你可能需要重装Flash ...
- java开发中遇到的问题及解决方法(持续更新)
java开发中遇到的问题及解决方法(持续更新) 参考文章: (1)java开发中遇到的问题及解决方法(持续更新) (2)https://www.cnblogs.com/LiuYanYGZ/p/6112 ...
- java.net.BindException: Address already in use: 解决方法
java.net.BindException: Address already in use: 解决方法 参考文章: (1)java.net.BindException: Address alread ...
最新文章
- 在leangoo里怎么设置背景,修改密码?
- [YTU]_2626( B 统计程序设计基础课程学生的平均成绩)
- HDU 1853 HDU 3488【有向环最小权值覆盖问题 】最小费用最大流
- Maven的pom.xml文件结构之Build配置build
- Oracle高级SQL培训与讲解
- 搜狗地图2016-Android-社招笔试题(包含Java基础部分)
- 2020年度工作计划_2020最新年度个人工作计划(精选3篇)
- Bulma - 基于 Flexbox 的现代化的 CSS 框架
- 插件开发之360 DroidPlugin源码分析(三)Binder代理
- 腾讯云 DDNS 方案
- 如何根据音频转文字自动给视频加字幕
- 图片后缀名批量快速修改
- 甘特图、IPO图、DFD图
- Android12 (S) 获取wifi名称(SSID)的方法
- 戏子推荐伤感个性日志:其实我很脆弱
- .net 5+ 知新:【2】 .Net Framework 、.Net 、 .NET Standard的概念与区别
- 现代OpenGL教程(六):鼠标和键盘(imgui+OpenGL3.3)
- 关于ETD.sys的系统蓝屏问题的解决
- python网络爬虫——爬取嗅事百科
- php在线查毒,linux clamav 免费查毒工具
热门文章
- 华为认证: 高级redhat例题及答案
- Linux(2019年)-10.11
- linux0.11 阅读笔记
- Vbox虚拟机无法启动错误Mark
- BIOS和EFI启动过程
- docker-nividia run 报错
- 闽南歌歌词有一句电子计算机,一首闽南歌,有一句歌词是(提起男儿的志气)歌名是什么?...
- 基于SSM实现个性化健康饮食推荐系统
- VSCODE一个阴坑
- 有关javaSE下载时,环境配置path不成功,在cmd命令中java,javac,java -version出现不是内部或外部命令的现象处理