8.类的加载器
来源:互联网 发布:解析json数组对象 编辑:程序博客网 时间:2024/05/17 07:26
作用:将类的字节码加载到jvm中,并进行一些处理.
系统默认的类加载器:
类加载器也是一个类,类加载器是由BootStrap加载的,它是嵌套在内核中的一段二进制代码,由c++编写的.
类加载器 加载范围
BootStrap ---> JRE/lib/rt.jar
ExtClassLoader ---> JRE/lib/ext/*.jar
AppClassLoader---> CLASSPATH指定的所有jar或目录
类加载器的委托机制
java虚拟机要加载一个类时,到底派出哪个类加载器去加载?
(1)由当前线程的类加载器加载线程中的第一个类
(2)如果类A中引用了类B,Java虚拟机使用加载类的A的类加载器加载B
(3)还可以使用ClassLoader.loadClass()方法指定某个类加载器去加载某个类
系统默认的类加载器的委托机制:
当前线程使用AppClassLoader加载器,AppClassLoader委托给ExtClassLoader,ExtClassLoader委托给BootStrap,
BootStrap在JRE/lib/rt.jar查找,如果类存放在该目录下就加载,否则让ExtClassLoader在JRE/lib/ext/*.jar
目录下查找,有就加载,否则让AppClassLoader在CLASSPATH指定的所有jar或目录查找,有就加载,没有就抛出异常.
委托机制的优点:加载器之间相互联系,形成一种加载机制,避免了多个加载同时加载同一类或jar包,保证jvm中只有一份字节码文件.
编写自定义的类加载器
模板方法设计模式
ClassLoader类的介绍
Class<?> loadClass(String name)
使用指定的二进制名称来加载类。 //内部方法采用委托机制会自动调用类加载器的父类,当返回时再调用findClass()方法
protected Class<?> findClass(String name)
使用指定的二进制名称查找类。
protected Class<?> defineClass(String name, byte[] b, int off, int len)
调用顺序 父类加载器--返回-->loadClass()--调用-->findClass()--二进制数据返回字节码文件-->defineClass()
创建自定义的类加载器:
(1)继承ClassLoader
(2)重写findClass()方法
如何使用自定义额加载器
Class c=new 自定义类加载器类名().loadClass("指定加载的类");//通过使用自定义类加载器获得指定类的字节码文件对象
系统默认的类加载器:
类加载器也是一个类,类加载器是由BootStrap加载的,它是嵌套在内核中的一段二进制代码,由c++编写的.
类加载器 加载范围
BootStrap ---> JRE/lib/rt.jar
ExtClassLoader ---> JRE/lib/ext/*.jar
AppClassLoader---> CLASSPATH指定的所有jar或目录
类加载器的委托机制
java虚拟机要加载一个类时,到底派出哪个类加载器去加载?
(1)由当前线程的类加载器加载线程中的第一个类
(2)如果类A中引用了类B,Java虚拟机使用加载类的A的类加载器加载B
(3)还可以使用ClassLoader.loadClass()方法指定某个类加载器去加载某个类
系统默认的类加载器的委托机制:
当前线程使用AppClassLoader加载器,AppClassLoader委托给ExtClassLoader,ExtClassLoader委托给BootStrap,
BootStrap在JRE/lib/rt.jar查找,如果类存放在该目录下就加载,否则让ExtClassLoader在JRE/lib/ext/*.jar
目录下查找,有就加载,否则让AppClassLoader在CLASSPATH指定的所有jar或目录查找,有就加载,没有就抛出异常.
委托机制的优点:加载器之间相互联系,形成一种加载机制,避免了多个加载同时加载同一类或jar包,保证jvm中只有一份字节码文件.
编写自定义的类加载器
模板方法设计模式
ClassLoader类的介绍
Class<?> loadClass(String name)
使用指定的二进制名称来加载类。 //内部方法采用委托机制会自动调用类加载器的父类,当返回时再调用findClass()方法
protected Class<?> findClass(String name)
使用指定的二进制名称查找类。
protected Class<?> defineClass(String name, byte[] b, int off, int len)
调用顺序 父类加载器--返回-->loadClass()--调用-->findClass()--二进制数据返回字节码文件-->defineClass()
创建自定义的类加载器:
(1)继承ClassLoader
(2)重写findClass()方法
如何使用自定义额加载器
Class c=new 自定义类加载器类名().loadClass("指定加载的类");//通过使用自定义类加载器获得指定类的字节码文件对象
- 8.类的加载器
- 类加载器的加载机制
- 扩展类加载器的加载问题
- java类加载器的加载顺序
- 类的加载器
- 类加载器的收获
- Tomcat的类加载器
- Tomcat的类加载器
- 类加载器的应用
- Java的类加载器
- Java的类加载器
- Tomcat的类加载器
- Java的类加载器
- 类加载器的学习
- jvm的类加载器
- jvm的类加载器
- JAVA 类的加载器
- Java的类加载器
- FIREBIRD/INTERBASE部分内置函数使用说明
- CRM上线之路 走上了CRM实施顾问-第18天上班 -第五周
- Android Checkbox Example
- VAO(vertex array object)和VBO(vertex buffer object)的详解
- 7.注解(1.5新特性)
- 8.类的加载器
- action跳转页面css和js失效问题解决
- vector和list区别【转】
- Android平台简介 (开发者版本)
- vector,map,list,queue区别
- 小议网络营销与网站优化
- 9.银行业务调度系统的学习
- C++ STL简介
- (转) CvSeq相关操作函数