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

来源:互联网 发布:ajax php 编辑:程序博客网 时间:2024/04/30 00:35

方法的反射:其实就是通过方法的对象来调用方法。

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


方法反射如何操作呢?

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;}}


运行结果:



0 0
原创粉丝点击