反射(方法)

加载对应类的字节码文件,获取该类的Class类对象

Class cls = Class.forName("com.qfedu.a_reflect.Person");


获取所有的公共的方法

Method[] allPublicMethods = cls.getMethods();

for (Method method : allPublicMethods) {

System.out.println(method);

}


//暴力反射

//能够获取Person里面的private方法, 并且能够过滤掉从父类继承而来的方法

Method[] allMethods = cls.getDeclaredMethods();

for (Method method : allMethods) {

System.out.println(method);

}

通过反射机制,执行类中的成员方法

invoke(Object obj, Object... args);

Object obj 这是底层调用该方法的类对象

the object the underlying method is invoked from

Object... args 不定参数,是执行该放的参数列表,是Object类型

args is arguments used for method call


//向利用反射,创建一个当前类的对那个

Person p = (Person) cls.getConstructor(int.class, String.class).

newInstance(1, "狗蛋");

//获取一个指定的方法,需要的参数是方法的名字字符串和参数列表,

Method aPublicMethod = cls.getMethod("sleep", int.class);

System.out.println("49" + aPublicMethod);

aPublicMethod.invoke(p, 15);


//获取一个静态方法

Method aPublicStaticMethod = cls.getMethod("eat", null);

aPublicStaticMethod.invoke(null, null);

//利用暴力反射获取一个私有化的成员方法

Method aPrivateMethod = cls.getDeclaredMethod("testPrivate", null);

aPrivateMethod.setAccessible(true);

aPrivateMethod.invoke(p, null);

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 学习Android的同学注意了!!!学习过程中遇到什么问题或者想获取学习资源的话,欢迎加入Android学习交流群...
    kingZXY2009阅读 338评论 0 0
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,991评论 19 139
  • 时间太短 日子太长 我曾带着理想和慌张 在你渺远不及的身旁 我也常在碌碌无为里谬想 如果你也在我所不及的远方 我要...
    海红豆的奇幻漂流之旅阅读 304评论 1 1
  • 2018年的第一场雪,纷纷扬扬,就下了! 听说老家那边下了很大的雪,穿靴子雪都能灌进去,在我的记忆当中,这么大的雪...
    北小音阅读 433评论 0 3
  • 前段时间,村子里有个不幸的年轻女孩因心脏病而去世。谈起她,无流露出惋惜的!父亲却只问了声:“她几岁了?”旁人说...
    美_48fb阅读 259评论 5 1