Java笔记——利用反射机制获取成员变量及成员方法

来源:互联网 发布:网络教育到毕业多少钱 编辑:程序博客网 时间:2024/05/16 17:58
package tmp;import java.lang.reflect.Field;import java.lang.reflect.InvocationTargetException;import java.lang.reflect.Method;public class Test {public static void main(String[] args) throws NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException, NoSuchMethodException, InvocationTargetException{Student x=new Student();Class<?> xC=x.getClass();System.out.println("x类的名字:"+xC.getName()+";  路径:"+xC.getPackage()+";  父类:"+xC.getSuperclass());Field id=xC.getDeclaredField("id");id.setAccessible(true);id.setInt(x, 100);System.out.println("利用反射机制,改变私有域成员变量值,赋id值为:"+x.get_id());Method set_id=xC.getDeclaredMethod("set_id",int.class);set_id.invoke(x, 10);System.out.println("利用反射机制,获取成员方法,赋id的值为:"+x.get_id());}}class Student extends Student0{private int id;public Student(){}public int get_id(){return id;}public void set_id(int id){this.id=id;}public void set_id(float id){this.id=(int)id;}}class Student0{private int id;public Student0(){}public int get_id(){return id;}public void set_id(float id){this.id=(int)id;}}

程序运行结果:

x类的名字:tmp.Student;  路径:package tmp;  父类:class tmp.Student0
利用反射机制,改变私有域成员变量值,赋id值为:100
利用反射机制,获取成员方法,赋id的值为:10

知识点:

1、如何改变类中私有域变量值:

Class<?> xC=x.getClass();Field id=xC.getDeclaredField("id");id.setAccessible(true);id.setInt(x, 100);
2、如何利用java反射机制调研类的方法:
<pre name="code" class="java">Class<?> xC=x.getClass();

<pre name="code" class="java">Method set_id=xC.getDeclaredMethod("set_id",int.class);set_id.invoke(x, 10);

0 0
原创粉丝点击