黑马程序员Java基础之反射(Reflect)与JavaBean
2012-03-28 11:48
483 查看
---------------------- android培训、java培训、期待与您交流! ----------------------
基础要点
1、构造方法的反射
2、成员变量的反射
3、方法的反射
例如得到某个类的所有构造方法或某个构造方法的例子:
总结:Constructor[] constructors=Class.forName("java.lang.String").getConstructors();用于得到所有类的构造方法;Constructor
constructor=Class.forName("java.lang.String").getConstructor(StringBuffer.class);用于得到某一个构造方法,括号内的是构造方法的参数的Class对象
再例如得到某个类的成员变量
总结:Field[] Field=Class.forName("java.lang.String").getFields(),用于得到某个类所有的属性;Field
Field=Class.forName("java.lang.String").getField(String pName),用于得到某个属性;这两个都推荐使用getDeclaredField(String pName)
第三个例子是关于方法的反射
总结:getMethod()/getField()和getDeclaredMethod()/getDeclaredField()的区别
前者只能返回public类型,后者无此限制
感受:这两天我的柜子锁上的钥匙丢了,我就想到如果能用暴力反射把柜子里的私有变量(我的鞋)给弄出来多好啊,为此我还研究了好半天开锁呢!我也只是想想怎么可能真把鞋反射出来,开个玩笑。看了些资料这反射主要还是用于WEB开发后台连接数据库这块,在写JavaBean用的较多
---------------------- android培训、java培训、期待与您交流! ----------------------
详细请查看:http://edu.csdn.net/heima
基础要点
1、构造方法的反射
2、成员变量的反射
3、方法的反射
例如得到某个类的所有构造方法或某个构造方法的例子:
package horse; import java.lang.reflect.*; /**这是一个构造方法的反射例子 */ public class ConstructorReflect { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub Constructor<?> constructor = String.class.getConstructor(new Class[]{byte[].class}); String st =(String)constructor.newlnstance(new Object[]{"abc".getBytes()}); String sts = (String)construtor System.out.println(st.charAt(2)); System.out.println(st.indexOf("b")); } }
总结:Constructor[] constructors=Class.forName("java.lang.String").getConstructors();用于得到所有类的构造方法;Constructor
constructor=Class.forName("java.lang.String").getConstructor(StringBuffer.class);用于得到某一个构造方法,括号内的是构造方法的参数的Class对象
再例如得到某个类的成员变量
package horse; /**这是声明了一个类用于测试成员变量的反射 */ public class FieldTest { //声明两个变量,一个私有,一个共有,用于演示暴力反射 private int x; public int y; public FieldTest(int x, int y) { super(); this.x = x; this.y = y; } } package horse; /**这是一个成员变量反射的例子 */ public class FieldReflect { /** * @param args */ public static void main(String[] args) { //已知这两个参数一个是私有的,一个是共有的 FieldTest f = new FieldTest(2,5); //共有变量的取出方式 Field fy = f.getClass().getDeclaredField("y"); System.out.println(fy.get(f)); //私有变量的取出方式,很暴力 Field fx = f.getClass().getDeclaredField("X"); fx.setAccessible(true); System.out.println(fx.get(f)); } }
总结:Field[] Field=Class.forName("java.lang.String").getFields(),用于得到某个类所有的属性;Field
Field=Class.forName("java.lang.String").getField(String pName),用于得到某个属性;这两个都推荐使用getDeclaredField(String pName)
第三个例子是关于方法的反射
package horse; /**这是一个成员方法的反射例子 */ public class MethodReflect { /** * @param args */ public static void main(String[] args) { // TODO 自动生成方法存根 Class cl = FieldTest.class; Method[] methods = cl.getMethods(); for(Method m:methods){ System.out.println(m); } //获取FieldTest中的函数 methods = cl.getDeclaredMethods(); for(Method m:methods){ System.out.println(m); } } }
总结:getMethod()/getField()和getDeclaredMethod()/getDeclaredField()的区别
前者只能返回public类型,后者无此限制
感受:这两天我的柜子锁上的钥匙丢了,我就想到如果能用暴力反射把柜子里的私有变量(我的鞋)给弄出来多好啊,为此我还研究了好半天开锁呢!我也只是想想怎么可能真把鞋反射出来,开个玩笑。看了些资料这反射主要还是用于WEB开发后台连接数据库这块,在写JavaBean用的较多
---------------------- android培训、java培训、期待与您交流! ----------------------
详细请查看:http://edu.csdn.net/heima
相关文章推荐
- 【黑马程序员】Java基础加强15:反射Reflect
- 黑马程序员--Java基础加强学习笔记之Class类、反射(Reflect)
- 黑马程序员-java基础-反射
- 黑马程序员——Java语言基础——10.反射
- 黑马程序员_JAVA基础加强——反射
- 黑马程序员——Java基础---反射
- Java基础----反射Reflect----Constructor
- 黑马程序员-JAVA基础-反射
- 黑马程序员--Java基础加强(4)--- JDK1.5新特性之JavaBean、注解
- 黑马程序员 java基础加强--反射
- 黑马程序员--java基础--反射
- 黑马程序员--Java基础加强--13.利用反射操作泛型II【TypeVariable】【GenericArrayType】【WildcardType】【Type及其子接口的来历】【个人总结】
- 黑马程序员----JAVA基础反射与注解
- 黑马程序员--Java基础加强--14.利用反射操作泛型III【解析关于泛型类型的细节信息的获取方法】【Method与泛型相关的方法】【个人总结】
- 黑马程序员_张孝祥_Java基础加强_反射
- 黑马程序员——java基础——反射
- 黑马程序员——Java基础---反射
- 黑马程序员——Java基础---反射
- 黑马程序员——Java重点基础之反射
- 黑马程序员-JAVA基础加强-反射2