Java类加载机制中,如何分析类实例的初始化过程?

2026-06-10 12:272阅读0评论SEO教程
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计924个文字,预计阅读时间需要4分钟。

Java类加载机制中,如何分析类实例的初始化过程?

原文:本文字例讲述了Java类的加载连接和初始化。分享给大众,供大众参考,具体如下:+一点磨1类加载+当程序主动使用某个类时,如果该类尚未被加载到内存中,系统会通过加载、连接、初始化三步完成类的加载。

改写后:本文简要介绍了Java类的加载和初始化过程。供大家参考,内容如下:当程序使用某类时,若该类未在内存中,系统将执行加载、连接、初始化三个步骤来完成类的加载。

本文实例讲述了Java类的加载连接和初始化。分享给大家供大家参考,具体如下:

Java类加载机制中,如何分析类实例的初始化过程?

一 点睛

1 类加载

当程序主动使用某个类时,如果该类还未被加载到内存中,系统会通过加载、连接、初始化三个步骤来对该类进行初始化,如果没有意外,JVM将会连续完成这三个步骤,所以有时也把这三个步骤统称为类加载或类初始化。

类加载指的是将类的class文件读入内存,并为之创建一个java.lang.Class对象,也就是说当程序使用任何类时,系统都会为之建立一个java.lang.Class对象。

2 类数据的来源

通过使用不同的类加载器,可以从不同来源加载类的二进制数据,通常有如下几种来源:

从本地文件系统来加载class文件,这是绝大部分类加载方式。

从JAR包中加载class文件,这种方式也是很常见的,ODBC编程时用到的数据库驱动类就是放在JAR文件中,JVM可以从JAR文件中直接加载该class文件。

通过网络加载class文件。

把一个Java源文件动态编译、并执行加载。

3 类的连接

当类被加载之后,系统为之生成一个对应的Class对象,接着将会进入连接阶段,连接阶段将会负责把类的二进制数据合并到JRE中。类连接又可分为如下三个阶段:

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

4 类的初始化

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

声明静态属性时指定初始值。

使用静态初始化块为静态属性指定初始值。

5 JVM初始化类的步骤

5.1 假如这个类还没有被加载和连接,程序先加载并连接该类。

5.2 假如该类的直接父类还没有被初始化,则先初始化其直接父类。

5.3 假如类中有初始化语句,则系统依次执行这些初始化语句。

二 实战

1 代码

public class Test { static { // 使用静态初始化块为变量b指定出初始值 b = 6; System.out.println("----------"); } // 声明变量a时指定初始值 static int a = 5; static int b = 9; // ① static int c; public static void main(String[] args) { System.out.println(Test.b); } }

2 运行

----------
9

更多java相关内容感兴趣的读者可查看本站专题:《Java面向对象程序设计入门与进阶教程》、《Java数据结构与算法教程》、《Java操作DOM节点技巧总结》、《Java文件与目录操作技巧汇总》和《Java缓存操作技巧汇总》

希望本文所述对大家java程序设计有所帮助。

本文共计924个文字,预计阅读时间需要4分钟。

Java类加载机制中,如何分析类实例的初始化过程?

原文:本文字例讲述了Java类的加载连接和初始化。分享给大众,供大众参考,具体如下:+一点磨1类加载+当程序主动使用某个类时,如果该类尚未被加载到内存中,系统会通过加载、连接、初始化三步完成类的加载。

改写后:本文简要介绍了Java类的加载和初始化过程。供大家参考,内容如下:当程序使用某类时,若该类未在内存中,系统将执行加载、连接、初始化三个步骤来完成类的加载。

本文实例讲述了Java类的加载连接和初始化。分享给大家供大家参考,具体如下:

Java类加载机制中,如何分析类实例的初始化过程?

一 点睛

1 类加载

当程序主动使用某个类时,如果该类还未被加载到内存中,系统会通过加载、连接、初始化三个步骤来对该类进行初始化,如果没有意外,JVM将会连续完成这三个步骤,所以有时也把这三个步骤统称为类加载或类初始化。

类加载指的是将类的class文件读入内存,并为之创建一个java.lang.Class对象,也就是说当程序使用任何类时,系统都会为之建立一个java.lang.Class对象。

2 类数据的来源

通过使用不同的类加载器,可以从不同来源加载类的二进制数据,通常有如下几种来源:

从本地文件系统来加载class文件,这是绝大部分类加载方式。

从JAR包中加载class文件,这种方式也是很常见的,ODBC编程时用到的数据库驱动类就是放在JAR文件中,JVM可以从JAR文件中直接加载该class文件。

通过网络加载class文件。

把一个Java源文件动态编译、并执行加载。

3 类的连接

当类被加载之后,系统为之生成一个对应的Class对象,接着将会进入连接阶段,连接阶段将会负责把类的二进制数据合并到JRE中。类连接又可分为如下三个阶段:

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

4 类的初始化

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

声明静态属性时指定初始值。

使用静态初始化块为静态属性指定初始值。

5 JVM初始化类的步骤

5.1 假如这个类还没有被加载和连接,程序先加载并连接该类。

5.2 假如该类的直接父类还没有被初始化,则先初始化其直接父类。

5.3 假如类中有初始化语句,则系统依次执行这些初始化语句。

二 实战

1 代码

public class Test { static { // 使用静态初始化块为变量b指定出初始值 b = 6; System.out.println("----------"); } // 声明变量a时指定初始值 static int a = 5; static int b = 9; // ① static int c; public static void main(String[] args) { System.out.println(Test.b); } }

2 运行

----------
9

更多java相关内容感兴趣的读者可查看本站专题:《Java面向对象程序设计入门与进阶教程》、《Java数据结构与算法教程》、《Java操作DOM节点技巧总结》、《Java文件与目录操作技巧汇总》和《Java缓存操作技巧汇总》

希望本文所述对大家java程序设计有所帮助。