谈谈类加载器
时间:2022-07-28
本文章向大家介绍谈谈类加载器,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
之所以能获取该类的方法和属性,必须要获取该class对象,然后前提是必须获取该文件的字节码对象。
类从编译到执行的过程:
- 编译器将Robot.java源文件编译为Robot.class字节码文件
- ClassLoader将字节码转换为JVM中的Class<Robot>对象
- JVM利用Class<Robot>对象实例化为Robot对象
谈谈ClassLoader
ClassLoader在Java中有着非常重要的作用,它主要工作在Class装载的加载阶段,其主要作用是从系统外部获得Class二进制数据流。
它是Java的核心组件,所有的Class都是由ClassLoader进行加载的,ClassLoader负责通过将Class文件里的二进制数据流装载进系统,然后交给Java虚拟机进行连接、初始化等操作。
ClassLoader的种类
- BootStrapClassLoader: C++编写,记载核心库
java.*
- ExtClassLoader:Java编写,加载扩展库
javax.*
,用户可见。 - AppClassLoader:Java编写,加载程序所在目录。用户可见
- 自定义ClassLoader:Java编写,定制化加载。
自定义ClassLoader的实现
关键函数:
findclass
、defineclass
谈谈类加载器的双亲委派机制
为什么要使用双亲委派机制去加载类
- 避免多份同样字节码的加载
类的加载方式
- 隐式加载:new方式生成的类
- 显式加载:loadClass,forName等方法显式加载需要的类,需要调用newInstance来生成相对应类的实例
loadClass和forName的区别
同样都能知道任意方法和属性,但是发生的位置不同。
- Class.forName得到的class是已经初始化完成的
- Classloder.loadClass得到的class是还没有链接的
PS:连接MySQL数据库应该调用forName,创建数据库驱动 Spring中资源加载器要获取要读入的资源时,读写bean的配置文件时,如果是以classpath的方式加载,就需要使用Classloder.loadClass,之所以这样做,和Spring AOC的lazy loading有关,延迟加载,为了加快类的初始化速度,加快加载速度。
- linux下搭建django记录笔记,未完稿,节后继续
- Java案例-打印图形与π
- 关于两个简单问题的分析(r9笔记第10天)
- 初步解读Golang中的接口相关编写方法
- Go语言获取Windows下文件是否隐藏
- Java案例-求a+aa+aaa+.......+aaaaaaaaa=?
- 【Go 语言社区】算法课程 第一季 第6节 建立三角形
- 最近的几个技术问题总结和答疑(五)(r9笔记第9天)
- hive学习笔记——Hive表中数据的导入和导出
- Java案例-求和与打印九九乘法表
- hive学习笔记——Hive表的创建
- 和开发讨论的一个数据变更需求(r9笔记第8天)
- Java案例-分数查等级程序
- Go语言的标准输入-scan 和bufio
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法