类的加载,连接和初始化
来源:互联网 发布:ubuntu 打字 编辑:程序博客网 时间:2024/05/29 13:51
类的加载,连接和初始化:
当程序主动使用某个类时,该类还没被加载到内存中,则系统会通过加装累加,初始化这三个步骤对该类进行初始化。这三个步骤一般都被称为类加载或者类初始化。指的是将类的class文件读入内存中,并为之创建一个java.lang.Class对象。
类的加载:
类的加载由类加载器完成,一般由jvm提供的类加载器,称为系统类加载器。开发中也可以通过继承ClassLoader基类来创建自己的类加载器。类加载器大致有以下几个加载来源:
- 本地文件系统加装class文件。
- 从JAR包加载class文件
- 通过网络加载文件
- 把一个java文件动态编译,并执行加载。
类的连接:
连接阶段负责把类的二进制数据合并到JRE中。
分为三个阶段:
- 验证:检验被加载的类是否有正确的内部结构,并和其他类协调一致。
- 准备:负责为类的类变量分配内存,设置初始值。
- 解析:将类的二进制数据中的符号替换成直接引用。
类的初始化:
在这一阶段,虚拟机对类进行初始化,主要是对类变量进行初始化。
JVM初始化一个类一般包括如下几个步骤:
- 假如这个类还没被加装和连接,则程序先加载并连接该类。
- 假如该类的直接父类没有被初始化,则先初始化父类。
- 假如类中有初始化语句,则系统依次执行这些初始化语句。
类初始化的时机:
- 创建类的实例
- 调用类的类方法
- 访问某个类或者接口的类变量,或者为该变量赋值。
- 使用反射机制来强制创建某个类或接口对应的java.lang.Class对象
- 初始化某个类的子类
- 使用java.exe来运行某个主类。
另外:对于一个final修饰的类变量,如果该类变量的值在编译的时就可以确定下来,那么这个类变量相当于“宏变量”,java编译器在编译时会直接帮这个类变量出现的地方替换成它的值,不会导致类初始化。如果不能在编译时候确定下来,则会导致该类被初始化。
阅读全文
0 0
- java类的加载、连接和初始化
- Java类的加载、连接和初始化
- 类的加载、连接和初始化:
- Java类的加载、连接和初始化
- 类的加载、连接和初始化
- 类的加载,连接和初始化
- 类的加载、连接和初始化---类的初始化
- 类的加载、连接和初始化---类的加载
- 类加载、连接和初始化
- 类的加载、连接和初始化---类的连接
- 类的加载连接初始化
- 类的加载连接初始化
- Java虚拟机的加载、连接和初始化
- Java虚拟机的加载、连接和初始化
- 【JVM】类加载、连接和初始化过程
- 类的加载,连接,初始化详解
- 类的加载,连接,初始化详解
- 类的加载,连接,初始化详解
- Netty 实现HTTP文件服务器
- Harmonic Value Description HDU
- HDU 1028 Ignatius and the Princess III(DP,整数划分)
- ubuntu下安装redis
- [leetcode] 43. Multiply Strings(大数相乘)
- 类的加载,连接和初始化
- ECharts | 改变 yAxis y轴的刻度
- Linux应用与发展
- opencv实现行人检测(C++)
- 机器学习教程之8-机器学习系统的设计(Machine Learning System Design)
- 图像处理项目-监控视频的行人追踪
- HDU6129 Just do it【规律】
- JVM 参数使用总结
- 物联网笔记-----------Django单元测试,Django bug(二)