JAVA运行时类存在,但是报错:NoClassDefFoundError: Could not initialize class

这篇具有很好参考价值的文章主要介绍了JAVA运行时类存在,但是报错:NoClassDefFoundError: Could not initialize class。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

我们在部署代码时,明明类存在,但是发现报错:NoClassDefFoundError: Could not initialize class。
这类问题是由静态成员或静态初始化语句块引起。
我们先看下面个类:

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

/**
 * 测试代码
 */
public class Test {
    private static String msg = getMsg();

    private static String getMsg() {
        try {
            logger.info("getMsg方法输出info日志信息");
        } catch (Exception e) {
            logger.error("getMsg方法输出error日志信息", e);
        }
        return "Hello World";
    }

    private static Log logger = LogFactory.getLog(Test.class);

    public void print() {
        logger.info("print方法输出info信息");
    }

    public static void main(String[] args) {
        Test test = new Test();
        test.print();
    }
}

执行结果:

java.lang.ExceptionInInitializerError
Caused by: java.lang.NullPointerException
	at Test.getMsg(Test.java:15)
	at Test.<clinit>(Test.java:9)
Exception in thread "main" 

分析其中的原因:我们通过debug模式调试,可以看到logger=null。
could not initialize class,问题解决,java,jvm
结论:成员变量的初始化顺序导致logger获取失败。
接下来我们做一下验证,调整代码如下:

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

/**
 * 测试代码
 */
public class Test {
    private static Log logger = LogFactory.getLog(Test.class);
    private static String msg = getMsg();

    private static String getMsg() {
        try {
            logger.info("getMsg方法输出info日志信息");
        } catch (Exception e) {
            logger.error("getMsg方法输出error日志信息", e);
        }
        return "Hello World";
    }


    public void print() {
        logger.info("print方法输出info信息");
    }

    public static void main(String[] args) {
        Test test = new Test();
        test.print();
    }
}

执行结果:

SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/D:/Maven/ch/qos/logback/logback-classic/1.2.3/logback-classic-1.2.3.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/D:/Maven/org/slf4j/slf4j-log4j12/1.7.30/slf4j-log4j12-1.7.30.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [ch.qos.logback.classic.util.ContextSelectorStaticBinder]
14:26:29.076 [main] INFO Test - getMsg方法输出info日志信息
14:26:29.079 [main] INFO Test - print方法输出info信息

可以看到正确输出结果。文章来源地址https://www.toymoban.com/news/detail-786206.html

到了这里,关于JAVA运行时类存在,但是报错:NoClassDefFoundError: Could not initialize class的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • maven:本地仓库有依赖但是idea报错找不到依赖Could not find artifact com.*.*

    控制台提示: 原因:是仓库中 _remote.repositories 的这样一个文件导致maven不会识别本地仓库已经存在的依赖。Maven在下载啊仓库找不到对应资源时会生成一个_remote.repositories为后缀的文件。 解决办法:去你的maven本地仓库下找到_remote.repositories和.lastUpdates文件删除。 注意: 如果

    2024年02月11日
    浏览(47)
  • maven运行时报错“java.lang.NoClassDefFoundError:sun/misc/BASE64Decoder”

    项目中用到加密jar包,单独在idea中运行项目时正常,通过mvn命令行运行时报错“java.lang.NoClassDefFoundError:sun/misc/BASE64Decoder” 搜索之后发现 sun/misc/BASE64Encoder 这个东西仅在jdk1.8以及之前的版本存在,更高版本的jdk不存在了 一翻纠结 Mac下查看已安装的jdk版本及其安装目录 查看

    2024年01月23日
    浏览(44)
  • 解决 java.lang.NoClassDefFoundError: org/apache/poi/POIXMLTypeLoader 报错

    在使用POI导出Excel表格的时候,本地运行导出没问题,但是发布到服务器后提示 “java.lang.NoClassDefFoundError: org/apache/poi/POIXMLTypeLoader” 下面是pom.xml中的配置 一开始以为缺少jar包导致的,后来排查发现不是这个原因,是因为ooxml-schemas版本过低。对于poi 4.1.0和4.1.2来说,应该使用

    2024年01月21日
    浏览(43)
  • IDEA编译通过,运行报错:程序包...不存在

    编译通过但找不到包 : \\\"找不到符号\\\"/\\\"程序包xxx不存在\\\"/编译成功,启动失败/代码不报错/有代码却报包不存在. 方法一: 解决: 重新编译一下,再启动即可. Build - Rebuild project. 方法二(我使用的): lombok等注解找不到包,但是项目中是存在的. 原因:当前电脑idea的问题. 解决:maven执

    2024年02月13日
    浏览(50)
  • easyexcel导出报错 java.lang.NoClassDefFoundError: org/apache/poi/POIXMLTypeLoader

    报错: 原因: 这是因为poi依赖不一致导致的,将poi各个依赖换成一直就行 我的是easyexcel 2.2.7版本 对应poi三个依赖4.1.2,替换后问题解决

    2024年02月04日
    浏览(50)
  • NoClassDefFoundError: Could not initialize class

    报错大概意思就是 该类初始化失败 大概率是缺少依赖的问题。 平时我们可能会更新pom文件,下载新增的依赖,然后将新下载的依赖更新到线上的系统,也是问题的所在: 举例说明:例如我们新增如下的依赖 按常规处理,我们可能会去本地的maven仓库,把该依赖复制,更新到

    2024年01月18日
    浏览(69)
  • 解决报错信息:java.lang.NoClassDefFoundError: org/springframework/beans/factory/aot/BeanRegistrationAotProc

    ** java.lang.NoClassDefFoundError: org/springframework/beans/factory/aot/BeanRegistrationAotProcessor Exception in thread “main” java.lang.NoClassDefFoundError: org/springframework/beans/factory/aot/BeanRegistrationAotProcessor; Caused by: java.lang.ClassNotFoundException: org.springframework.beans.factory.aot.BeanRegistrationAotProcessor; java.lang.

    2024年02月15日
    浏览(62)
  • 解决报错Exception in thread “main“ java.lang.NoClassDefFoundError: org/openqa/selenium/HasAuthentication

    解决报错Exception in thread “main” java.lang.NoClassDefFoundError: org/openqa/selenium/HasAuthentication 网上查资料发现 是导入了不同版本的selenium包。 解决办法: 修改pom.xml 重新下载后 selenium相关依赖包都是同个版本了 重新运行代码 ,运行通过!

    2024年02月16日
    浏览(63)
  • 报错:springboot项目启动,Exception in thread “main“ java.lang.NoClassDefFoundError: org/springframework/com

     异常处理:当启动springboot项目时,报错Exception in thread \\\"main\\\" java.lang.NoClassDefFoundError: org/springframework/core/metrics/ApplicationStartup 报错截图: 解决措施:找到pom.xml,将其 这个部分替换为可运行的springboot项目的(一般为版本问题) 。

    2024年02月16日
    浏览(57)
  • 报错Handler dispatch failed; nested exception is java.lang.NoClassDefFoundError: org/apache/commons/io

    报错: 原因 :这里version 版本未指定,去远程仓库找最新发布版本的构件,可能会冲突 先根据version版本去本地仓库找,如果本地仓库找不到,再判断版本号是否为明确版本号,如果版本号明确,会从远程仓库下载相应版本的依赖 如果版本号不明确,如 RELEASE、LATEST 和 SNAP

    2024年04月12日
    浏览(53)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包