类的加载机制
来源:互联网 发布:简单的单片机设计作品 编辑:程序博客网 时间:2024/06/06 01:20
1.概述:虚拟机把class文件加载到内存,并对数据校验,解析,初始化,最终形成虚拟机可以直接使用的java类型;这就是虚拟机的类加载机制;其分为三部分,加载,连接,初始化并且都是在程序运行期间完成的,Java动态语言的扩展性就是依赖运行期动态加载和动态连接实现的。整个类的声明 周期为:加载--》连接(包括验证,准备,解析)--》初始化--》使用--》卸载
2.类的加载:类的加载由类加载器完成
a.类的来源:1.从本地加载class文件;2.通过网络加载class文件;3.从JAR包加载class文件;4.java源文件动态编译,并执行加载;
b.类加载器:1.JVM中,类用其全限定名和类加载器作为唯一标识;
2.三个类加载器结构:Bootstrap ClassLoader:根类加载器,负责加载核心java类,如Sting,System核心内裤;Extension ClassLoader:扩展类加载器,负责加载JER的扩展目录;System ClassLoader,系统类加载器,;
3.三种类加载机制:全盘负责;分类委托;缓存机制
类加载class大概过程如图:
3.类的连接:包括验证,准备,解析;
4.类的初始化:虚拟机负责对类进行初始化,主要是对类变量(static)进行初始化;对类变量指定初始值可以在①声明的时候指定②可以在静态初始化块中指定;这两种语句都被当做类的初始化语句,在初始化的时候按顺序执行他们;
a.初始化的三个步骤:①这个类还没有被加载和连接,先加载和连接;②该类的父类还没有被初始化,先初始化其父类,所以JVM最先初始化的是Object类;③如果类有初始化语句,就按顺序执行;
b.Java虚拟机指定了有且只有5种情况会对类进行初始化,这5种情况的场景是:
①使用new关键字实例化对象,读取或者设置类的静态字段(被final修饰,放入常量池的静态字段除外)调用静态方法的时候;
②反射方式创建java.lang.class对象时
③初始化某个类的子类,其父类自动初始化
④虚拟机启动,用户指定一个主类,main函数那个类,会被初始化;
⑤JDK1.7时,java.lang.invoke.MethodHandle实例最后的解析结果对应的类没有进行过初始化,则需要初始化;
初始化子类会先初始化父类。顺序为 父类静态——》子类静态——》父类非静态代码块——》父类构造方法——》子类非静态代码块——》子类构造方法。
参考1
参考2
例题
阅读全文
0 0
- 类的加载机制
- 类的加载机制
- 类的加载机制
- 类的加载机制
- 类的加载机制
- 类的加载机制
- 类的加载机制
- 类的加载机制
- 类的加载机制
- 类的加载机制
- 类的加载机制
- 类的加载机制
- 类加载器的加载机制
- java的类加载机制
- tomcat的类加载机制
- java的类加载机制
- Java的类加载机制
- 类的加载机制 1
- JAVA企业面试题精选 Servlet和JSP 1-10
- iOS使用AFN设置请求超时时间并做处理
- GPU学习网站
- [python3.6 flask web学习]Flask操作msql数据库
- html学习日记:div
- 类的加载机制
- 前端优化1--reflow
- 多个select的使用
- Markdown编辑器
- SQL TOP子句
- java web定时任务调度总结
- JDFZD3总结
- 【深度学习】【caffe实用工具5】笔记27 windows下SSD网络中的get_image_size工具的使用
- 404. Sum of Left Leaves