Reflection反射
=================================================================================
【概念】:
1、Java反射的概念
反射含义:可以获取正在运行的Java对象。
2、Java反射的功能
1)可以判断运行时对象所属的类
2)可以判断运行时对象所具有的成员变量和方法
3)通过反射甚至可以调用到private的方法
4)生成动态代理
=======================================================================================
【有什么用】:
举一个简单的例子:
我们在eclipse新建一个类及其方法属性时,下面调用对象方法以及属性时,直接一个点,就会给我们列出它所有的类和方法,这就是利用了java的反射机制。对一个类的自审,
现在我们运行的所有的程序都是在编译期的时候就已经知道了你所需要的那个类的已经被加载了。
【一个准女婿要见未婚妻家人的故事引出】:
譬如 A a=new A();
a.put(2);
这个是在编译阶段完成对a类型的解析,对a是不是有put方法进行了判断,如果a对象没有put方法,则编译不通过。
可是有的时候我们需要在运行的时候动态地对一个对象的指定方法进行调用,我不想写的那么死,在编译的时候就写就好像小明想和小红家庭中的哪个人聊天都没有确定我怎么能直接把小明和小红爸爸绑在一起呢,让程序在运行时候更有主动性,更能变通和迎接外来挑战。这时候我想写一个通用函数,传入一个对象,可以是小红爸爸,小红妈妈,可以是小红,把这个对象属性名,属性值,都输出反映给小明知道,小明才知道怎么更好的跟小红家庭成员交谈,在了解了他们兴趣爱好之后。
反射含义:可以获取正在运行的Java对象。
=======================================================================================
【JDK支持】:
JDK1.5以后引入,JDK1.4以及以前版本不支持。
=======================================================================================
【怎么用】:
实现Java反射的类
1)Class:它表示正在运行的Java应用程序中的类和接口
2)Field:提供有关类或接口的属性信息,以及对它的动态访问权限
3)Constructor:提供关于类的单个构造方法的信息以及对它的访问权限
4)Method:提供关于类或接口中某个方法信息
【重点】:其中Class类很重要。官方解释一大串,然而看后并不懂什么鬼,对程序员最好的语言就是代码
转:疯狂java
public static void test01() throws ClassNotFoundException { Class c1 = TestReflection.class; Class c2 = Class.forName("com.reflection.TestReflection"); //获取指定的包名 String package01 = c1.getPackage().getName(); String package02 = c2.getPackage().getName(); System.out.println("package01 = " + package01); System.out.println("package02 = " + package02); //获取类的修饰符 int mod = c1.getModifiers(); String modifier = Modifier.toString(mod); System.out.println("modifier = " + modifier); //获取指定类的完全限定名 String className = c1.getName(); System.out.println("className = " + className); //获取指定类的父类 Class superClazz = c1.getSuperclass(); String superClazzName = superClazz.getName(); System.out.println("superClazzName = " + superClazzName); //获取实现的接口 Class[] interfaces = c1.getInterfaces(); for (Class t : interfaces) { System.out.println("interfacesName = " + t.getName()); } //获取指定类的成员变量 Field[] fields = c1.getDeclaredFields(); for (Field field : fields) { modifier = Modifier.toString(field.getModifiers()); //获取每个 字段的访问修饰符 Class type = field.getType(); //获取字段的数据类型所对应的 Class对象 String name = field.getName(); //获取字段名 if (type.isArray()) { //如果是数组类型则需要特别处理 String arrType = type.getComponentType().getName() + "[]"; System.out.println("" + modifier + " " + arrType + " " + name + ";"); } else { System.out.println("" + modifier + " " + type + " " + name + ";"); } } //获取类的构造方法 Constructor[] constructors = c1.getDeclaredConstructors(); for (Constructor constructor : constructors) { String name = constructor.getName(); //构造方法名 modifier = Modifier.toString(constructor.getModifiers()); //获取访问修饰符 System.out.println("" + modifier +" " + name + "("); Class[] paramTypes = constructor.getParameterTypes(); //获取构造方法中的参数 for (int i = 0; i < paramTypes.length; i++) { if (i > 0) { System.out.print(","); } if (paramTypes[i].isArray()) { System.out.println(paramTypes [i].getComponentType().getName()+"[]"); } else { System.out.print(paramTypes[i].getName()); } } System.out.println(");"); } //获取成员方法 Method[] methods = c1.getDeclaredMethods(); for (Method method: methods) { modifier = Modifier.toString(method.getModifiers()); Class returnType = method.getReturnType(); //获取方法的返回类型 if (returnType.isArray()) { String arrType = returnType.getComponentType ().getName()+"[]"; System.out.print(""+modifier+" " + arrType + " " + method.getName() + "("); } else { System.out.print("" + modifier + " " + returnType.getName() + " " + method.getName() + "("); } Class[] paramTypes = method.getParameterTypes(); for (int i = 0; i < paramTypes.length; i++) { if (i > 0) { System.out.print(","); } if (paramTypes[i].isArray()) { System.out.println(paramTypes [i].getComponentType().getName()+"[]"); } else { System.out.print(paramTypes[i].getName()); } } System.out.println(");"); }
https://www.douban.com/note/306848299/
这个网址各种用法写的非常详细,大家可以去看一下。基本涵盖反射机制在代码中的方法实例
相关推荐
静态校准与动态校准的区别.docx 传感器校准与标定:传感器的静态校准_14.校准标准与规范.docx 传感器校准与标定:传感器的静态校准_15.案例研究与实践操作.docx 传感器校准与标定:传感器的静态校准_2.静态校准的...
3. **反射**:反射是在运行时检查类、接口、字段和方法等的能力,通常用于实现动态代理或需要动态加载类的场景。 #### 三、核心知识点 接下来,我们将通过一个具体的例子来演示如何使用Java反射获取内部类的静态...
在Java编程中,反射是一种强大的工具,它允许我们在运行时检查和操作类、接口、字段以及方法等...这些文件都是Java开发中的常见元素,与反射调用静态方法的主题直接关联性不大,但它们构成了一个完整的Java项目环境。
质子交换膜燃料电池(PEMFC)Simulink模型:静态与动态模拟,性能参数解析与响应能力展示,附带公式、文献与使用说明,质子交换膜燃料电池(PEMFC)Simulink模型详解:静态与动态特性分析及其参数计算参考公式与文献...
PEMFC的Simulink模型设计与分析:探究静态与动态模型的性能参数与特性,质子交换膜燃料电池Simulink模型:涵盖静态与动态特性,全面计算输出性能与效率,附参考公式与文献指南,25,KNN算法实现鸢尾花分类,分类结果和...
质子交换膜燃料电池的仿真探究:静态与动态模型的输出分析及应用指南,质子交换膜燃料电池(PEMFC)Simulink模型:静态与动态模拟解析及性能参数研究参考公式使用指南,质子交膜燃料电池(PEMFC Simulink模型) ...
PEMFC的Simulink模型构建:探究静态与动态性能,计算输出、效率及关键参数参考公式与文献解析,PEMFC的Simulink模型:探究静态与动态性能,计算输出、效率及关键参数参考公式文献详解,质子交膜燃料电池(PEMFC) ...
PEMFC的Simulink模型构建:探究静态与动态性能,计算输出、效率及关键参数参考公式与文献解析,质子交换膜燃料电池(PEMFC)Simulink模型:静态与动态模型分析及参数计算,基于FPGA实现的MSK调制解调的Vivado工程,...
1. **动态与静态页面的区别** - 动态页面:基于服务器端脚本(如ASP.NET、PHP等),根据用户请求实时生成内容,每次请求都会执行数据库查询和其他逻辑处理。 - 静态页面:预先生成并存储为HTML文件,直接由Web...
质子交换膜燃料电池Simulink模型:涵盖静态与动态特性,详细计算输出、效率及产热产水,附参考公式与文献指南,质子交换膜燃料电池Simulink模型:涵盖静态与动态特性,全面计算输出性能与效率,附参考公式与文献指南,...
质子交换膜燃料电池的仿真探究:静态与动态模型的输出分析及应用指南,质子交膜燃料电池(PEMFC Simulink模型) (1)仿真内容:包括燃料电池静态模型、燃料电池动态模型 ①静态模型:可以得到燃料电池的极化曲线,并...
PEMFC的Simulink模型:探究静态与动态性能,计算输出、效率及关键参数参考公式文献详解,质子交换膜燃料电池Simulink模型:涵盖静态与动态特性,详细计算输出、效率及产热产水,附参考公式与文献指南,M00211-carsim ...
质子交换膜燃料电池(PEMFC)Simulink模型详解:静态与动态特性分析,附带参考公式与文献说明,质子交膜燃料电池(PEMFC Simulink模型) (1)仿真内容:包括燃料电池静态模型、燃料电池动态模型 ①静态模型:可以...
### Linux静态库与动态库详解 #### 一、引言 在Linux环境下,库是一种重要的软件组件,用于封装一组相关的函数或数据结构,以便于在不同的应用程序之间共享代码。库通常分为两大类:静态库(static libraries)和...
使用反射处理内部类时,需要注意区分匿名内部类、静态内部类和非静态内部类。反射API允许我们获取内部类的Class对象,创建内部类实例,并访问或调用其成员。 2. 类的反射: 反射的核心是Class类,它代表了Java类的...
Java反射机制是一种在运行时动态获取和操作类的信息和对象的机制。它允许程序在运行时检查和修改类的行为,提供了对类的成员变量、方法和构造函数等的动态访问。使用反射,可以在运行时创建对象、调用方法、获取和...
使用简单的程序展示了C++调用动态库和静态库的方法。 文件结构: exe:笔者部署可运行文件,因开发环境版本不同,可能存在无法直接使用的情况,两个部署文件(copy_ldd.sh及useLib1.sh)可以结合文章分享的(ubuntu下...
在动态生成静态页面的场景下,可能包含与静态化相关的设置或路由规则。 `binRuntimeError.log`可能是运行时错误日志,它记录了程序执行过程中遇到的问题,有助于调试和优化静态化过程。 `hhftohtml.sln`和`...
相反,动态调用通常是在运行时通过反射或者其他方式(如SOAPHttpClient)来构建请求和解析响应。这种方式无需预先添加服务引用,可以在运行时动态获取服务的元数据,更加灵活。例如,使用System.ServiceModel....
《Android动态加载与反射机制的静态污点分析研究》 在当前的Android安全领域,隐私泄露是一个至关重要的问题。其中,污点分析是检测隐私泄露的主要手段。静态污点分析因其高代码覆盖率和低假阴性率而在Android隐私...