大约阅读2分钟,写于 2021 0408 22:31 北京石景山家里台灯下

java.lang.NoClassDefFoundError:无法初始化类XXX

文章目录

  • 1. 场景
  • 2. 问题
  • 3. 原因
  • 4. 解决思路
  • Java中static块执行时机

1. 场景

在本地,debug模式启动调试,代码大概是如下:

public class PropHolder {public static Properties prop;static {//code for loading properties from file}
}// Referencing the class somewhere else:
Properties prop = PropHolder.prop;

2. 问题

java.lang.NoClassDefFoundError:无法初始化类XXX

在运行一段时间后又恢复了正常(真的很奇怪,文章末尾有参考案例)

3. 原因

就现在而言,我有一个静态初始化的变量,该变量依赖于属性文件中的缺失条目。

当然,不排除有其他问题,了解底层 JVM 类加载过程,对解决问题很有帮助。(搜 JavaPub版,掌握底层逻辑)

4. 解决思路

意味着 配置文件 中的属性不正确或为空!

  1. 补充缺失参数

  2. 如果配置文件没问题,参考这篇文章:http://www.voidcn.com/article/p-bayljcop-bmr.html

    大概思路就是说初始化速度不一致,导致初始化失败,改成单例,交由Spring管理,依赖的属性交由Spring注入。

如果没有解决你的问题,请继续看

Java中static块执行时机

public class StaticDemo {public static final String INIT = "init";static {System.out.println("------StaticDemo----");}
}public class TestStatic {public static void main(String[] args) {System.out.println(StaticDemo.INIT);}
}
//打印
init

怎么没有执行 static 块的代码呢?

最后发现是因为调用的静态属性被final修饰导致的。去掉final修饰,结果OK!

public class StaticDemo {//去掉 finalpublic static String INIT = "init";static {System.out.println("------StaticDemo----");}
}public class TestStatic {public static void main(String[] args) {System.out.println(StaticDemo.INIT);}
}
//打印结果
------StaticDemo----
init

这里就和类加载机制中的 初始化 相关! 类被加载了不一定就会执行静态代码块,只有一个类被主动使用的时候,静态代码才会被执行!


当一个类被主动使用时,Java虚拟就会对其初始化,如下六种情况为主动使用:

  1. 当创建某个类的新实例时(如通过new或者反射,克隆,反序列化等)
  2. 当调用某个类的静态方法时
  3. 当使用某个类或接口的静态字段时
  4. 当调用Java API中的某些反射方法时,比如类Class中的方法,或者java.lang.reflect中的类的方法时
  5. 当初始化某个子类时
  6. 当虚拟机启动某个被标明为启动类的类(即包含main方法的那个类)

Java编译器会收集所有的类变量初始化语句和类型的静态初始化器,将这些放到一个特殊的方法中:clinit 。

重点:使用final修饰的静态字段,在调用的时候不会对类进行初始化!

JavaPub 参考巨人:https://blog.csdn.net/u010648555/article/details/82228244

BAT面试题

java.lang.NoClassDefFoundError:无法初始化类XXX相关推荐

  1. 解决 idea Method threw ‘java.lang.NoClassDefFoundError‘ exception. Cannot evaluate xxx toString 问题

    问题: Method threw 'java.lang.NoClassDefFoundError' exception. Cannot evaluate com.tianque.datagroup.d ...

  2. JAVA第三方包导入但找不到类,解决:导入第三方包报错java.lang.NoClassDefFoundError:XXX.XXX,XXXXXX...

    报错信息如下,主要是导入androidpn测试client端,结果报错 04-02 16:28:34.325: E/dalvikvm(485): Could not find class 'org.a ...

  3. 怎么解决java.lang.NoClassDefFoundError错误 ,以及类的加载机制

    前言 在日常Java开发中,我们经常碰到java.lang.NoClassDefFoundError这样的错误,需要花费很多时间去找错误的原因,具体是哪个类不见了?类明明还在,为什么找不到?而且我们很 ...

