先来看一个通过反射来动态给变量赋值的:
package com.reflect.demo;
public class Student {
public String name;
public Integer age;
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Student(String name, Integer age) {
super();
this.name = name;
this.age = age;
}
public Student() {
super();
}
}
package com.reflect.demo;
import java.lang.reflect.Field;
public class BaseTest {
public static void main(String[] args) throws SecurityException,
NoSuchFieldException, IllegalArgumentException,
IllegalAccessException {
Student stu1 = new Student();
Field nameField1 = Student.class.getField("name");
nameField1.set(stu1, "张三");
System.out.println("学生1的姓名为:" + stu1.getName() + " \t 年龄为:"
+ stu1.getAge());
}
}
通过反射机制来实现在程序运行中动态给变量赋值,需要考虑以下几点:
1)如何获取相应的Filed,Method对象?
2)怎样将动态的值设置到目标对象?
3)碰到私有域变量Field和方法Method如何处理?
对于第一点,主要是获取Class对象。有三种方法获取Class对象
a. 类名.class b. 对象名.getClass() 例如用stu1.getClass()代替 Student.class结果完全一样
c. Class.forName("类名");
对于第二点,代码nameField1.set(stu1, "张三");是关键,第一个参数即为目标对象。亦即通过Field对象的
set方法给对象stu1的name属性赋值。
对于第三点,若要给age赋值,但age在Student类中是私有变量,是不容许外部类访问的。这时候想起上一章节中
提到的抽象类AccessibleObject提供了setAccessible方法,该方法可以跳过Java 语言访问控制检查。
代码如下:
Student stu1 = new Student();
Student stu2 = new Student();
Field nameField1 = stu1.getClass().getField("name");
nameField1.set(stu1, "张三");
System.out.println("学生1的姓名为:"+stu1.getName()+" \t 年龄为:"+stu1.getAge());
Field ageField2 = stu2.getClass().getDeclaredField("age");
ageField2.setAccessible(true);
ageField2.set(stu2, 18);
System.out.println("学生2的姓名为:"+stu2.getName()+" \t 年龄为:"+stu2.getAge());
还有得注意的是:
1)、注意getField与getDeclaredField的区别:两者都是java.lang.Class类提供的方法,前者用于取指定类或接口的公有属性,而age是私有属性必须用后者来获取。
2)、在此不能用ageField2.setInt(stu2,18)代替ageField2.set(stu2, 18),这里做了严格的校验,Student中age属性采用了Integer类型。
分享到:
相关推荐
Java反射机制学习总结,附带程序示例。
Java反射机制的学习 对java反射机制进行详细的讲解
Java反射机制的使用和学习方法,从底层阐述Java反射机制的原理,让我们更加了解Java反射
Java反射机制总结(实例分析) Java反射机制学习笔记
Java 反射机制、Java 的类反射机制、Java 反射机制的学习、Java 反射Reflection--运行时生成实例 java反射机制的手册文档
java反射机制
Java反射机制的实现_Reflection,适合学习了解反射机制。
java反射机制应用,文档中列举了使用java反射机制的各个应用场景,加以代码实例,使用学习非常方便。
对于Java基础的巅峰——反射机制的详细描述,反射的入门学习帮手!
比较详细讲述了java的反射机制,收获颇丰。希望大家能够共同学习,一起进步。
通过例子对java反射机制做了一个深刻的介绍
自己总结的java反射机制的笔记,绘制了详细的思维导图,每个思维导图中均有详细的博文解释,方便大家学习和理解,免费分享给大家。适合java的爱好者和学习者
Java反射机制学习总结.doc
JAVA反射机制的学习.mht
java学习笔记java反射机制
很全面的JAVA反射机制的介绍,包含简单的源码
java反射机制的一些源代码,我学习的笔记,需要的可以下载看看
这是一年多以来学习java和在项目中遇到问题之后总结出的一系列资料。包含:java 反射机制 流 内存管理等信息。
java反射机制基础学习。Class、Method、Field