`
huihui920823
  • 浏览: 36944 次
  • 性别: Icon_minigender_1
  • 来自: 济南
文章分类
社区版块
存档分类
最新评论

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

 
阅读更多

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

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


方法反射如何操作呢?

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


运行结果:



版权声明:本文为博主原创文章,未经博主允许不得转载。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics