今天在开发的过程中,遇到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异常的解决方法相关推荐

  1. Java中的ExceptionInInitializerError异常及解决方法

    2019独角兽企业重金招聘Python工程师标准>>> 当在静态初始化块中出现了异常的时候,JVM会抛出 java.lang.ExceptionInInitializerError异 ...

  2. java.lang.ClassNotFoundException: com.mysql.jdbc.Driver 解决方法 java.lang.ClassNotFoundException: com.

    java.lang.ClassNotFoundException: com.mysql.jdbc.Driver 解决方法 java.lang.ClassNotFoundException: com.m ...

  3. Android DialogFragment 遇到 java.lang.IllegalStateException: Fragment already added: 的解决方法

    Android DialogFragment 遇到 java.lang.IllegalStateException: Fragment already added: 的解决方法 参考文章: (1)An ...

  4. Idea运行web项目时,提示java.lang.ClassNotFoundException: com.mysql.jdbc.Driver解决方法

    Idea运行web项目时,提示java.lang.ClassNotFoundException: com.mysql.jdbc.Driver解决方法 参考文章: (1)Idea运行web项目时,提示j ...

  5. 出现 java.lang.UnsupportedClassVersionError 错误的原因及解决方法

    1 错误描述 正常运行程序,报出如下错误: 2 错误原因 通过观察上述标记出来的错误描述,咱们可以知道: java.lang.UnsupportedClassVersionError:Unsuppor ...

  6. 关于Android 8.0java.lang.SecurityException: Permission Denial错误的解决方法

    关于Android 8.0java.lang.SecurityException: Permission Denial错误的解决方法 参考文章: (1)关于Android 8.0java.lang.S ...

  7. Maven常见异常及解决方法

    异常1: [ERROR] Failed to execute goal on project biz_zhuhai: Could not resolve dependencies for projec ...

  8. Adobe flash cs5 的Java运行时环境初始化错误 完美解决方法

    Adobe flash cs5 的Java运行时环境初始化错误 完美解决方法 下载网络上的Adobe flash cs5 精简版(绿色版),Java运行时环境初始化时出现错误,你可能需要重装Flash ...

  9. java开发中遇到的问题及解决方法(持续更新)

    java开发中遇到的问题及解决方法(持续更新) 参考文章: (1)java开发中遇到的问题及解决方法(持续更新) (2)https://www.cnblogs.com/LiuYanYGZ/p/6112 ...

  10. java.net.BindException: Address already in use: 解决方法

    java.net.BindException: Address already in use: 解决方法 参考文章: (1)java.net.BindException: Address alread ...

最新文章

  1. 在leangoo里怎么设置背景,修改密码?
  2. [YTU]_2626( B 统计程序设计基础课程学生的平均成绩)
  3. HDU 1853 HDU 3488【有向环最小权值覆盖问题 】最小费用最大流
  4. Maven的pom.xml文件结构之Build配置build
  5. Oracle高级SQL培训与讲解
  6. 搜狗地图2016-Android-社招笔试题(包含Java基础部分)
  7. 2020年度工作计划_2020最新年度个人工作计划(精选3篇)
  8. Bulma - 基于 Flexbox 的现代化的 CSS 框架
  9. 插件开发之360 DroidPlugin源码分析(三)Binder代理
  10. 腾讯云 DDNS 方案
  11. 如何根据音频转文字自动给视频加字幕
  12. 图片后缀名批量快速修改
  13. 甘特图、IPO图、DFD图
  14. Android12 (S) 获取wifi名称(SSID)的方法
  15. 戏子推荐伤感个性日志:其实我很脆弱
  16. .net 5+ 知新:【2】 .Net Framework 、.Net 、 .NET Standard的概念与区别
  17. 现代OpenGL教程(六):鼠标和键盘(imgui+OpenGL3.3)
  18. 关于ETD.sys的系统蓝屏问题的解决
  19. python网络爬虫——爬取嗅事百科
  20. php在线查毒,linux clamav 免费查毒工具

热门文章

  1. 华为认证: 高级redhat例题及答案
  2. Linux(2019年)-10.11
  3. linux0.11 阅读笔记
  4. Vbox虚拟机无法启动错误Mark
  5. BIOS和EFI启动过程
  6. docker-nividia run 报错
  7. 闽南歌歌词有一句电子计算机,一首闽南歌,有一句歌词是(提起男儿的志气)歌名是什么?...
  8. 基于SSM实现个性化健康饮食推荐系统
  9. VSCODE一个阴坑
  10. 有关javaSE下载时,环境配置path不成功,在cmd命令中java,javac,java -version出现不是内部或外部命令的现象处理