设为首页 加入收藏

TOP

Java反射机制测试(一)
2014-11-23 21:26:36 来源: 作者: 【 】 浏览:29
Tags:Java 反射 机制 测试

Java 通过反射出方法名来运行 invoke该方法,此名称字符串一定完全匹配并且区分大小写


Method meth =cla.getMethod("setStr1", new Class[]{java.lang.String.class}); new class 参数类型集合


Object result=meth.invoke(object, new Object[]{"test..."}); new object 为输入参数类型的值 与上面的数目是对应的。



import java.lang.reflect.Field;


import java.lang.reflect.InvocationTargetException;


import java.lang.reflect.Method;


import java.lang.reflect.Type;


import java.util.Iterator;


public class TestMe {


private String str1;


private String str2;


private String str3;


public void method1() {


System.out.println("TestMe--------method1方法..");


}


public void method2() {


System.out.println("TestMe--------method2方法..");


}


public void method3() {


System.out.println("TestMe--------method3方法..");


}


public void setStr1(String str1) {


this.str1 = str1;


System.out.println(str1);


}


public String getStr1() {


return str1;


}


public void setStr2(String str2) {


this.str2 = str2;


}


public String getStr2() {


return str2;


}


public void setStr3(String str3) {


this.str3 = str3;


}


public String getStr3() {


return str3;


}


public static void main(String[] args) {


test();


}


private static void test() {


Class cla = TestMe.class;


try {


Object object = cla.newInstance();


Method[] methods = cla.getMethods();


Method method;


for (int i = 0; i < methods.length; i++) {


method = methods[i];


System.out.println(method.getName());


// 方法的返回值类型


Type returntype = method.getReturnType();


System.out.println("方法返回值类型" + returntype);


// 方法的参数类型


Type[] types = method.getGenericParameterTypes();


for (int j = 0; j < types.length; j++) {


Type type = types[j];


System.out.println("方法参数类型type: " + j + "----" + type);


}


}


Field[] fileds = cla.getDeclaredFields();


Field field;


for (int i = 0; i < fileds.length; i++) {


field = fileds[i];


System.out.println("---------------------------");


System.out.println(field.getType());


System.out.println(field.getName());


}



Method meth =cla.getMethod("setStr1", new Class[]{java.lang.String.class});


Object result=meth.invoke(object, new Object[]{"test..."});




} catch (InstantiationException e) {


e.printStackTrace();


} catch (IllegalAccessException e) {


e.printStackTrace();


} catch (SecurityException e) {


// TODO Auto-generated catch block


e.printStackTrace();


} catch (NoSuchMethodException e) {


// TODO Auto-generated catch block


e.printStackTrace();


} catch (IllegalArgumentException e) {


// TODO Auto-generated catch block


e.printStackTrace();


} catch (InvocationTargetException e) {


// TODO Auto-generated catch block


e.printStackTrace();


}


}


}


运行结果:


main
方法返回值类型void
方法参数类型type: 0----class [Ljava.lang.String;
method1
方法返回值类型void
method2
方法返回值类型void
method3
方法返回值类型void
setStr1
方法返回值类型void
方法参数类型type: 0----class java.lang.String
getStr1
方法返回值类型class java.lang.String
setStr2
方法返回值类型void
方法参数类型type: 0----class java.lang.String
getStr2
方法返回值类型class java.lang.String
setStr3
方法返回值类型void
方法参数类型type: 0----class java.lang.String
getStr3
方法返回值类型class java.lang.String
wait
方法返回值类型void
wait
方法返回值类型void
方法参数类型type: 0----long
方法参数类型type: 1----int
wait
方法返回值类型void
方法参数类型type: 0----long
hashCode
方法返回值类型int
getClass
方法返回值类型class java.lang.Class
equals
方法返回值类型boolean
方法参数类型type: 0----class java.lang.Object
toString
方法返回值类型class java.lang.String
notify
方法返回值类型void
notifyAll
方法返回值类型void
---------------------------
class java.lang.String
str1
---------------------------
cl

首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Android应用实现多语言切换 下一篇Java Class对象测试

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: