java 27 - 8 反射之 通过反射来设置某个对象的某个属性为指定值

标题的意思是:

  通过反射写一个类,类中有个方法。该方法可以设置某个类中的某个属性(构造方法,成员变量,成员方法)为特定的值

代码:

  

 1     // 该方法的参数列表是一个类的 类名、成员变量、给变量的赋值
 2     public void setProperty(Object obj, String PropertyName, Object value)
 3             throws NoSuchFieldException, SecurityException,
 4             IllegalArgumentException, IllegalAccessException {
 5
 6         // 获取obj类的字节文件对象
 7         Class c = obj.getClass();
 8
 9         // 获取该类的成员变量
10         Field f = c.getDeclaredField(PropertyName);
11
12         // 取消语言访问检查
13         f.setAccessible(true);
14
15         // 给变量赋值
16         f.set(obj, value);
17
18     }

测试类:

  

 1 public static void main(String[] args) throws NoSuchFieldException,
 2             SecurityException, IllegalArgumentException, IllegalAccessException {
 3
 4         // 创建Person类的对象
 5         Person p = new Person();
 6         // 私有成员变量无法直接访问
 7         // 这时候就通过刚刚写的Tool类来直接调用
 8         Tool t = new Tool();
 9         // 通过Tool的方法直接更改私有成员变量name
10         t.setProperty(p, "name", "张三");
11         // 更改未定义类型成员变量
12         t.setProperty(p, "age", 13);
13         // 更改公共成员变量
14         t.setProperty(p, "sex", ‘男‘);
15         System.out.println(p);
16
17         // 其实除了私有成员变量,其它的都可以通过以前的方法赋值
18     }
19
20 }
21
22 class Person {
23     // 该类有私有成员变量,未定义类型成员变量,公共成员变量
24     private String name;
25     int age;
26     public char sex;
27
28     @Override
29     public String toString() {
30         return name + "--" + sex + "--" + age;
31     }
32
33 }
时间: 2024-10-16 21:00:45

java 27 - 8 反射之 通过反射来设置某个对象的某个属性为指定值的相关文章

黑马程序员————java中类的加载、反射、动态代理、枚举

------<a href="http://www.itheima.com" target="blank">Java培训.Android培训.iOS培训..Net培训</a>.期待与您交流! ------- 类的加载.反射.动态代理.枚举 一.类的加载 当程序要使用某个类时,如果该类还未被加载到内存中,则系统会通过加载,连接,初始化三步来实现对这个类进行初始化. 1.加载: 就是指将class文件读入内存,并为之创建一个Class对象 ★★

java学习--基础知识进阶第十三天--反射机制的概述和字节码对象的获取方式、反射操作构造方法、成员方法、成员属性、JavaBean的概述&amp;BeanUtils的使用、自定义BeanUtils工具类

今日内容介绍 u 反射机制的概述和字节码对象的获取方式 u 反射操作构造方法.成员方法.成员属性 u JavaBean的概述&BeanUtils的使用 u 自定义BeanUtils工具类 第1章 反射机制概述.字节码对象的获取方式.反射操作构造方法.成员方法.成员属性 1.1 反射机制的概述和字节码对象的获取方式 1.1.1 反射介绍 JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法,对于任意一个对象,都能够调用它的任意一个方法        这种动态获取的以及动

Java---类反射(2)---类反射加强

经过前面的一篇博客,Java-类反射(1),相信大家对类反射有了一定的了解了. 下面来进行对类反射的加强,了解一下怎么通过类反射去new一个对象, 怎么通过类反射去访问其他类的方法. 怎么通过类反射去访问其他类的成员变量. 大家也许认为一个类的私有方法,私有的成员变量是其他类访问不到.但是,类反射是可以通过暴力访问去访问的. 还有:最后要模拟Java内省的功能 类的调用(调用类中的成员) ★ 构造类对象 使用构造器新建对象.根据指定的参数类型找到相应的构造函数,传入相应参数调用执行,以创建一个新

反射(2)使用反射

这一篇文章来总结下怎么使用反射的. 加载程序集 要加载程序集,可以调用 Assembly的LoadXXX系列方法. 1,Assembly.Load方法 1 //1,从GAC或应用程序基目录加载程序集 2 var assembly = Assembly.Load("ReflectionDemo.A, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null");//或ReflectionDemo.A也可以 需要注意的是: 1)查找顺序,首

复习java基础第七天(反射)

一:目标 Ø理解 Class 类 Ø理解 Java 的类加载机制 Ø学会使用 ClassLoader 进行类加载 Ø理解反射的机制 Ø掌握 Constructor.Method.Field 类的用法 Ø理解并掌握动态代理 1.Class类 –对象照镜子后可以得到的信息:某个类的数据成员名.方法和构造器.某个类到底实现了哪些接口. 对于每个类而言,JRE 都为其保留一个不变的 Class 类型的对象. 一个 Class 对象包含了特定某个类的有关信息. –  Class 对象只能由系统建立对象.

黑马程序员——java高新技术(新特性、反射、泛型)

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- java高新技术 第一部分——JDK1.5新特性 1.增强for循环 格式: for(元素类型 变量名 : Collection集合 & 数组 ) { }//增强for循环括号里写两个参数,第一个是声明一个变量,第二个就是需要迭代的容器 高级for循环和传统for循环的区别: 高级for循环在使用时,必须要明确被遍历的目标.这个目标,可以是Collection集合或者数组,如果遍历Collec

Java反射获取对象VO的属性值(通过Getter方法)

有时候,需要动态获取对象的属性值. 比如,给你一个List,要你遍历这个List的对象的属性,而这个List里的对象并不固定.比如,这次User,下次可能是Company. e.g. 这次我需要做一个Excel导出的工具类,导出的批量数据是以List类型传入的,List里的对象自然每次都不同,这取决于需要导出什么信息. 为了使用方便,将对象的属性名与属性值存于Map当中,使用时就可以直接遍历Map了. 此次的思路是通过反射和Getter方法取得值,然后记录在一个Map当中. Kick start

Java高级篇(四)——反射

之前写到了设计模式的代理模式,因为下一篇动态代理等内容需要用到反射的知识,所以在之前Java篇的基础上再写一篇有关反射的内容,还是以实际的程序为主,了解反射是做什么的.应该怎么用. 一.什么是反射 反射就是把Java类中的各个成分映射成一个个的Java对象.即在运行状态中,对于任意一个类,都能够知道这个类的所以属性和方法:对于任意一个对象,都能调用它的任意一个方法和属性.这种动态获取信息及动态调用对象方法的功能叫Java的反射机制. 1. 反射机制的功能 Java反射机制主要提供了以下功能: 在

Java之旅(2)—反射

1.     概念 反射就是将java类中的各种成分映射成相应的java类.之前我们已经讲过了Class类,也明白了一个java类中用一个Class类的对象来表示,一个类中的组成部分有:成员变量,方法,构造方法,包等等信息也用一个个的java类来表示. 举个生活中的例子,生活中我们经常见到汽车,如果说汽车是一个类的话,那么汽车中的发动机.变速箱等等也是一个个的类.表示java类的Class类显然要提供一系列的方法,来获得其中的变量,方法,构造方法,修饰符,包等信息,这些信息就是用相应类的实例对象