背景

之前走读了Class类的函数,能让我们更灵活的获取一个类中的信息。然而仅有类信息还是不够的,想要达到灵活调用类中函数的功能还需要借助于reflect包的Method类,本博文将走读Method类的主要方法。

代码+实战结果

Main.java

public class Main {public static void main(String[] args) throws NoSuchMethodException, IllegalAccessException, InstantiationException, InvocationTargetException {// 获取本类所有的方法Method[] methods = Main.class.getDeclaredMethods();for (Method method : methods) {// public static void com.ztjy.Main.main(java.lang.String[]) throws java.lang.NoSuchMethodException// public void com.ztjy.Main.demoTest(java.lang.Integer,java.lang.String) throws java.lang.ExceptionSystem.out.println(method);}// 2System.out.println(methods.length);// 获取Method方法对象Method method = Main.class.getMethod("demoTest", Integer.class, String.class);// demoTestSystem.out.println(method.getName());// 获取方法注解(如果没有的话则返回null)// @com.ztjy.DemoAnnotation(value=123)System.out.println(method.getAnnotation(DemoAnnotation.class));// void (包含了泛型)System.out.println(method.getGenericReturnType());// voidSystem.out.println(method.getReturnType());// sun.reflect.annotation.AnnotatedTypeFactory$AnnotatedTypeBaseImpl@1376c05c 还不太清楚这个东西System.out.println(method.getAnnotatedReceiverType());// sun.reflect.annotation.AnnotatedTypeFactory$AnnotatedTypeBaseImpl@51521cc1 还不太清楚这个东西System.out.println(method.getAnnotatedReturnType());// void 还不太清楚这个东西System.out.println(method.getAnnotatedReturnType().getType());// @com.ztjy.DemoAnnotation(value=123)for (Annotation annotation : method.getDeclaredAnnotations()) {System.out.println(annotation);}// class com.ztjy.MainSystem.out.println(method.getDeclaringClass());// my-defaultValue,这可以获取注解中函数的默认值System.out.println(DemoAnnotation.class.getMethod("value").getDefaultValue());// class java.lang.Exceptionfor (Class<?> exceptionType : method.getExceptionTypes()) {System.out.println(exceptionType);}// class java.lang.Exceptionfor (Type genericExceptionType : method.getGenericExceptionTypes()) {System.out.println(genericExceptionType);}// class java.lang.Integer// class java.lang.Stringfor (Type genericParameterType : method.getGenericParameterTypes()) {System.out.println(genericParameterType);}// trueSystem.out.println(method.getModifiers() == Modifier.PUBLIC);// 获取参数的注解// @javax.validation.constraints.NotNull(message={javax.validation.constraints.NotNull.message}, groups=[], payload=[])for (Annotation[] parameterAnnotation : method.getParameterAnnotations()) {for (Annotation annotation : parameterAnnotation) {System.out.println(annotation);}}// 2System.out.println(method.getParameterCount());// class java.lang.Integer// class java.lang.Stringfor (Class<?> parameterType : method.getParameterTypes()) {System.out.println(parameterType);}// java.lang.Integer arg0// java.lang.String arg1for (Parameter parameter : method.getParameters()) {System.out.println(parameter);}// 参考 https://www.zhihu.com/question/54895701System.out.println(method.isBridge());// 参考 https://blog.csdn.net/u010003835/article/details/76850242,default关键字只能在接口中使用,具体参考博文System.out.println(method.isDefault());// 没太明白。。。。参考:https://blog.csdn.net/feier7501/article/details/19088361System.out.println(method.isSynthetic());// false,可变参数System.out.println(method.isVarArgs());// 权限是否可访问,falseSystem.out.println(method.isAccessible());// trueSystem.out.println(method.isAnnotationPresent(DemoAnnotation.class));// 1123method.invoke(Main.class.newInstance(), 1, "123");}@DemoAnnotation(value = "123")public void demoTest(@NotNull Integer integer, String string) throws Exception {System.out.println(integer + string);}
}

DemoAnnotation.java

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface DemoAnnotation {String value() default "my-defaultValue";
}

运行结果如下:

java-反射-Method类走读相关推荐

  1. 利用java反射调用类的的私有方法

    http://blog.csdn.net/sunyujia/article/details/2501709 今天和一位朋友谈到父类私有方法的调用问题,本来以为利用反射很轻松就可以实现,因为在反射看来根 ...

  2. 利用java反射调用类的的私有方法--转

