import javalangreflectConstructor;
import javalangreflectMethod;
public class ReflectDemo {
public static void main(String[] args) throws Exception {
// 获取字节码文件对象
Class c = ClassforName("cnitcast_01Person");
// 获取所有的方法
// Method[] methods = cgetMethods(); // 获取自己的包括父亲的公共方法
// Method[] methods = cgetDeclaredMethods(); // 获取自己的所有的方法
// for (Method method : methods) {
// Systemoutprintln(method);
// }
Constructor con = cgetConstructor();
Object obj = connewInstance();
/
Person p = new Person(); pshow();
/
// 获取单个方法并使用
// public void show()
// public Method getMethod(String name,Class<> parameterTypes)
// 第一个参数表示的方法名,第二个参数表示的是方法的参数的class类型
Method m1 = cgetMethod("show");
// objm1(); // 错误
// public Object invoke(Object obj,Object args)
// 返回值是Object接收,第一个参数表示对象是谁,第二参数表示调用该方法的实际参数
m1invoke(obj); // 调用obj对象的m1方法
Systemoutprintln("----------");
// public void method(String s)
Method m2 = cgetMethod("method", Stringclass);
m2invoke(obj, "hello");
Systemoutprintln("----------");
// public String getString(String s, int i)
Method m3 = cgetMethod("getString", Stringclass, intclass);
Object objString = m3invoke(obj, "hello", 100);
Systemoutprintln(objString);
// String s = (String)m3invoke(obj, "hello",100);
// Systemoutprintln(s);
Systemoutprintln("----------");
// private void function()
Method m4 = cgetDeclaredMethod("function");
m4setAccessible(true);
m4invoke(obj);
}
}
java的反射用法:(异常请自行处理)
①找到类:Class cl = ClassforName("javautilDate");
②创建对象(要求这个类中含有空参数的构造方法):Object obj = clnewInstence();
③根据名称和参数找方法:Method method1 = clgetMethod("getTime");//如果没有参数不用写第二个参数如果有参数的如:Method method2 = clgetMethod("setTime",longclass);
④在某个对象上面执行方法,Object result = method1invoke(obj);//如果有参数的Object result = method2invoke(obj,21317362721);
执行的方如果有返回值,将返回值返回,否则返回null
答案是没法获取。
首先反射获取的是类、属性、或者方法的定义,就拿方法来说,方法的定义是什么呢?
方法的定义包括:方法名,方法的参数类型列表,方法的返回值类型。
方法的参数类型列表包括什么呢?
包括每个参数的顺序和参数类型。
参数值是什么?是在这个方法被调用的时候传入的参数叫做参数值。反射呢,是获取的它的定义,并不牵扯调用,所以说没法获取。
不能,反射是可以拿到对象的属性,方案,类等信息,如一个Persion类,有name属性,也有相应的get/set方法,你可以通过反射去修改这个name的的值,但你不能在运行getName方法时去改变它的返回值,必须利用代理,在方法外面做拦截。 利用AOP,在返回前改变值即可,Aop的核心也就是动态代理。
以上就是关于Java如何接收使用反射执行方法所返回的值全部的内容,包括:Java如何接收使用反射执行方法所返回的值、在JAVA中,怎么利用反射获取一个方法、java 通过反射怎么获取方法中参数值等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)