  4. 怎么解决java.lang.NoClassDefFoundError错误

    前言 在日常Java开发中,我们经常碰到Java.lang.NoClassDefFoundError这样的错误,需要花费很多时间去找错误的原因,具体是哪个类不见了?类明明还在,为什么找不到?而且我们很 ...

  5. java.lang.NoClassDefFoundError:如何解决–第3部分

    本文是我们的NoClassDefFoundError故障排除系列的第3部分. 正如我在第一篇文章中提到的那样,有许多可能导致NoClassDefFoundError的问题. 本文将重点介绍该问题的最常 ...

  6. 安卓4.4玩java_Android4.4运行过程中闪退java.lang.NoClassDefFoundError

    上周五项目测试时发现一个奇怪的Bug,项目中依赖了一个第三方框架,但是在android4.0-4.4.4之间的系统中运行会直接闪退,抛出错误异常为java.lang.NoClassDefFoundEr ...

  7. 抛错java.lang.NoClassDefFoundError: Could not initialize class sun.awt.X11.XToolkit

    参考博客: https://blog.csdn.net/pierre_/article/details/47363985 https://blog.csdn.net/catoop/article/de ...

  8. 关于怎么解决java.lang.NoClassDefFoundError错误

    很容易把java.lang.NoClassDefFoundError和java.lang.ClassNotfoundException这两个错误搞混,事实上这两个错误是完全不同的. NoClassDe ...

  9. 【日常Exception】第二十四回:nested exception is java.lang.NoClassDefFoundError: redis/clients/jedis/util/Pool

    热门系列: 程序人生,精彩抢先看 日常异常,是否也有你似曾相识的那一个 1.问题 近期遇到的一个异常问题如题所示,下面是完整的异常内容,原景重现: PropertyAccessException 1: ...

最新文章

  1. spring整合mybatis(入门级简单教程3)--获取sqlSession对象
  2. 两个月的打卡活动圆满结束,今天公布兑奖详情
  3. Dart 异步编程之 Isolate 和事件循环
  4. google套件_Google 推出 3 款语音识别应用,想用 AI 帮语言障碍者说话
  5. PMM (Percona MySQL Monitor) 部署
  6. RANSAC算法的简单理解
  7. 【当头棒喝】你是真的了解云计算吗?
  8. 成年人不懂这些道理,会吃很多亏
  9. CentOS下搭建DNS服务器
  10. 苹果经典复古彩虹Logo回归?这效果图 看了只想告辞!
  11. Docker : Docker 查看容器 IP 地址以及相关信息
  12. 在MingW下编译llvm/clang
  13. atitit 信息化2.0概论 艾提拉解读版读书笔记.docx 目录 1. 企业信息化1.0时代 1.1.6 C/S模式和B/S模式的好坏 1.1.7 大集中的争议 1.1.8 没有解决的孤岛问
  14. 多年收集的一些稀有软件4
  15. 中国大学mooc慕课题库答案怎么查,这里全有了
  16. vue-router 如何在新窗口打开页面
  17. MarkdownPad 2使用教程
  18. 加载MSCOMCTL.OCX错误处理的几个关键
  19. 常见字母组合发音规律
  20. Gradle Composite builds 扩展使用

热门文章

  1. 【科普园地】郭雷院士:系统的反馈原理及魅力
  2. 简单C++程序——掷骰子
  3. 一行shell命令实现代码行数统计
  4. 2017-11-06 日语编程语言抚子 - 第三版特色初探 1
  5. mysql的双机热备自动切换_Mysql双机热备配置(超详细多图版)
  6. Altium Designer多图纸原理图关联设计方法
  7. 2022CoCa: Contrastive Captioners are Image-Text Fountion Models
  8. 数据驱动决策:BI在零售业的数据化管理
  9. vue H5移动端项目使用高德地图定位/标点并点击导航跳第三方app且实现导航路线——实例
  10. 锐捷睿易RAP100全新上市 WALL AP也有超高性能