    原文:http://blog.csdn.net/woshinia/article/details/11766567 1,今天和一位朋友谈到父类私有方法的调用问题,本来以为利用反射很轻松就可以实现,因为 ...

  3. java 反射 本类_Java 反射 Class类

    Java 反射 Class类 @author ixenos 摘要:Class类在反射中的地位.构造Class对象的三种方式.Class对象构造对应类型对象的三种方式 Class类在反射中的地位 位于j ...

  4. java反射 Method

    java反射 Method 获取字节码文件对象 Class c = Class.forName("fieldtest.Student"); 通过无参构造方法创建对象obj Cons ...

  5. Java反射 Constructor类

    Java反射 Constructor类 Java通过反射可以获取构造方法,和使用构造方法创造对象. 在网上找了一个比较好理解的例子来弄清楚Constructor类. public Constructo ...

  6. java反射 数组类,乐字节Java反射之三:方法、数组、类加载器和类的生命周期

    继续讲述Java反射之三:方法.数组.类加载器 一.方法 获取所有方法(包括父类或接口),使用Method即可. public static void test() throwsException { ...

  7. Java反射 Class类

    Class类的实例表示正在运行的Java应用程序中的类和接口.它是Java反射的基础,对任何一个类,首先产生一个Class对象,然后才通过class类获得其他的信息. 获取class类对象方式: 通过 ...

  8. Java 反射取类中类_Java反射机制(二):通过反射取得类的结构

    在反射运用过程中,如果你想得到一个类的完整结构,那么就要使用到java.lang.reflect包中的几个类: · Constructor  表示类中的构造方法 · Field  表示类中的属性 · ...

  9. Java反射获取类,方法

    获取Class类的实例 若已知具体的类,通过类的class属性获取,该方法最为安全可靠,程序性能最高. Class clazz = Person.class; 已知某个类的实例,调用该实例的getCl ...

  10. Cathy学习Java——反射和类的加载

    工厂设计模式 工厂方法模式 概述 工厂:就是生产特点产品的 实现方式 1>创建一个抽象工厂类,声明抽象方法 2>写一个具体抽象工厂类的子类,由子类负责对象的创建 优点:后期容易维护,增强了 ...

最新文章

  1. 学习官方示例 - SysUtils.EncodeDate、EncodeTime、StrToDate、StrToTime、StrToDateTime
  2. python快速入门神器 知乎_python数据分析之数据处理终极神器
  3. nginx 漏洞(适用于0.1.0-0.8.14)补丁
  4. 这个为生信学习打造的开源Bash教程真香!!(目录更新)!
  5. JavaScript 错误 - Throw、Try 和 Catch
  6. kubernetes视频教程笔记 (22)-存储-Secret
  7. 信号与系统公式笔记(8)——拉普拉斯变换
  8. 计算机通过华为手机上网,华为手机usb共享电脑的网络怎么办
  9. 荣耀笔记本linux版硬盘分区,荣耀MagicBook硬盘分区详细教程
  10. html的method属性,HTML中的form标签的method属性怎么用?这里有method属性的用法介绍...
  11. 机器学习实验——分类学习算法
  12. 我的翻译--针对Outernet卫星信号的逆向工程
  13. Python判断素数(质数)——循换结构、控制及else循环扩展模式的实践
  14. vue使用高德地图并且绘制多边形
  15. netlogon启动后停止_【通告更新】漏洞EXP已流出,影响巨大,微软NetLogon权限提升漏洞安全风险通告第三次更新...
  16. 前端获取QQ音乐(mp3+m4a)
  17. NR/5G - PUSCH repetition次数
  18. python自动化测试selenium(四)切换页面、切换窗口
  19. java对象——new对象的理解
  20. iPhone 4S版本查看

热门文章

  1. 【培训】渔网模式识别项目-算法培训-王博士
  2. 【Spire.PDF】Spire.PDF破解
  3. 十句冥思話--人生感悟
  4. ipad mini2显示无服务器,iPad Mini 2维修成本剖析 _苹果 iPad mini 2_平板电脑评测-中关村在线...
  5. Hyperledger -超级账本 学习报告
  6. 公子世无双,代码永流传!!!我与github。
  7. 中国楼市房贷真相:只有傻瓜才自掏腰包!
  8. OpenGL播放yuv数据流(着色器SHADER)-IOS(一)
  9. 12 Steps to Better Code【改善代码的12步】
  10. 1w存银行一年多少利息_五百万存银行 一年利息有多少呢?