使用反射调用类中的指定方法
通过反射调用类中的方法:
无参数的方法:
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)) ;
}
};