java 反射访问方法
来源:互联网 发布:网络流行语2016我好饿 编辑:程序博客网 时间:2024/06/08 10:21
1.待测试类
public class Method {
static void staticMethod() {
System.out.println("执行静态的空方法staticMethd");
}
public int publicMethod(int i) {
System.out.println("执行publicMethod方法");
return i * 100;
}
protected int protectedMethod(String s, int i) {
System.out.println("执行protectedMethod方法");
return Integer.valueOf(s) + i;
}
private String privateMethod(String ...strings ) {
System.out.println("执行privateMethod方法");
StringBuffer stringBuffer = new StringBuffer();
for (int i = 0; i < strings.length; i++) {
stringBuffer.append(strings[i]);
}
return stringBuffer.toString();
}
}
2.测试类
import java.lang.reflect.InvocationTargetException;
public class TestMethod {
public static void main(String[] args) {
Method method = new Method();
Class example = method.getClass();
// 获取所有方法存放在数组中
java.lang.reflect.Method[] declaredMethods = example.getDeclaredMethods();
for (int i = 0; i < declaredMethods.length; i++) {
java.lang.reflect.Method meth = declaredMethods[i];
System.out.println("名称为:" + meth.getName());
System.out.println("是否允许带有变参: " + meth.isVarArgs());
System.out.println("入口参数类型依次为:");
// 获取所有参数类型
Class[] parameterTypes = meth.getParameterTypes();
for (int j = 0; j < parameterTypes.length; j++) {
System.out.println(parameterTypes[j] + "\t");
}
//获取方法返回值的类型
System.out.println("返回值类型为:" + meth.getReturnType());
// 获取方法可能抛出的所有异常类型
System.out.println("可能抛出的异常类型有:");
Class[] exceptionTypes = meth.getExceptionTypes();
for (int j = 0; j < exceptionTypes.length; j++) {
System.out.println(exceptionTypes[j] + " \t");
}
boolean isTurn = true;
while(isTurn) {
isTurn = false;
try {
if ("staticMethod".equals(meth.getName())) {
meth.invoke(method);
} else if ("publicMethod".equals(meth.getName())) {
System.out.println("返回值为:" + meth.invoke(method, 40));
} else if ("protectedMethod".equals(meth.getName())) {
System.out.println("返回值为:" + meth.invoke(method, "10", 5));
} else if ("privateMethod".equals(meth.getName())) {
Object[] parameters = new Object[] {new String[]{"abc", "123", "def456"} };
System.out.println("返回值为" + meth.invoke(method, parameters));
}
} catch (IllegalAccessException e) {
// e.printStackTrace();
System.out.println("执行方法时抛出异常,执行setAccessible方法");
meth.setAccessible(true);
isTurn = true;
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
}
}
}
}
- java 反射访问方法
- java 反射 访问private 方法
- java 反射访问构造方法
- java 反射 访问构造方法
- java反射访问私有属性和方法
- 利用java反射访问私有方法
- java反射机制访问private方法
- Java 反射访问私有方法和字段
- java反射技术访问私有方法
- 反射访问方法
- 反射访问构造方法
- 【Java】java使用反射访问对象方法和成员变量
- java反射访问私有变量和私有方法
- Java反射访问私有变量和私有方法
- Java反射访问私有变量和私有方法相关搜集
- Java反射之访问私有属性或方法
- java反射机制访问对象的私有方法
- java反射应用--调用方法与访问属性
- 实战 SSH 端口转发
- 如何查看QTP对象的属性列表
- 《贝赛尔曲线》方法实现平滑曲线
- 规则引擎决策表应用
- Windows Server2012 虚拟机复制及故障转移(Part2)
- java 反射访问方法
- 在xcode5中修改整个项目名
- IOS:更新xcode后真机显示不出来
- microsoft excel使用技巧和问题解决
- 素因子分解 (快速筛法&&试除法)
- A. Drazil and Date
- 算法:两种方式(递归/循环)实现二分查找
- Windows下配置nginx + php
- 哈希表的创建查询插入删除销毁