首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

类加载的过程1 加载2 验证3 准备4 解析5 初始化

1 加载 注意:“加载”是“类加载”(Class Loading)过程的第一步 1.1 加载的过程 在加载过程中,JVM主要做3件事情 通过一个类的全限定名来获取定义此类的二进制字节流(class...文件) 在程序运行过程中,当要访问一个类时,若发现这个类尚未被加载,并满足类初始化的条件时,就根据要被初始化的这个类的全限定名找到该类的二进制字节流,开始加载过程 将这个字节流的静态存储结构转化为方法区的运行时数据结构...真正开始执行类中定义的Java程序代码(或者说是字节码) 初始化阶段就是执行类构造器clinit()的过程. clinit()方法由编译器自动产生,收集类中static{}代码块中的类变量赋值语句和类中静态成员变量的赋值语句...在准备阶段,类中静态成员变量已经完成了默认初始化,而在初始化阶段,clinit()方法对静态成员变量进行显示初始化。...{ static { i=0; System.out.println(i);//编译失败:"非法向前引用" } static int i = 1;

672120
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    【Java】已解决:`java.lang.NoClassDefFoundError`

    java.lang.NoClassDefFoundError 是 Java 开发中比较常见的一类错误,这个错误往往会在运行时发生,可能会让开发者感到困惑。...一、分析问题背景 java.lang.NoClassDefFoundError 通常出现在运行时,表示 JVM 无法找到某个类的定义。...} } 二、可能出错的原因 导致java.lang.NoClassDefFoundError的原因主要有以下几点: 类路径不正确:在编译时,类路径中包含了依赖的类文件或库,但在运行时,类路径配置不正确...类加载器问题:在某些复杂的项目中,可能存在多个类加载器,类加载器之间未能正确共享类或类路径,从而导致类无法加载。 依赖库缺失:在打包或部署过程中,依赖的库文件未被正确打包或部署到应用的运行环境中。...五、注意事项 为了避免java.lang.NoClassDefFoundError,在编写和运行代码时需要注意以下几点: 类路径配置:在项目编译和运行时,始终检查类路径是否正确配置,确保所有依赖的类和库文件都包含在类路径中

    96210

    实习杂记(27):如何解决Java.lang.NoClassDefFoundError

    ,NoClassDefFoundError有可能是由于静态初始化失败导致的 如果你工作在J2EE的环境,有多个不同的类加载器,也可能导致NoClassDefFoundError 跨进程调用  导致找不到那个类...NoClassDefFoundError发生在JVM在动态运行时,根据你提供的类名,在classpath中找到对应的类进行加载,但当它找不到这个类时,就发生了java.lang.NoClassDefFoundError...怎么解决NoClassDefFoundError错误 根据前文,很明显NoClassDefFoundError的错误是因为在运行时类加载器在classpath下找不到需要加载的类,所以我们需要把对应的类加载到...有可能是由于静态初始化失败导致的 如果你工作在J2EE的环境,有多个不同的类加载器,也可能导致NoClassDefFoundError 下面我们看一些当发生NoClassDefFoundError时,...NoClassDefFoundError也可能由于类的静态初始化模块错误导致,当你的类执行一些静态初始化模块操作,如果初始化模块抛出异常,哪些依赖这个类的其他类会抛出NoClassDefFoundError

    36.3K20

    解决java.lang.NoClassDefFoundError错误

    1、问题背景 在日常Java开发中,碰到java.lang.NoClassDefFoundError这样的错误,需要花费很多时间去找错误的原因,具体是哪个类不见了?类明明还在,为什么找不到?...classpath中,或者检查为什么类在classpath中是不可用的,这个发生可能的原因如下: 1、对应的Class在java的classpath中不可用 2、你可能用jar命令运行你的程序,但类并没有在...有可能是由于静态初始化失败导致的 6、如果你工作在J2EE的环境,有多个不同的类加载器,也可能导致NoClassDefFoundError 下面我们看一些当发生NoClassDefFoundError...NoClassDefFoundError也可能由于类的静态初始化模块错误导致,当你的类执行一些静态初始化模块操作,如果初始化模块抛出异常,哪些依赖这个类的其他类会抛出NoClassDefFoundError...(NoClassDefFoundErrorDueToStaticInitFailure.java:35) ... 1 more java.lang.NoClassDefFoundError

    43510

    ClassLoader(二)- 加载过程

    也就是说仅要求: 一个类在被链接之前得是完全加载的。 一个类在被初始化之前得是被完全验证和准备的。...JVM 规范枚举了下述类的初始化时机是: 当虚拟机启动时,初始化用户指定的主类; new 某个类的时候 调用某类的静态方法时 访问某类的静态字段时 子类初始化会触发父类初始化 用反射API对某个类进行调用时...:这里没有提到new 数组的情况,所以new 数组的时候不会初始化类。...所以,NoClassDefFoundError发生在: 【加载阶段】,因其他类的【验证】or【解析】触发对C类的【加载】,此时发生了ClassNotFoundException,那么就要抛出NoClassDefFoundError...【加载阶段】,发现找到的二进制里的类名和要找的类名不一致时,抛出NoClassDefFoundError 【初始化阶段】,如果C类的Class对象处于错误状态,那么抛出NoClassDefFoundError

    59930

    java.lang.NoClassDefFoundError

    java.lang.NoClassDefFoundError错误是在编译时有这个类,但是运行时找不到这个类。...大白话就是:简单来讲就是你的那个类.class文件路径出错了 说到这里就有些疑惑了,怎么编译的时候有,运行时候就没有了,谁没事也不会删这个类。...的一个子类,所以可能由于程序依赖的原生的类库不可用而导致 检查日志文件中是否有java.lang.ExceptionInInitializerError这样的错误,NoClassDefFoundError...有可能是由于静态初始化失败导致的(这是我遇到的问题的解决办法) 如果你工作在J2EE的环境,有多个不同的类加载器,也可能导致NoClassDefFoundError。...NoClassDefFoundError也可能由于类的静态初始化模块错误导致,当你的类执行一些静态初始化模块操作,如果初始化模块抛出异常,哪些依赖这个类的其他类会抛出NoClassDefFoundError

    82620

    理解ClassNotFoundException与NoClassDefFoundError的区别

    上篇文章已经介绍过Java的类加载机制,在类加载的过程中我们最常遇到的异常就是: ClassNotFoundException NoClassDefFoundError 但是你知道他们的区别吗?...(2)第二种情况,类根本就没有初始化成功,结果你还把它当做正常类使用,所以这事也不小,必须抛出ERROR告诉你不能再使用了。...看下面的一段代码: public class Loading { static double i=1/0;//故意使得类初始化失败....对于另一种请情况,如果在编译时候正常,但在运行时执行new关键词的时候,发现依赖类找不到,或者是对于初始化失败的一个类,再次访问其静态成员或者方法,那么会直接抛出NoClassDefFoundError...这两种异常本质上的侧重点还是不一样的,前者侧重在类加载器加载阶段找不到类信息,后者则侧重在使用阶段时却出现了问题比如实例化依赖类找不到或者类本身就初始化失败了。

    9.3K30

    【译】NoClassDefFoundError和ClassNotFoundException的不同

    在加载类时找不到对应的类,就会引发NoClassDefFoundError和ClassNotFoundException,这两种错误都非常严重。...NoClassDefFoundError表示该类在编译阶段还可以找到,但是在运行Java应用的时候找不到了,有时静态块的初始化过程会导致NoClassDefFoundError。...下找不到对应的类而引起的,通常是缺少对应的jar包,不过,JVM认为:(1)当应用运行时没有找到对应的引用,则会抛出java.lang.NoClassDefFoundError;(2)当你在代码中显式加载类...如果你在J2EE开发中遇到NoClassDefFoundError,那么最有可能的原因就是存在多个类加载器和多个目标类,即我们常说的Jar包冲突——关于Jar包冲突,一般可以使用下面两种方法解决: 使用...是链接错误,发生在链接阶段,当解析引用的时候找不到对应的类,就会抛出java.lang.NoClassDefFoundError;ClassNotFoundException是异常,发生在运行阶段。

    1.3K10

    当dex分包遇上NoClassDefFoundError & ClassNotFoundException

    类之前初始化失败过 ?...线索2+线索3 -> Crash的触发操作:第一次创建Activity对象(BaseActivity是所有Activity的基类) 结论:根本原因在于推论1:“BaseActivity类之前初始化失败过...---- 偶然发现重要线索 BaseActivity.java类近期无修改,且常规测试也不能重现BaseActivity类初始化失败的场景,问题再次陷入僵局。...Crash的技术总结: 使用java类的静态变量时,会触发类的加载操作,类加载过程会初始化类的所有静态变量,如果静态变量初始化失败,将导致类加载失败,并抛出java.lang.ExceptionInInitializerError...异常 若类加载java.lang.ExceptionInInitializerError异常被try/catch住,下次new类对象时将产生java.lang.NoClassDefFoundError异常

    2.4K90

    由初始化线程池引发的NoClassDefFoundError 异常分析

    Java 虚拟机无法在运行时找到一个在编译时可用的特定类。如果在编译时存在类, 但在运行时 java 类路径中不可用。...这个线程池工具类在本地以及测试环境和线上环境一直都运行的没有问题,因为报错的异常信息指向了这个类。...考虑到在多个客户部署的都是同一套代码,只有硬件配置可能不同,而我们线程池初始化时的核心线程数依赖于硬件CPU核数,所以便猜测初始化线程池出了问题,核心线程数可能比最大线程数还大。...这里意思是初始化过程时,如果这个类是用c去实现的,且初始化抛出异常时,都会对外抛出NoClassDefFoundError 异常,到了这里就很明朗了,果然是初始化线程池搞错了。...不过通过这次异常也学到了很多: 1,能不用硬编码的应该坚决杜绝,少埋这种坑。 2,多查文档,多查官方文档。 由于博主能力有限,所以如果您有更多的见解还请留言告知,不胜感激。

    61120

    当dex分包遇上NoClassDefFoundError&ClassNotFoundException

    类之前初始化失败过 线索2+线索3 -> Crash的触发操作:第一次创建Activity对象(BaseActivity是所有Activity的基类) 结论:根本原因在于推论1:“BaseActivity...类之前初始化失败过”。...---- 偶然发现重要线索 BaseActivity.java类近期无修改,且常规测试也不能重现BaseActivity类初始化失败的场景,问题再次陷入僵局。...Crash的技术总结: 使用java类的静态变量时,会触发类的加载操作,类加载过程会初始化类的所有静态变量,如果静态变量初始化失败,将导致类加载失败,并抛出java.lang.ExceptionInInitializerError...异常 若类加载java.lang.ExceptionInInitializerError异常被try/catch住,下次new类对象时将产生java.lang.NoClassDefFoundError异常

    63820

    一文读懂Java虚拟机类加载机制

    Java虚拟机的类加载过程包括加载、连接和初始化三个阶段。1....2.2 准备(Preparation)准备阶段为类变量(静态变量)分配内存并设置默认初始值,这里将分配的内存初始化为零值。这里不包括对常量的初始化,常量的初始化将在初始化阶段进行。...初始化(Initialization)初始化阶段是类加载过程的最后一步,它是类加载过程的触发点,也是执行类构造器()方法的步骤。...在类的初始化阶段,虚拟机会按照以下顺序执行:如果类的直接父类还没有被初始化,则先触发其初始化。执行类的静态变量赋值语句和静态代码块,按照代码在源文件中的顺序执行。...,而NoClassDefFoundError表示某个类在运行时的依赖无法找到。

    394101

    常见加载类错误分析

    在执行 Java程序时经常会碰到ClassNotFoundException和NoClassDefFoundError两个异常,它们都和类加载有关,下面详细分一下这两个异常的原因。...NoClassDefFoundError是另一个经常遇到的异常,这个异常在第一次使用命令执行Java类时很可能会碰到,如下面这种情况 java -cp example.jar Examper 在这个jar...这是因为你在命令行中没有加类的包名,正确的写法是这样的 java cp example.jar net.xx.Example 在JVM的规范中描述了出现NoClassDefFoundError可能的情况就是使用...如果初始化器抛出一些Excepton,而且Exception类不是Error或者它的某个子类,那么就会创建ExceptioinInInitializerError类的一个新实例,并用Exception作为参数...; System.out.println(integer); } } 这段代码在执行时报错如下: java.lang.ExceptionInInitializerError 在初始化这个类时

    1.1K20
    领券