类装载器工作机制:
类装载器就是寻找类的字节码文件并构造出类在JVM内部表示的对象组件。类装载器将类装入JVM中,要经过以下步骤:
1.装载:查找和导入class文件
2.链接:执行校验、准备、和解析步骤
校验:检查载入class文件数据的正确性
准备:给类的静态变量分配存储空间
解析:将符号引用转成直接引用。
3.初始化:对类的静态变量、静态代码块执行初始化工作。
类装载工作由classLoader及其子类负责。JVM在运行时会产生三个classLoader:根装载器、ExtClassLoader和appClassLoader。ExtClassLoader和appClassLoader都是ClassLoader的子类。其中ExtClassLoader负责装载JRE扩展目录ext中的jar类包。AppclassLoader负责装载classpath路径下的类包。
ClassLoader重要方法:
1.Class loadClass(String name)
2.Class defineClass(String name,byte[]b,int off,int len)
3.Class findLoaderClass(String name)
4.Class findSystemClass(String name)
5.ClassLoader getParent()
反射:
Constructor:类的构造函数反射类,通过getConstructors()或者getConstructor(Class parameterTypes)方法获取类的所有构造函数反射对象数组。
主要方法:newInstance(Object[] initargs)
Method:类方法反射类,通过getDeclaredMethods()或者getDeclaredMethod(String name,class parameterTypes)获取方法。
主要方法为:invoke(Object obj,Object[]args),obj表示操作的目标对象,args为方法入参。
其他方法:Class getReturnType();获取方法返回值类型
Class[] getParameterTypes();获取方法的入参类型数组
Class[] getExceptionTypes() 获取方法的异常类型数组
Field:类的成员变量反射类,通过getDeclaredFields()或者getDeclaredField(String name)方法获取类的成员变量数组或者特定类的成员变量反射对象。
主要方法:set(Object obj,Object value),obj表示操作的目标对象,value为目标对象的成员变量设置值。
例子:
public class PrivateCar {
private String color;
protected void drive(){
System.out.println("drive private car! the color is:"+color);
}
}
public class PrivateCarReflect {
public static void main(String[] args) throws Throwable{ ClassLoader loader = Thread.currentThread().getContextClassLoader();
Class clazz = loader.loadClass("com.baobaotao.reflect.PrivateCar");
PrivateCar pcar = (PrivateCar)clazz.newInstance();
Field colorFld = clazz.getDeclaredField("color");
colorFld.setAccessible(true);
colorFld.set(pcar,"红色");
Method driveMtd = clazz.getDeclaredMethod("drive",(Class[])null);
//Method driveMtd = clazz.getDeclaredMethod("drive"); JDK5.0下使用
driveMtd.setAccessible(true);
driveMtd.invoke(pcar,(Object[])null);
}
}
分享到:
相关推荐
类装载器ClassLoader1
主要讲述Java的类装载器和命名空间,ClassLoader/parent delegation模型
ClassLoader类加载器讲解,理解JAVA类加载机制
ClassLoader的API使用和自定义
ClassLoader类加载机制和原理详解
java应用程序类加载器(ClassLoader for java Application),类似exe4j, 方便启动java程序, 配置灵活,支持多平台选择性配置
内容简介: ClassLoader体系结构 类装载器在JVM中并不是唯一的,JVM自带了三个装载器,用户也可以根据自己的需求自定义新的装载器,这些装载器的体系结构可以看作是树状结构,如图1所示:
主要介绍了Java类加载器ClassLoader用法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
【图解版】深入分析ClassLoader类加载工作机制,从原理到JVM的装载过程,详情分析了ClassLoader加载类以及自定义类加载器的过程,不可用于商业用途,如有版权问题,请联系删除!
如果户创建的JAR放在此录下,也会动由扩展类加载器加载.应程序类加载器(系统类加载器,Application ClassLoader)java语编写,由sun.
java自定义类加载classloader文档,包括代码,以及详细的原理及过程
Java 虚拟机中ClassLoader 相关简介 双亲委托机制 Android 中ClassLoader 简介
一个开源的Cplusplus类加载器,基于它实现了一个简单的例子,见我写的classloader的文章。
类加载器是 Java 语言的一个创新,也是 ...不过如果遇到了需要与类加载器进行交互的情况,而对类加载器的机制又不是很了解的话,就很容易花大量的时间去调试 ClassNotFoundException和 NoClassDefFoundError等异常。
类的动态装载机制是JVM的一...本文介绍了JVM中类装载的原理、实现以及应用,尤其分析了ClassLoader的结构、用途以及如何利用自定义 的ClassLoader装载并执行Java类,希望能使读者对JVM中的类装载有一个比较深入的理解。
摘要视图订阅曹胜欢欢迎关注微信账号:java那些事:csh624366188.每天一篇java相关的文章登录 | 注册Java程序员从笨鸟到菜鸟(81)3054
重温java之classloader体系结构(含hotswap) 启动类加载器 扩展类加载器 系统类加载器
ClassLoader运行机制 自己写的ClassLoader运行机制 自己写的ClassLoader运行机制 自己写的ClassLoader运行机制 自己写的ClassLoader运行机制 自己写的
自定义classloader的使用