# 第四章第一节--反射调用方法
标签(空格分隔): 廖雪峰
---
## method
通过Class实例获取method信息:
- getMethod(name,Class...):获取某个public的method(包括父类,必须是public),参数为可变参数,内部表达为数组形式,连续写更简单.
- getDeclaredMethod(name,Class):获取当前类中的某个method(不包括父类,不限行public)
- getMethods():获取所有public的methed(包括父类)
- getDeclaredMethod():获取当前类的所有method(不包含父类)
Method对象包含一个method的所有信息:
- getName():返回方法名.
- getReturnType():返回方法的返回类型.
- getParameterType():返回方法的参数类型.
- getModifiers():返回方法的修饰符.
![method方法信息描述](http://p0b921qfc.bkt.clouddn.com/18-5-18/38924171.jpg)
得到method之后通过 invoke调用无参数的method.形式为:Object invoke(Object obj).
![通过invoke调用方法](http://p0b921qfc.bkt.clouddn.com/18-5-18/68921182.jpg)
调用含有参数的invoke() 形式为:Object invoke(Object obj,Object...args).
![通过invoke调用待参方法](http://p0b921qfc.bkt.clouddn.com/18-5-18/40192563.jpg)
访问private的方法时,可以使用setAccessible(true)对于java核心类也可能因为SecurityManager而失败.
方法调用也保证了java的多态属性.
![方法调用保证多态](http://p0b921qfc.bkt.clouddn.com/18-5-18/86542447.jpg)
## 小节小结
- Method对象封装了方法的所有信息.
- 通过Class实例的方法可以获得Method实例.getMethod/getMethods/getDeclaredMethod()/getDeclaredMethods()
- 通过Method实例可以获取方法信息:getName()/getReturnType()/getParameterTypes/getModifiers
- 通过Method实例可以调用某个对象方法:Object invoke(Object instance,Object...parameters)
- 可以通过设置setAccessible(true)来访问非public的方法,对于java核心方法可能会失效.
- 前言
- 一:Java快速入门
- 二:Java面向对象编程
- 三:Java异常处理
- 错误处理
- Java的异常
- 捕获异常
- 抛出异常
- 自定义异常
- 断言和日志
- 使用断言
- 使用JDK Logging
- 使用Commons Logging
- 使用Log4j
- 四:Java反射与泛型
- 反射
- Class类
- 访问字段
- 调用方法
- 调用构造方法
- 获取继承关系
- 注解
- 使用注解
- 定义注解
- 处理注解
- 泛型
- 什么是泛型
- 使用泛型
- 编写泛型
- 擦拭法
- extends通配符
- super通配符
- 泛型和反射
- 五:Java集合
- Java集合简介
- Java集合简介
- List
- 使用List
- 编写equals方法
- Map
- Set
- Queue
- Stack
- 最佳实践
- 六:Java IO编程
- 七:Java处理日期和时间
- 八:JUnit单元测试
- 九:Java正则表达式
- 十:Java加密与安全
- 十一:Java多线程编程
- 十二:Maven基础
- 十三:Java网络编程
- 十四:Java操作XML和JSON
- 十五:Java JDBC编程
- 十六:Java函数式编程