方法的反射---反射学习笔记(二)
2015-09-02 16:07
323 查看
方法的反射:其实就是通过方法的对象来调用方法。
如何获取某个方法:方法的名称和方法的参数列表才能唯一决定某个方法
方法反射如何操作呢?
1.要获取一个方法(就是获取类的信息),要获取类的信息首先要获取类的类类型。
获取类的类类型:
类的实例对象.getClass()
2.获取方法:
getMethod(name,
parameterTypes)方法:获取的是public的某一个(name)方法
getDeclaredMethod(name,
parameterTypes)方法:获取自己声明的具体某一个(name)方法
3.方法的反射操作(等于类的对象调用类的方法):
method.invoke(对象,参数列表);
运行结果:
如何获取某个方法:方法的名称和方法的参数列表才能唯一决定某个方法
方法反射如何操作呢?
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; } }
运行结果:
相关文章推荐
- 数学符号读法
- TinyXml快速入门(一)
- STM32软件加密
- Scikit-learn 安装(Ubuntu环境)
- C语言数值常数
- Fragment Error inflating class fragment
- OC内存管理
- 处理程序“PageHandlerFactory-Integrated”在其模块列表中有一个错误模块“ManagedPipelineHandler”
- 【匹配公式合集】
- 画中画 视频叠加 视频覆盖 overlay
- 自动化测试框架调研
- Android属性动画
- 教你10分钟内在Windows上完成Rails开发环境的安装和配置
- 关于iOS地图定位中点击设置->隐私->定位服务 闪退问题
- [转] Python 模块学习:os模块
- JAVA学习步骤指导
- TestComplete如何设置参数默认值
- 关于sdk22 下的apidemo导入报错问题
- Activity之间传递数据(一)传递简单类型数据
- Windows下iPhone Web App开发环境配置