您的位置:首页 > 其它

方法的反射---反射学习笔记(二)

2015-09-02 16:07 323 查看
方法的反射:其实就是通过方法的对象来调用方法。

如何获取某个方法:方法的名称和方法的参数列表才能唯一决定某个方法

方法反射如何操作呢?

1.要获取一个方法(就是获取类的信息),要获取类的信息首先要获取类的类类型。

获取类的类类型:

类的实例对象.getClass()

2.获取方法:

getMethod(name,
parameterTypes)方法:获取的是public的某一个(name)方法

getDeclaredMethod(name,
parameterTypes)方法:获取自己声明的具体某一个(name)方法

3.方法的反射操作(等于类的对象调用类的方法):

method.invoke(对象,参数列表);

package com.test.methodDemo;

import java.lang.reflect.Method;

public class MethodTest {

public static void main(String[] args) {
// 获取print(int,int)方法
// 1.要获取一个方法就是获取类的信息,获取类的信息首先要获取类的类类型
A a1 = new A();
Class c = a1.getClass();
/*
* 2.获取方法 名称和参数列表类决定getMethod(name,
* parameterTypes)方法获取的是public的某一个(name)方法 getDeclaredMethod(name,
* parameterTypes)方法获取自己声明的具体某一个(name)方法
*/

try {
// 第一种写法
// Method m1 = c.getDeclaredMethod("print", new Class[]{int.class,int.class});
// 第二种写法

Method m1 = c.getDeclaredMethod("print", int.class, int.class);
/*
* 3.方法的反射操作 方法的反射操作是用m对象来调用 和a1.print(10,20)调用的效果完全相同
* 方法如果没有返回值返回null,有返回值返回具体的返回值
*/
// Object o1 = m1.invoke(a1, new Object[] { 10, 20 });
Object o1 = m1.invoke(a1, 10, 20);

Method m2 = c.getDeclaredMethod("print", String.class, String.class);
Object o2 = m2.invoke(a1, "hello", "world");// a1.print("hello","world");

Method m3 = c.getDeclaredMethod("add", double.class, double.class);
Object o3 = m3.invoke(a1, 10, 20);// a1.add(10,20);
System.out.println((double) o3);

} catch (Exception e) {
e.printStackTrace();
}
}

}

class A {
public void print(int a, int b) {
System.out.println(a + b);
}

public void print(String a, String b) {
System.out.println(a.toUpperCase() + "," + b.toUpperCase());// 将String中的所有字符都转换为大写

}

public double add(double a, double b) {
return a + b;
}
}


运行结果:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: