JAVA学习之反射——类加载
来源:互联网 发布:万方数据库步骤 编辑:程序博客网 时间:2024/05/24 04:31
类加载就是将类的class文件读入内存,并为之创建一个java.lang.Class对象。
1.类的初始化的时机
(1)创建类的实例:通过new操作符来创建实例,通过反射来创建实例,通过反序列创建。
(2)调用某个类的静态方法
(3)初始化某个类的子类,当初始化某个类的子类时,该子类的所有父类也同时会被初始化
需要注意的是:
对于final型的静态属性,如果该属性可以在编译时得到属性值,则可认为该属性是编译时属性,不会导致该类的初始化。例如:
class Tester {static{System.out.println("Tester类的静态初始化块);}static final String comileConstant="初始化";}public void TestCompileConstant{public static void main(String[] args){System.out.println(Tester.comileConstant);}}
运行下面的程序,由于变量在编译时就被替换了,所以上面的程序并不能实现对Tester的初始化
反之,如果final类型的静态属性的值不能在编译时就确定,必须等到运行时才能确定。则将会导致该类被初始化。
class Tester {static{System.out.println("Tester类的静态初始化块);}static final String comileConstant=System.currentTimeMillis()+"";}public void TestCompileConstant{public static void main(String[] args){System.out.println(Tester.comileConstant);}}
2.类加载器
类加载器有三个层次:Bootstrap ClassLoader根类加载器,Extension ClassLoader扩展类加载器,System ClassLoader系统类加载器
System ClassLoader:加载路径是程序运行的当前路径
Extension ClassLoader:一般在ext文件夹下C:\Program Files\Java\jre1.8.0_20\lib\ext;
Bootstrap ClassLoader:负责加载JAVA的核心类
3.自定义加载器
自定义加载器感觉比较复杂,所以就介绍几个重要的方法吧
(1)loadClass(String name,boolean resolve)该方法是ClassLoader的入口,根据指定的二进制名称加载类,系统就是调用该方法获取指定类的Class对象
(2)findClass(String name)根据二进制名称查找类
(3)Class defineClass(String name,byte[] b,int off,int len)该方法可以将指定类的字节码文件(即class文件)读入字节数组,并把它转化为Class对象
loadClass的执行步骤:
(1)用findLoaderClass()检查是否已经加载,如果已经加载则直接返回
(2)在父类加载器上调用loadClass方法,
(3)调用findClass来查找类
所以在自定义加载类时,一般都是重写findClass方法
- JAVA学习之反射——类加载
- 黑马程序员——【Java反射学习】动态加载类
- 20、Java入门—反射之动态加载类
- java反射学习笔记之 动态加载类
- Java反射——动态加载类
- 反射 学习笔记之动态加载类
- java反射之动态加载类
- JAVA反射之动态加载类
- java之反射及类的加载
- 黑马程序员之java类加载器和java中的反射机制学习
- Java基础学习第二十七天——类加载器和反射
- Java反射学习总结(2)——动态加载类
- #Java 类加载 反射
- JAVA反射学习之——基本学习
- Java学习之反射
- java学习之反射
- java学习之反射
- Java学习之反射
- MFC多线程中创建对话框(create)出错(异常)问题的分析及解决办法
- Code Jam--Good Luck
- Android中处理崩溃异常
- 简明 Python 编程规范v2
- 【转】eclipse 上调试android framework的@hide的方法
- JAVA学习之反射——类加载
- jQuery动画高级用法(上)——详解animation中的.queue()函数
- visuall assist x 破解方法
- 初创公司怎么设置股权结构?
- yii 自定义挂件
- 纪念shop.jsp
- C++ builder调用vc编写的动态链接库的方法
- linux下查看磁盘剩余空间和文件夹大小
- Linux下调用system()函数导致的问题