反射机制学习3(反射调用方法)

来源:互联网 发布:java编码转换类 编辑:程序博客网 时间:2024/05/17 21:55
<pre name="code" class="java"><pre name="code" class="java">package com.mypractice.second;public class MethodDemo {private String name;private int age;public void getInfo(){//无参方法name = "朱天鹏1";age = 21;}public void getInfo(String name){//一个参数方法 this.name = name;age = 22;}public void getInfo(String name,int age){//两个参数方法this.name = name;this.age = age;}public void getMessage(){//获取信息System.out.println("name:"+name+"\nage:"+age);}}


package com.mypractice.second;import java.lang.reflect.InvocationTargetException;import java.lang.reflect.Method;public class MethodDemoTest {/** * @param args * @throws IllegalAccessException  * @throws InstantiationException  * @throws NoSuchMethodException  * @throws SecurityException  * @throws InvocationTargetException  * @throws IllegalArgumentException  */public static void main(String[] args) throws InstantiationException, IllegalAccessException, SecurityException, NoSuchMethodException, IllegalArgumentException, InvocationTargetException {//使用无参方法Class c = MethodDemo.class;//获取Class类MethodDemo methodDemo1 = (MethodDemo)c.newInstance();//反射MethodDemo对象Method method1 = c.getMethod("getInfo", null);//获取getInfo()方法method1.invoke(methodDemo1, null);//调用获取的方法methodDemo1.getMessage();//打印方法的信息//使用有参方法MethodDemo methodDemo2 = (MethodDemo)c.newInstance();//反射MethodDemo对象Method method2 = c.getMethod("getInfo",String.class,int.class);method2.invoke(methodDemo2,"aaa",22);methodDemo2.getMessage();}}


运行结果:


总结:

    1.调用方法时

<pre name="code" class="java"> Method method2 = c.getMethod("getInfo",String.class,int.class);

必须使用int.class 不能使用Integer.class。而构造方法中则使用Integer.class

    2.invoke(obj,objs...),第一个参数为你要使用方法的对象,第二个参数是可变参数,为你要传入的参数。

0 0
原创粉丝点击