java中的反射三(反射机制深入---对类的操作)

来源:互联网 发布:阿里云已经备案的域名 编辑:程序博客网 时间:2024/05/21 17:35

使用反射调用类中的指定方法

通过反射调用类中的方法:

无参数的方法:

public class InvokeSayChinaDemo{public static void main(String args[]){Class<?> c1 = null ;try{c1 = Class.forName("org.lxh.demo15.Person") ;// 实例化Class对象}catch(Exception e){}try{Method  met = c1.getMethod("sayChina") ;// 找到sayChina()方法met.invoke(c1.newInstance()) ;// 调用方法}catch(Exception e){e.printStackTrace() ;}}};


有参数的方法:

public class InvokeSayHelloDemo{public static void main(String args[]){Class<?> c1 = null ;try{c1 = Class.forName("org.lxh.demo15.Person") ;// 实例化Class对象}catch(Exception e){}try{Method  met = c1.getMethod("sayHello",String.class,int.class) ;// 找到sayChina()方法String rv = null ;rv = (String)met.invoke(c1.newInstance(),"fly",30) ;// 调用方法System.out.println(rv) ;}catch(Exception e){e.printStackTrace() ;}}};


 

使用反射完成setter和getter方法的调用

public class InvokeSetGetDemo{public static void main(String args[]){Class<?> c1 = null ;Object obj = null ;try{c1 = Class.forName("org.lxh.demo15.Person") ;// 实例化Class对象}catch(Exception e){}try{obj = c1.newInstance() ;}catch(Exception e){}setter(obj,"name","fly",String.class) ;// 调用setter方法setter(obj,"age",30,int.class) ;// 调用setter方法System.out.print("姓名:") ;getter(obj,"name") ;System.out.print("年龄:") ;getter(obj,"age");}/**Object obj:要操作的对象String att:要操作的属性Object value:要设置的属性内容Class<?> type:要设置的属性类型*/public static void setter(Object obj,String att,Object value,Class<?> type){try{Method met = obj.getClass().getMethod("set"+initStr(att),type) ;// 得到setter方法met.invoke(obj,value) ;// 设置setter的内容}catch(Exception e){e.printStackTrace() ;}}public static void getter(Object obj,String att){try{Method met = obj.getClass().getMethod("get"+initStr(att)) ;// 得到setter方法System.out.println(met.invoke(obj)) ;// 调用getter取得内容}catch(Exception e){e.printStackTrace() ;}}public static String initStr(String old){// 将单词的首字母大写String str = old.substring(0,1).toUpperCase() + old.substring(1) ;return str ;}};


 

 

 

使用反射直接操作类中的属性

public class InvokeFieldDemo{public static void main(String args[]) throws Exception{Class<?> c1 = null ;Object obj = null ;c1 = Class.forName("org.lxh.demo15.Person") ;// 实例化Class对象obj = c1.newInstance() ;Field nameField = null ;Field ageField = null ;nameField = c1.getDeclaredField("name") ;// 取得name属性ageField = c1.getDeclaredField("age") ;// 取得name属性nameField.setAccessible(true) ;// 此属性对外部可见ageField.setAccessible(true) ;// 此属性对外部可见nameField.set(obj,"fly") ;// 设置name属性内容ageField.set(obj,30) ;// 设置age属性内容System.out.println("姓名:" + nameField.get(obj)) ;System.out.println("年龄:" + ageField.get(obj)) ;}};

 

原创粉丝点击