反射
方法的反射操作
a1.print(10,20);方法的反射操作时用m对象来进行方法调用 和a1.print调用的效果一样
方法如果没有返回值返回null,有返回值返回具体的返回值
Object o = m.invoke(a1,new Object[]{10,20});
//由于是可变参数,同样也可以有几个参数传几个参数
Object o = m.invoke(a1,10,20);
注意:a1是New出来的类对象。
要获取print(int,int)方法
要获取一个方法就是获取类的信息,获取类的信息首先要获取类的类类型。
Class c = obj.getClass();
获取方法 名称和参数列表来决定
getMethod获取的是public的方法
getDelcaredMethod获取自己声明的方法
Method m = c.getMethod("print",new Class[]{int.class,int.class});//由于该方法的第二个参数为可变参数,也可写成下面这种
//Method m = c.getMethod("print",int.class,int.class);
1)如何获取某个方法
方法的名称和方法的参数列表才能唯一决定某个方法
2)方法反射的操作
method.invoke(对象,参数列表)
100000000000000000
9999999999999999
8888888888
7777777777777777
66666666666
55555
4444444444
3333333333333333
22222222222222
1111111111111111
方法的反射
方法反射的操作
method.invoke(对象,参数列表)
方法的名称和方法的参数列表才能唯一决定某个方法。
方法反射的操作
利用反射机制调用方法
method.invoke(对象,参数列表) 如果没有返回值,返回null,如果有返回值返回具体的返回值,需要从Object强制转换。参数列表可以是new Object[](){object,object}; 获直接传参数 object,object。
method.invoke((对象) 调用没有参数方法。调用时使用getMethod(对象)。
getMethod(name)获取没有参数的方法,返回Method对象。
getMethod(name,parameterTypes) 获取有参数public方法包括继承的方法,name就是方法的名称,返回Method对象。提示Class...parameterTypes代表可变参数,可以是new Class[](){int.class,int.class};或者直接int.class,int.class。
getDeclaredMethod(name,paramterTypes):获得所有自己声明的方法,name就是方法的名称。Class...parameterTypes代表可变参数,可以是new Class[](){int.class,int.class};或者直接int.class,int.class。
方法反射的操作
方法的反射
Class c=a1.getClass()
获取方法
Method m=c.getDeclaredMethod(name,parameterTypes);
方法的反射操作
m.invoke(obj,args);
对于无参的方法
Method m2=c.getMethod("print");
m2.invoke(a1,new Object[]{});
Java方法反射的基本操作:
如何获取某个方法:方法的名称和方法的参数列表才能唯一决定某个方法
方法反射的操作:method.invoke(对象,参数列表)
Java方法反射的基本操作
知识点1:方法反射可以完成的功能
invoke(对象,参数列表):获取某个特定方法,方法对象的方法,它是有返回值的,如果方法返回值为void,则该方法返回值为null,如果方法有具体返回值,则该方法的返回值就是具体返回值。
getMethod(name):获取没有参数的public方法对象,name就是方法的名称,这是方法对象调用的invoke(A类对象)或者invoke(A类对象,new Object[]{})。
getMethod(name,parameterTypes):获取public方法,name就是方法的名称,parameterTypes智能提示里是Class...parameterTypes代表是可变参数,所以这里可以传数组(new Class[]{int.class}),返回值类型是Method对象。
getDeclaredMethod(name,paramterTypes):获得自己声明的方法,name就是方法的名称,parameterTypes智能提示里是Class...parameterTypes代表是可变参数,所以这里可以传数组(new Class[]{int.class},也可以是int.class这样),返回值类型是Method对象,没使用反射时可以直接使用A对象调用,使用反射就需要调用方法对象的invoke(obj,obj...parameter),obj为A对象,obj...parameter为Object[]{10,20})。
案例:获取某一方法,再进行方法反射的操作。
描述:创建一个MethodDemo1类,获取某一个方法对象,通过方法反射来操作MethodDemo1,并且提供一个A类,A类中有两个同名,但方法类型不一样的方法,。
方法的反射:
如何获取某个方法
方法的名称和方法的参数列表才能唯一决定某个方法
方法反射的操作
method.invoke(对象,参数列表)
Java 方法反射的操作
1、如何获取某个方法
方法名称和方法参数列表才能唯一决定某个方法
先获取该类的类类型
A a1 = new A();
Class c = a1.getClass();
再通过类类型获取具体的方法
c.getMethod("print",int.class,int.class);
c.getMethod("print",new Object[]{int.class,int.class});
2、方法反射的操作
Object obj = method.invoke(对象,参数列表);
Object obj = m.invoke(a1,10,20);
Object obj = m.invoke(a1,new Object[]{10,20});
如果该方法没有返回值,则返回null,如果有返回值则返回具体的值
获取方法:
Foo f = new Foo();
① Method m = f.getMethod(name,parameterTypes) ; //获取的是public下的方法
m.invoke(f,a,b);
② Method m = f.getDeclaredMethod(name,parameterTypes);//获取自己声明的方法
方法的反射操作
操作方法类Method的对象