Java反射笔记3—变量和方法
2011-11-18 19:10
302 查看
【作者:孟祥月 博客:http://blog.csdn.net/mengxiangyue】
在Java也可以利用反射得到对应的类中的变量和方法,这个对于在我们使用的时候不知道类的具体情况的时候,对我们很有用。可能因为我学的也不多对于Java的反射机制的具体作用我也不是很清楚,但是我知道一点,可以利用这个机制,在我们无法看清一个类的内部情况的时候,可以得到类的内部情况。
下面我们给出一个例子程序,显示一下反射得到变量和方法是怎么做的,如果哪里不妥,还请指出:
Demo类为了测试所用:
在Java也可以利用反射得到对应的类中的变量和方法,这个对于在我们使用的时候不知道类的具体情况的时候,对我们很有用。可能因为我学的也不多对于Java的反射机制的具体作用我也不是很清楚,但是我知道一点,可以利用这个机制,在我们无法看清一个类的内部情况的时候,可以得到类的内部情况。
下面我们给出一个例子程序,显示一下反射得到变量和方法是怎么做的,如果哪里不妥,还请指出:
Demo类为了测试所用:
public class Demo { public String str1 = "bbbbA"; public String str2 = "abc"; public String str3 = "def"; public Demo(int x, int y) { this.x = x; this.y = y; } @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + x; result = prime * result + y; return result; } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; Demo other = (Demo) obj; if (x != other.x) return false; if (y != other.y) return false; return true; } private int x; public int y; @Override public String toString() { return "Demo [x=" + x + ", y=" + y + ", str1=" + str1 + ", str2=" + str2 + ", str3=" + str3 + "]"; } public void display(String str) { System.out.println(str); } }下面的代码是我们通过反射得到上面类中的变量和方法:
import java.lang.reflect.Field; import java.lang.reflect.Method; public class ReflectDemo { public static void main(String[] args) throws Exception { Demo d = new Demo(3,5); Field fieldY = d.getClass().getField("y"); //fieldY得到是y变量具体是哪个对象的y变量,必须用下面的方法去取出来,get方法只能得到可见的变量 System.out.println(fieldY.get(d)); Field fieldX = d.getClass().getDeclaredField("x"); //下面的语句是暴利反色,如果不写的话,我们是不能取到private的变量的 fieldX.setAccessible(true); System.out.println(fieldY.get(d)); System.out.println("改变以前的:"+d); Field[] fields = d.getClass().getFields(); for(Field field : fields) { if(field.getType() == String.class) { String oldValue = (String)field.get(d); String newValue = oldValue.replace('b', 'a'); field.set(d, newValue); } } System.out.println("改变以后的:"+d); //方法的反色 Method display = Demo.class.getMethod("display", String.class); //invoke第一个对象是使用哪个对象调用,如果是静态对象,那就直接写null,后面是这个对象调用的方法需要的参数 display.invoke(d, "mengxiangyue"); } }下面是上面程序运行的结果:
5 5 改变以前的:Demo [x=3, y=5, str1=bbbbA, str2=abc, str3=def] 改变以后的:Demo [x=3, y=5, str1=aaaaA, str2=aac, str3=def] mengxiangyue如果哪里写的不妥,还请指出。
相关文章推荐
- Java笔记——利用反射机制获取成员变量及成员方法
- Android(java)学习笔记109:通过反射获取成员变量和成员方法并且使用
- java反射学习笔记(3)---使用Class来获取方法、成员变量、构造函数信息
- java反射_改变private中的变量及方法的简单实例
- java构造方法、成员变量、方法所对应的反射实例
- Android(java)学习笔记107-1:通过反射获得带参构造方法并且使用
- 黑马程序员--Java基础加强--16.利用反射操作泛型V【通过Constructor反射解析泛型构造方法】【通过Field反射解析泛型成员变量】【个人总结】
- JAVA反射中类的构造函数,成员变量,成员方法的使用
- [转]Java反射之如何判断类或变量、方法的修饰符(Modifier解析)
- Java反射之如何判断类或变量、方法的修饰符(Modifier解析)
- Java反射---Class对象,获得类的方法、成员变量和构造函数信息
- Java 通过反射获取类的信息(成员变量,成员方法,构造方法)
- 黑马程序员——【Java反射学习】方法的反射/成员变量的反射/构造函数的反射
- java 使用反射机制来获取私有方法和成员变量
- java利用反射来调用一个类的私有方法和成员变量
- 【转】【Java】利用反射技术,实现对类的私有方法、变量访问
- java通过反射技术访问私有变量和方法
- <Head First Java>学习笔记--第四章:方法操作实例变量 对象的行为
- Android(java)学习笔记108:通过反射获取私有构造方法并且使用
- 如何通过Java反射访问类里面的私有方法和变量