动态装载
一 程序运行的过程
二 classLoader类加载机制
1 并非一次性加载
2 需要的时候加载即运行期间动态加载
3 static语句块在加载后执行一次
4 dynamic语句块每次new新的对象都会执行(等同与构造方法中的语句,少用)
说明:
1,2点是说程序在加载类时,并不是一次性把所有用到的类都加载进去,而是运行到哪里就加载到哪里,是动态的。
三JDK中classloader的分类
classLoader具体来说有四个
bootstrap classloader 负责核心类的加载
extension classloader 负责扩展类的加载
application classloader 负责自定义类的加载
other classloader
说明:
bootstrap classloader和extension classloader由c或汇编语言或c++操作系统本地语言写的。其他的classloader是用java写的。所以其他的classloader也需要由loader进来
四JDK中classloader的层次关系
如图:
classloader存在着层次关系,但不是继承。一个classloader要load class时会向上一层报告,查看是否已经load,如果load了就不会再次load。
反射机制
什么是反射?
反射机制就是我们可以通过反射的API接口可以探索运行期间的一个class的内部结构,并且根据他的内部结构来决定方法怎么样调用。
反射机制的核心类
类加载到内存中后就是一个个对象,其方法,属性等等也可以看作是一个对象。
class 类的类型对象,即每个类都有这样的一个属性表示类型。例如:Object.getClass()就可以得到该类的对象,相当于类名.class。
constructor 代表类中的构造方法
field 代表类中的成员变量
method 代表类中的方法
modifier 代表类中的修饰符
这几个类就是我们实现反射机制的关键,首先我们要通过class.forName("XXX")得到加载到内存中XXX的class对象,然后再得到他的方法,成员变量来调用对象的方法。
实现反射的核心代码
package Reflect;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
public class Reflect {
public Object invokeTest(String className,String fieldName,Object args){
Object obj=null;
try {
//得到内存中的class对象
Class<?> classObj=Class.forName(className);
//将class对象示例出来
obj=classObj.newInstance();
//得到指定的属性对象
Field field=classObj.getDeclaredField(fieldName);
//拼接处要调用的方法名称
String methodName="set"+fieldName.substring(0,1).toUpperCase()+fieldName.substring(1);
//得到指定的方法对象
Method method= classObj.getDeclaredMethod(methodName,field.getType());
//调用该方法
method.invoke(obj, args);
} catch (Exception e) {
e.printStackTrace();
}
return obj;
}
}
- 大小: 12.6 KB
- 大小: 3.6 KB
分享到:
相关推荐
5. **反射与动态装载** Java反射API提供了一种在运行时检查类、接口、字段和方法的能力。通过反射,我们可以在运行时动态创建对象、调用方法,这在很多场景下都离不开动态装载。例如,当我们需要根据配置文件动态...
该技术通过采用Java反射机制和自定义注解原理,实现了数据库与Excel文件之间的数据交互。这样不仅能保证数据导入的完整性,同时也能避免数据导出后重新编辑的复杂性,从而提高POI实现Excel数据导入和导出的灵活性、...
在这个特定的"spring IOC反射装载bean"的主题中,我们将深入探讨Spring如何通过XML配置文件来加载和管理Bean,并利用Java的反射机制来实例化这些Bean。 首先,Spring容器通过读取XML配置文件来获取Bean的定义。这些...
Java反射机制是Java语言提供的一种在运行时动态访问和操作类、对象、方法和属性的能力。这种能力使得开发者可以在程序运行过程中获取到类的信息,并且能够动态地创建和操作对象。 根据给定描述,“Java反射机制是在...
在.NET框架中,动态装载组件或插件是应用程序设计中的一个重要方面,它允许程序在运行时根据需要加载和执行特定的代码模块...不过,这也需要开发者对.NET的反射机制有深入的理解,以确保正确地处理各种异常和边界情况。
另一个例子是Java的反射API,它利用类装载机制在运行时动态访问和操作类的属性和方法。 总的来说,理解Java虚拟机的类装载机制对于深入掌握Java应用程序的运行机制至关重要。通过自定义ClassLoader,开发者可以实现...
反射允许我们在编写与执行时,使我们的程序代码能够接入装载到JVM中的类的内部信息,而不是源代码中选定的类协作的代码。这使反射成为构建灵活的应用的主要工具。但需注意的是:如果使用不当,反射的成本很高。
本文将详细介绍Java基础中的反射机制,包括Class类、ClassLoader类、Constructor、Method、Field类的用法,以及动态代理机制。 Class类 Class类是Java中一个特殊的类,用于描述类本身的信息。每个类在JVM中都有一...
本文介绍了一种在Web环境下实现Java表达式的动态编译与计算的方法,该方法利用Java SE 6提供的编译器API实现动态编译,自定义类装载器装入字节代码,并使用反射机制调用计算方法,实现了Java表达式的动态编译与计算...
IO(输入/输出)是所有程序都必需的部分:使用输入机制,允许程序读取外部数据(包括来自磁盘、光盘等存储设备的数据)、用户输入数据;使用输出机制,允许程序记录运行状态,将程序数据输出到磁盘、光盘等存储设备...
本文将详细介绍如何通过自定义类装载器来动态加载并启动类的过程,同时介绍一个简单的位移加密算法和非运算加密算法,以及如何使用这些算法进行文件的加密与解密。此方法不仅加深了我们对于Java类装载机制的理解,...
Android基于类装载器插件架构的实现主要涉及到Android系统中类的动态加载与插件化架构的设计。在Android开发中,由于APK包的独立性和Android系统对安全性的严格限制,传统的插件化技术在动态加载外部模块时面临着...
Java反射是Java编程语言中的一个重要特性,允许程序在运行时检查和操作类、接口、对象的内部信息。在“java概述课件24反射.ppt”中,主要讲解了Java中...理解并掌握反射机制对于深入学习Java和开发高级应用至关重要。
3. 使用反射获取动态代理类的构造函数,该构造函数接受一个`InvocationHandler`类型的参数。 4. 通过构造函数创建动态代理类的实例,传入自定义的`InvocationHandler`对象。 以下是一个简单的示例: ```java ...
该方法利用面向接口编程和Java的反射机制为开发者提供了一个统一的开发接口,使得软件能够实现功能的动态变化,以满足在软件维护阶段对系统进行调整的需求。通过这种动态设计方法,可以避免在添加新功能或更新原有...
此外,Java反射机制允许程序在运行时动态地获取类的信息并操作类的对象。通过`java.lang.reflect`包提供的API,可以获取类的私有字段、调用私有方法,实现灵活的代码控制。 例如,`Class`类的`forName()`方法可以...