ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
# 第四章第一节--反射调用方法 标签(空格分隔): 廖雪峰 --- ## 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核心方法可能会失效.