小谈反射机制
来源:互联网 发布:ubuntu上安装mysql5.7 编辑:程序博客网 时间:2024/05/20 07:52
反射机制是java中经常用到的,特别是在J2EE框架中,基本上都会有用到它。
要弄清楚反射机制,首先要清除lang包中的两个类ClassLoader和Class。
ClassLoader:
我们知道java程序编译成class文件之后,就回杯load到code segment区,但是这个load的过程并不是一次性完成的。
首先,class文件不会一次性加载,而是会在需要的时候杯加载,也就是所谓的动态加载(static语句块加载后只执行一次)。在JDK中,会有很多种的classloader,如Bootstrap
ClassLoader,Externsion ClassLoader,App ClassLoader等等,这些加载器(除了Bootstrap ClassLoader)都继承自ClassLoader,作用各不相同。
Bootstrap ClassLoader:这个是加载的基础类,主要就是加载的核心class(核心库):rt.jar,resources.jar...
Extension ClassLoader:顾名思义,这个就是用来加载ext路径下的class(拓展库)
App ClassLoader:负责加载当前java application的Classpath的所有类Class Loader是一个非常注重等级尊严的家族,有很“森严”的等级制度。
先说下这3个类加载器的关系,Bootstrap ClassLoader是Extension ClassLoader的parenrt,Extension ClassLoader是App ClassLoader的parent,注意这里不是继承关系,这里的三个指的是对象之间的关系。可以理解为App ClassLoader对象中有一个引用指向Extension ClassLoader,而Extension ClassLoader对象有一个引用指向Bootstrap ClassLoader,而Bootstrap ClassLoader是没有parent的。(ClassLoader有getParent()方法可以测试)。
加载过程(加载机制):程序编译生成class文件,会首先被APP ClassLoader加载,他在加载之前会首先根据parent引用判断parent ClassLoade是否已经加载此类,如果加载了,他就不加载,如果没有加载,并且parent ClassLoade还有parent引用,会看他的上一级ClassLoader是否加载,如此下去,如果 都没有加载这个Class,App Classloder才会加载此类。这里也就是所谓的“森严”。举个例子,我们 声明一个String对象,他应该是被App ClassLoader加载,但是他会”咨询“他的parent ClassLoader有没有加载,因为在Bootstrap Classloder已经加载,所以不会被其他加载器加载。这种机制会使得封装很严密,很好的保护java程序。
Class
- 小谈反射机制
- 反射机制小Demo
- reflect反射机制小测试
- C#反射机制小运用
- Java反射机制小例子
- JAVA中的反射机制几个小用法
- 反射机制的一个小实例
- Java笔记-反射机制(三)-小demo
- 谈Java反射机制
- 数组反射机制的应用小例------getComponentType
- JAVA 反射机制,invoke调用用法一个小的用法
- 反射机制
- 反射机制
- 反射机制
- 反射机制
- 反射机制
- 反射机制
- 反射机制
- C++中不能被声明为虚函数的函数
- Objective-C 学习笔记 12 预处理程序
- OC-字符串集合补充
- 测试基础 黑盒测试
- 让Linq的OrderBy支持动态字段
- 小谈反射机制
- 黑马程序员-------C语言----指针做函数参数
- 修改编辑框禁用状态文字颜色的方法
- 动态规划:从新手到专家
- 自学QT之数字时钟
- 页面整体布局
- 第十四篇:OC中block存储代码块的定义与应用
- 表格
- 【软考2】Java语言的基本知识汇总