美文网首页
Java 类的加载、连接、初始化详解

Java 类的加载、连接、初始化详解

作者: zivxia | 来源:发表于2018-03-26 14:59 被阅读39次

当程序主动调用某个类时,如果这个类还未被加载到内存,系统会通过加载、连接、初始化三个步骤对这个类进行初始化。在这之前,我们先讲下类编译的概念:

编译

java类的编译是将.java文件转化为.class二进制文件,使用javac test.java就可编译成test.class文件。

加载

java类的加载是将class文件通过类加载器加载到内存中,并且为之生成Class对象,也就是说当程序被加载到内存时,系统都会为之建立一个Class对象。所有类都是java.lang.Class的实例。
类的加载通常由类加载器完成,类加载器通常由jvm提供,这些类加载器也是我们前面所有程序运行的基础,jvm提供的这些类加载器通常被称为系统类加载器。

连接

java类的连接是将二进制class数据合并到JRE中,类的连接又分为三个阶段

  • 1.验证:验证阶段用于检验被加载的类是否有正确的内部结构,并和其他类协调一致
  • 2.准备:类准备阶段则负责为类的静态属性分配内存,并设置默认初始值。
  • 3.解析:将类的二进制数据中的符号替换直接引用。

初始化

在类的初始化阶段,虚拟机负责对类进行初始化,主要是对静态属性进行初始化。在java类中对静态属性指定初始值有两种方式:

  • 1.声明静态属性时指定初始值
  • 2.使用静态初始化块为静态属性指定初始值。
类初始化的时机
  • 创建类的实例。为某个类创建实例的方式包括使用new操作符来创建实例,通过反射来创建实例,通过反序列化的方式来创建实例。
  • 调用某个类的静态方法。
  • 访问某个类或接口的静态属性,或为该静态属性赋值。
  • 使用反射方式来强制创建某个类或接口对应的java.lang.Class对象。
  • 初始化某个类的子类,当初始化某个类的子类时,该子类的所有父类都会被初始化。
  • 直接使用java.exe命令来运行某个主类,当运行某个主类时程序会先初始化这个主类。
    除此之外,下面有几种情形需要特别指出:
    对于一个final型的静态属性,如果该属性可以在编译时就得到属性值,则可认为该属性可被当成编译时的常量。当程序使用编译时常量时,系统会认为这是对该类的被动使用,所以不会导致该类的初始化。反之,如果final类型的静态属性的值不能在编译时得到,必须等到运行时才可以确定该属性的值,如果通过该类来访问该静态属性,则可以认为是主动访问使用该类,将会导致类被初始化。

相关文章

  • 第五课、类的加载连接与初始化过程详解

    类的加载、连接与初始化过程详解 类的加载、连接与初始化 1、过程:加载-->连接(验证-->准备-->解析) --...

  • 初识反射

    Java类的加载,连接和初始化 当程序主动使用某个类时,如果该类还未被加载到内存中,则系统会通过加载、连接、初始化...

  • 1.类加载器一:类的加载连接与初始化过程详解

    pre:jvm常见小工具的使用 小工具2 jvisualvm 类的加载连接与初始化过程详解 在java代码中,类型...

  • Java类加载与反射

    Java类加载与反射 类加载、连接、初始化 JVM和类 当运行某个Java程序时,将会启动一个Java虚拟机进程,...

  • Java 类的加载、连接、初始化详解

    当程序主动调用某个类时,如果这个类还未被加载到内存,系统会通过加载、连接、初始化三个步骤对这个类进行初始化。在这之...

  • 类加载连接初始化阶段

    一、类的生命周期和加载阶段概述 类的生命周期 类的加载连接初始化过程 二、类的加载连接初始化详细过程  加载 使用...

  • 类加载机制之初始化

    Java类加载分为5个过程,分别为:加载,连接(验证、准备、解析),初始化。 一、static变量的赋值在类的初始...

  • 类的加载阶段

    一、类加载  类加载:将类型加载至内存中,并完成相应的初始化。在Java中,该过程分为三个子阶段:加载、连接、初始...

  • JVM-类加载器深入解析与阶段分解

    1.在java代码中,类型(类,接口,枚举)的加载(从磁盘加载到内存),连接(类与类之间调用关系)与初始化(静态变...

  • JAVA类加载机制

    jvm之java类加载机制和类加载器(ClassLoader)的详解java类加载机制:全盘负责、双亲委派、缓存机...

网友评论

      本文标题:Java 类的加载、连接、初始化详解

      本文链接:https://www.haomeiwen.com/subject/plpaqftx.html