`

反射和类装载器ClassLoader

阅读更多
  类装载器工作机制:

  类装载器就是寻找类的字节码文件并构造出类在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);   
  }
}
       
2
0
分享到:
评论

相关推荐

    java之jvm学习笔记五(实践写自己的类装载器)

    Java的类装载器分为三个基本层次:启动类装载器(Bootstrap ClassLoader)、扩展类装载器(Extension ClassLoader)和应用程序类装载器(Application ClassLoader)。它们共同协作,根据类的全限定名(包括包名和...

    利用类装载器动态加载类并启动类

    本文将详细介绍如何通过自定义类装载器来动态加载并启动类的过程,同时介绍一个简单的位移加密算法和非运算加密算法,以及如何使用这些算法进行文件的加密与解密。此方法不仅加深了我们对于Java类装载机制的理解,...

    Java虚拟机类装载:原理、实现与应用

    另一个例子是Java的反射API,它利用类装载机制在运行时动态访问和操作类的属性和方法。 总的来说,理解Java虚拟机的类装载机制对于深入掌握Java应用程序的运行机制至关重要。通过自定义ClassLoader,开发者可以实现...

    Java类文件动态装载

    Java类的装载过程主要由类加载器(ClassLoader)来完成,这是一个关键组件,它负责查找、加载和初始化类。Java类加载器分为系统类加载器(Bootstrap ClassLoader)、扩展类加载器(Extension ClassLoader)和应用...

    大学课程讲义-Java基础-反射.pptx

    JVM规范定义了两种类型的类装载器:启动类装载器(bootstrap)和用户自定义装载器(user-defined class loader)。JVM在运行时会产生3个类加载器组成的初始化加载器层次结构。 * 引导类加载器(Bootstrap ClassLoader)...

    JAVA深度历险

    首先,我们要知道Java的类装载器分为 Bootstrap ClassLoader(引导类装载器)、Extension ClassLoader(扩展类装载器)和App ClassLoader(应用程序类装载器)这三层。Bootstrap ClassLoader主要负责加载JRE的核心库...

    动态编译、加载java类

    2. **Java类加载机制**: Java的类加载机制是基于“类装载器”(ClassLoader)的。JVM使用类加载器将.class文件加载到内存中,转换为Class对象。默认有三个内置的类加载器:Bootstrap ClassLoader(引导类加载器)、...

    JVM原理详细(推荐)

    系统类加载器可以通过`ClassLoader.getSystemClassLoader()`获取。 【JVM 类加载机制】 类加载机制是 JVM 的核心部分,它负责将 Java 类从磁盘、网络或其他数据源加载到 JVM 中,并转化为 Class 对象,以便程序能够...

    java反射机制

    #### 五、`ClassLoader`类装载器 `ClassLoader`是Java中负责加载类到JVM中的工具类。Java中的每一个类都是由`ClassLoader`加载进内存的。`ClassLoader`的常见方法包括: 1. **获取当前线程上下文类加载器**:`...

    jvm_code-master.rar

    类装载器分为引导类装载器、扩展类装载器和应用程序类装载器,以及用户自定义的类装载器。 2. 运行时数据区(Runtime Data Area):包括堆、方法区、虚拟机栈、本地方法栈和程序计数器。堆存储所有对象实例,方法区...

    java动态代理机制综合分析以及实现

    - **`java.lang.ClassLoader`**:这是类装载器类,负责将类的字节码加载到Java虚拟机(JVM)中并为其定义类对象。动态代理类同样需要通过类装载器进行加载才能使用。它与普通类的不同之处在于其字节码是由JVM在运行...

    java类加载过程详解.doc

    Java 类加载过程是Java虚拟机(JVM)在运行时动态加载类的机制,它涉及类的生命周期中的几个关键步骤,包括装载、连接、初始化和卸载。下面将详细阐述这些过程。 1. 装载 装载阶段是类加载的起始点,主要分为三个...

    JVM详细概述与优化大全.zip

    1. **类装载器(ClassLoader)**:负责加载类文件,分为引导类装载器、扩展类装载器和应用程序类装载器。 2. **运行时数据区(Runtime Data Area)**:包括方法区、堆、虚拟机栈、本地方法栈和程序计数器。 - **...

    Java JVM面试题.rar

    - **类装载器(ClassLoader)**:负责加载类文件到JVM内存中,分为启动类装载器、扩展类装载器和应用类装载器。 - **运行数据区(Runtime Data Area)**:包括方法区、堆、虚拟机栈、本地方法栈和程序计数器。 - ...

    Java面试 spring知识点 线程池 面试题

    接下来是类装载器ClassLoader,它负责加载类到JVM中。Spring通过自定义ClassLoader实现对Bean的动态加载和替换,面试中可能会考察你对不同类型的ClassLoader的理解以及它们在Spring中的作用。 Spring AOP原理涉及到...

    2021Java大厂面试题——大厂真题之携程-Java高级.pdf

    - **装载(Load)**:在这个阶段,类加载器负责查找并导入Class文件。这个过程涉及到从文件系统中读取二进制流(即.class文件),将其转化为JVM可以理解的格式。 - **连接(Linking)**:连接过程包括验证(Verification)...

    JVM逃逸_分析、利用与防御.pdf

    3. **类装载器(Classloader)**:采用双亲委派模型,不同类装载器负责加载不同层次的类,防止命名冲突,并在加载前进行校验,以保证类文件的合法性。 4. **安全管理器(SecurityManager)**:通过System类中的...

    java面试题java面试题.doc

    - 类加载器:Bootstrap ClassLoader、Extension ClassLoader、App ClassLoader和自定义类加载器。 11. **Java EE相关**: - Servlet、JSP、Filter和Listener的概念。 - JDBC:数据库连接、执行SQL、结果集处理。...

Global site tag (gtag.js) - Google Analytics