美文网首页
二、类的加载、连接、初始化

二、类的加载、连接、初始化

作者: 社会yang | 来源:发表于2019-11-28 10:54 被阅读0次

可以类的加载可以从通过以下几种方式加载:

1):从本地系统中直接加载

2):通过网络下载class文件

3):从zip、jar等归档文件中加载class文件

4):从专有的数据库中加载class文件

5):将Java源文件动态的编译为class文件并加载(动态代理、jsp)

类的加载详细定义

类的加载指的是将类的.class文件的数据导入到内存中,将其放置到运行时数据区的方法区内,然后在创建一个java.lang.Class对象用来封装类在方法区内的数据结构(java虚拟机的规范并未要求该Class对象放在哪个区域,hotspot将该对象放在了方法区)

java程序对类的使用方式

主动使用

被动使用

java虚拟规范要求:所有java虚拟机实现每个类或者接口在被java程序 "首次主动使用" 时才初始化他们(注意此处是初始化不是加载或连接)

主动使用主要包含以下6种:

1):创建类的实列(new对象的时候)

2):访问类或接口的静态变量或者为该静态变量赋值

3):调用类的静态方法

4):反射(如Class.forName)

5):初始化该类的子类会自动初始化父类

6):java虚拟机启动时标明为启动内的(及main方法所在的类)

类的主动加载的举例说明

运行第6行结果为:

parent init

str

运行第7行,注释第6行,结果为:

parent init

child init

str1

通过结果可以得知运行第6行时没有加载子类,因为值使用了父类的静态变量不满足对子类的主动使用,属于对子类的被动使用

运行第7行,因为使用了子类的静态变量会初始化子类同时也会初始化父类

疑问: 运行第6行的时候到底Child有没有加载呢?

可以通过 -XX:+TraceClassLoading 用于追踪类的加载过程,查看 Child类是否加载,最终可以观察到Child类会加载

常用的开启虚拟机打印的命令:

-XX:+<option>        表示开始option选项

-XX:-<option>        表示关闭option选项

-XX:<option>=<value>    表示设置option的值为value

类连接过程中,变量的准备阶段用法

此时结果都为1,没什么问题

此时说明,当完成准备阶段后,变量都有默认的初始值,进行初始化的时候程序是按照顺序执行的,当执行到第4行时count2只完成了准备阶段还没完成初始化所以此时 count2为0,最终为count2进行初始化的时候又重新设置为0了

相关文章

  • 类加载连接初始化阶段

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

  • 类加载

    一、类加载器 二、类加载过程 加载 连接 验证 准备 解析 初始化

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

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

  • JVM内存模型

    1、类的加载、连接和初始化 加载:查找并加载类的二进制数据(字节码文件) 连接: 验证:确...

  • ClassLoader

    1. 类的加载、连接、初始化 加载:查找并加载类的二进制数据 连接:-- 验证: 确保被加载类的正确性-- 准备:...

  • 01-类加载过程

    类加载过程 类加载可以分为加载、连接、初始化3个部分 加载 加载过程是指查找并加载类的二进制数据,加载class文...

  • 反射

    类加载器:加载过程 加载,连接,初始化 分类: Bootstrap ClassLoader 根类加载器:核心类的加...

  • 类的加载过程

    类的加载过程 类的加载过程分为三个主要阶段:加载阶段、连接阶段、初始化阶段 加载阶段:负责加载类的二进制数据文件,...

  • 初识反射

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

  • JVM(五)类的初始化

    类的初始化 类的初始化步骤 假如类还未被加载和连接,那就先进行加载和连接 假如类存在直接父类,并且这个父类还未被初...

网友评论

      本文标题:二、类的加载、连接、初始化

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