`
dyaod
  • 浏览: 15778 次
  • 性别: Icon_minigender_1
  • 来自: 天津
社区版块
存档分类
最新评论

反射--操作

阅读更多
<script>function StorePage(){d=document;t=d.selection?(d.selection.type!='None'?d.selection.createRange().text:''):(d.getSelection?d.getSelection():'');void(keyit=window.open('http://www.365key.com/storeit.aspx?t='+escape(d.title)+'&u='+escape(d.location.href)+'&c='+escape(t),'keyit','scrollbars=no,width=475,height=575,left=75,top=20,status=no,resizable=yes'));keyit.focus();}</script>

/**
*
*/
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import p2.User;

@SuppressWarnings("unchecked")
public class TestReflection02 {
public static void main(String[] a) throws Exception{
User p1 = new User("张三",18);
TestReflection02 t = new TestReflection02();

System.out.println("----------------------------------------");
t.mf1(p1,"name","李四");
t.mf1(p1,"age",30);
System.out.println(p1);

System.out.println("----------------------------------------");
t.mf2("p2.User", "total",88);

System.out.println("----------------------------------------");
Class[] argTypes = {String.class,int.class};
Object[] args = new Object[]{"王五",99};
t.mf3(p1, "setAll",argTypes,args);
System.out.println(p1);

System.out.println("----------------------------------------");
t.mf4("p2.User", "showTotal",null,null);
}

//直接操作对象属性
public void mf1(Object o,String fieldName,Object newValue) throws NoSuchFieldException, IllegalAccessException {
Class c = o.getClass();
Field f = c.getField(fieldName);
Object fv = f.get(o);
System.out.print("修改前:" + fieldName + "=" + fv);
f.set(o,newValue);
System.out.println("\t修改后:" + fieldName + "=" + f.get(o));
}

//直接操作类属性
public void mf2(String className,String fieldName,Object newValue) throws ClassNotFoundException, NoSuchFieldException, IllegalAccessException {
Class c = Class.forName(className);
Field f = c.getField(fieldName);
Object fv = f.get(c);
System.out.print("修改前:" + fieldName + "=" + fv);
f.set(c,newValue);
System.out.println("\t修改后:" + fieldName + "=" + f.get(c));
}

//调用对象成员方法
public void mf3(Object o,String methodName,Class[]argTypes,Object[] args) throws NoSuchMethodException, IllegalAccessException, InvocationTargetException {
Class c = o.getClass();
Method m = c.getMethod(methodName, argTypes);
Object result = m.invoke(o, args);
System.out.println(result);
}

//调用类成员方法
public void mf4(String className,String methodName,Class[]argTypes,Object[] args) throws ClassNotFoundException, NoSuchMethodException, IllegalArgumentException, IllegalAccessException, InvocationTargetException {
Class c = Class.forName(className);
Method m = c.getMethod(methodName, argTypes);
Object result = m.invoke(null, args);
System.out.println("result:" + result);
}
}

分享到:
评论

相关推荐

    JAVA设计模式--程序设计--反射--注解--泛型

    反射是Java提供的一种强大的工具,允许程序在运行时检查并操作类、接口、字段和方法等。通过反射,我们可以动态地创建对象、调用方法、访问和修改私有属性,实现动态加载类,以及进行元数据分析等。反射的应用场景...

    java反射-英文版反射规范

    Java反射机制是一种强大的编程技术,它允许运行时检查类的信息并操作对象的内部结构。本篇将基于Sun公司的官方文档《Java™ Core Reflection API and Specification》(1997年1月版)进行深度解析,帮助读者更好地...

    JAVA基础-反射-枚举

    通过反射,我们可以在程序运行时动态地获取类的信息(如类名、方法、构造函数等)并操作这些信息。 #### 二、Class类 1. **Class类**:`Class`类用来描述内存中的`.class`字节码文件。每一个`Class`对象代表内存中...

    行业文档-设计装置-单灯管型反射-透射式平台型影像扫描装置.zip

    《单灯管型反射-透射式平台型影像扫描装置》是针对图像处理技术中的一种常见设备进行深入探讨的专业文档。...通过对这些知识点的理解,用户不仅可以更好地操作设备,还能深入挖掘其潜在功能,满足多样化的需求。

    折射-反射-枚举-单元测试综合案例

    例如,你可以使用反射来动态地创建和操作枚举类型,通过折射(代理)来控制对这些枚举的访问,同时利用单元测试确保这些操作的正确性。Myannotation文件名可能暗示了案例中涉及到了自定义注解的使用,这在Java中常与...

    java习题-反射-chap15.pdf

    Chp15 反射Key Point ●Class 对象及其基本操作●Method 对象以及invoke 方法●标注练习 1. (类对象)要获得类对象,有三种不同的方式,分别为_____________________、___________________、_____________________...

    Java 反射-动态代理

    动态代理是在运行时创建代理类和代理对象,这些代理对象可以代替目标对象执行某些操作,同时提供额外的功能,如日志记录、事务管理等。Java提供两种方式实现动态代理:JDK动态代理和CGLIB代理。 1. JDK动态代理:...

    (02)2020.4.26 Java高级语言特性,注解与反射---lance老师.rar

    因为反射操作通常比直接的Java代码慢,所以在性能敏感的代码中应谨慎使用。此外,反射可以访问私有成员,这可能破坏封装原则,增加代码的复杂性和易出错性。 综上所述,注解和反射是Java编程中的两个重要工具,它们...

    java反射-在form提交的一些应用

    它提供了`BeanUtils.copyProperties()`方法,可以直接将一个对象的属性值复制到另一个对象,使得反射操作更为简洁: ```java try { BeanUtils.copyProperties(userForm, request.getParameterMap()); } catch ...

    java 反射-(reflect)

    首先,反射操作通常比直接调用方法慢,因为它涉及到更多的安全性检查和运行时解析。其次,反射可能破坏封装性,可能会导致安全风险或难以调试的问题。因此,在非必要情况下,应避免过多使用反射。 总结,Java反射是...

    4.反射-introdute.doc

    8. **异常处理**:反射操作可能会抛出`ClassNotFoundException`、`IllegalAccessException`、`InstantiationException`、`NoSuchMethodException`等异常,因此在使用反射时通常需要进行异常处理。 9. **继承关系**...

    反射实例-JAVA反射机制

    - **性能开销**:反射操作通常比直接的Java代码执行要慢得多。 - **安全性问题**:可能破坏封装性,导致安全漏洞。 - **可读性**:使用反射的代码可能难以理解和调试。 #### 四、反射的应用场景 Java反射机制在...

    java反射-适合Java开发者学习

    性能问题:反射操作通常比非反射操作慢,因为它们需要在运行时解析类信息,这增加了处理时间。 2. 安全风险:反射允许代码绕过访问控制,可能导致安全漏洞。如果不小心,可能会被恶意代码利用,破坏程序的稳定性。...

    C#全面教程(集合-泛型-反射-内存管理-正则表达式-线程-安全-GDI等)

    包含11个Word文档,包含了C#的集合、字符串和正则表达式、泛型、内存管理和指针、反射、线程和同步、.NET的安全性、COM的互相操作性、文件和注册表操作、使用GDI+画图、Windows Presentation Foundation。...

    第12章 反射-课后习题1

    Java反射机制是Java编程语言中的一种强大的工具,它允许程序在运行时检查和操作类、接口、对象等的内部信息。在第12章“反射”的课后习题中,涉及了反射机制的关键知识点,包括: 1. 反射机制的优点:反射能够实现...

    652.650.JAVA基础教程_反射-获取运行时类的方法的内部结构(652).rar

    - 性能:反射操作通常比直接调用方法慢,因此在性能敏感的代码中应谨慎使用。 - 安全性:反射可以访问私有成员,这可能破坏封装性,带来安全风险。 - 设计原则:避免过度依赖反射,因为它可能导致代码难以理解和...

    658.656.JAVA基础教程_反射-调用运行时类中的指定构造器(658).rar

    反射操作可能会抛出异常,如`ClassNotFoundException`,`InstantiationException`,`IllegalAccessException`和`InvocationTargetException`。在使用反射时,应该适当地捕获这些异常。 8. **实际应用** 反射在很...

    pdf反射机制-java

    - 性能:反射操作通常比直接的Java代码慢,因为它涉及到额外的运行时检查。 - 安全性:反射可以访问私有成员,可能破坏封装性,导致安全风险。 - 易用性:过度使用反射可能会使代码变得难以理解和维护。 因此,在...

    C++反射库--RTTR预编译包

    2. **反射操作**: - 类信息:你可以通过RTTR获取类的完整信息,包括其基类、成员变量、构造函数、方法等。 - 动态创建实例:RTTR允许你在运行时动态创建类的实例,即使该类没有默认构造函数。 - 动态调用方法:...

    Java反射机制-侯捷观点

    - **性能损失**:反射操作通常比直接的Java代码执行慢,因为它涉及到额外的JVM层面的开销。 - **安全风险**:反射可以访问私有成员,可能破坏封装性,导致安全问题。 - **代码可读性和维护性**:反射代码往往比常规...

Global site tag (gtag.js) - Google Analytics