黑马程序员_类加载器
来源:互联网 发布:qq神枪手刷枪软件 编辑:程序博客网 时间:2024/05/19 03:46
------- android培训、java培训、期待与您交流!---------
一、类加载器的树状结构
引导类加载器(bootstrap class loader):它用来加载 Java 的核心库,是用原生代码来实现的,并不继承自 java.lang.ClassLoader。
扩展类加载器(extensions class loader):它用来加载 Java 的扩展库。Java 虚拟机的实现会提供一个扩展库目录。该类加载器在此目录里面查找并加载 Java 类。
系统类加载器(system class loader):它根据 Java 应用的类路径(CLASSPATH)来加载 Java 类。一般来说,Java 应用的类都是由它来完成加载的。可以通过 ClassLoader.getSystemClassLoader() 来获取它。
二、类加载器的常用方法
ClassLoader 中与加载类相关的方法方法:
getParent() 返回该类加载器的父类加载器。
loadClass(String name) 加载名称为 name 的类,返回的结果是 java.lang.Class 类的实例。
findClass(String name) 查找名称为 name 的类,返回的结果是 java.lang.Class 类的实例。
findLoadedClass(String name) 查找名称为 name 的已经被加载过的类,返回的结果是 java.lang.Class 类的实例。
defineClass(String name, byte[] b, int off, int len) 把字节数组 b 中的内容转换成 Java 类,返回的结果是 java.lang.Class 类 的实例。这个方法被声明为 final 的。
resolveClass(Class<?> c) 链接指定的 Java 类。
三、类加载器的委托机制
当Java虚拟机要加载一个类时,到底派出哪个类加载器去加载呢?
1、当前线程的类加载器去加载线程中的第一个类。
2、如果类A中引用了类B,Java虚拟机将使用加载类A的类装载器来加载类B。
3、还可以直接调用ClassLoader.loadClass()方法来指定某个类加载器去加载某个类。
每个类加载器加载类时,又先委托给其上级类加载器。
当所有祖宗类加载器没有加载到类,回到发起者类加载器,还加载不了,则抛ClassNotFoundException,不是再去找发起者类加载器的儿子,因为没有getChild方法,即使有,多个儿子,不知道找哪一个。
线程上下文类加载器(context class loader)是从 JDK 1.2 开始引入的。类 java.lang.Thread 中的方法 getContextClassLoader() 和setContextClassLoader(ClassLoader cl) 用来获取和设置线程的上下文类加载器。如果没有通过 setContextClassLoader(ClassLoader cl) 方法进行设置的话,线程将继承其父线程的上下文类加载器。
四、类加载器的自定义
public class MyClassLoader extends ClassLoader{//从ClassLoader派生@Overrideprotected Class<?> findClass(String name) throws ClassNotFoundException {String classFileName = classDir + "\\" + name.substring(name.lastIndexOf('.')+1) + ".class";try {FileInputStream fis = new FileInputStream(classFileName);ByteArrayOutputStream bos = new ByteArrayOutputStream();cypher(fis,bos);fis.close();System.out.println("aaa");byte[] bytes = bos.toByteArray();//从流变成byte数组,之后用byte数组定义类return defineClass(bytes, 0, bytes.length); //更新的函数为defineClass(String className,byte[] b,int off,int length)
------- android培训、java培训、期待与您交流!---------
- 黑马程序员_类加载器
- 黑马程序员_类加载器
- 黑马程序员_类加载器
- 黑马程序员_高新技术(类加载器)
- 黑马程序员_类加载器
- 黑马程序员_类加载器
- 黑马程序员高薪_类加载器
- 黑马程序员_类加载器
- 黑马程序员_类加载器
- 黑马程序员_类加载器、代理
- 黑马程序员_类加载器
- 黑马程序员_类加载器
- 黑马程序员_关于类加载器
- 黑马程序员_类加载器
- 黑马程序员_高新技术类加载器
- 黑马程序员-->14_类加载器
- 黑马程序员09_类加载器
- 黑马程序员_类加载器
- zip()函数用法举例
- javase的复习-------3
- MyEclipse10/2013破解过程
- 修改Oracle 10g的字符集
- 如何高效设计游戏——塔防游戏设计方案
- 黑马程序员_类加载器
- Activity has leaked window com.android.internal.policy.impl.PhoneWindow$DecorVie
- 数据结构中,二叉树用到的算法代码综合
- 【Java编程基础】Chapter 1:认识Java
- hdu 1995 汉诺塔V
- nginx subrequest程序示例
- 26岁
- hdu 完数
- android openGL ES2 一切从绘制纹理开始