Java的Class类提供了很多的getDeclaredxxx方法和getxxx方法,例如getDeclaredmethod和getMethod成对出现,getDeclaredConstructors和getConstructors也是成对出现.

那这两者有什么区别呢?

 1 import java.lang.reflect.Method;
 2
 3 public class Client {
 4     public static void main(String[] args) throws Exception {
 5         //方法名称
 6         String methodName = "doStuff";
 7         Method m1 = Foo.class.getDeclaredMethod(methodName);
 8         System.out.println(m1);//输出:void cn.summerchill.test.Client$Foo.doStuff()
 9         Method m2 = Foo.class.getMethod(methodName);
10         System.out.println(m2);//抛出异常 Exception in thread "main" java.lang.NoSuchMethodException: cn.summerchill.test.Client$Foo.doStuff()
11
12     }
13
14     static class Foo {
15         void doStuff() {}
16     }
17 }

上面的异常是说m2变量的getMethod方法没有找到doStuff()方法,因为getMethod()方法获得的是所有public访问级别的方法,包括从父类继承的方法.

而getDeclaredMethod()方法获得的是自身类的所有方法,包括pulbic,private方法等,而且不受限于访问权限.

Java之所以这么处理,是因为反射本意只是正常代码逻辑的一种补充,而不是让正常代码逻辑产生翻天覆地的变化,所以pulbic的属性和方法最容易获取,私有属性和方法也可以获取,但是要限定本类.

如果要获得所有继承自父类的方法,如何实现?

先获得父类,然后使用getDeclaredMethods,之后持续递归即可.

本文转自SummerChill博客园博客,原文链接:http://www.cnblogs.com/DreamDrive/p/5626119.html,如需转载请自行联系原作者

适时选择getDeclaredxxx和getxxx相关推荐

  1. [改善Java代码]适时选择不同的线程池来实现

    Java的线程池实现从最根本上来说只有两个:ThreadPoolExecutor类和ScheduledThreadPoolExecutor类,这两个类还是父子关系,但是Java为了简化并行计算,还提供 ...

  2. 阿里java高级工程师面试100题(建议收藏)

    1,java堆,分新生代老年代,新生代有Eden,from surviver,to surviver三个空间,堆被所有线程共.eden内存不足时,发生一次minor GC,会把from survivo ...

  3. Java高质量代码之 — 泛型与反射

    在Java5后推出了泛型,使我们在编译期间操作集合或类时更加的安全,更方便代码的阅读,而让身为编译性语言的Java提供动态性的反射技术,更是在框架开发中大行其道,从而让Java活起来,下面看一下在使用 ...

  4. 阿里java高级工程师面试100题

    1,java堆,分新生代老年代,新生代有Eden,from surviver,to surviver三个空间,堆被所有线程共.eden内存不足时,发生一次minor GC,会把from survivo ...

  5. 阿里高级面试题 2019

    阿里内推Java一面题目 数据库 1. 使用mysql索引都有哪些原则??索引什么数据结构??B+tree 和 B tree 什么区别?? 1. 对于查询频率高的字段创建索引: 2. 对排序.分组.联 ...

  6. Github即将破百万的PDF:编写高质量代码改善JAVA程序的151个建议

    代码是我们前进的基石. 废话不多说直接把本书部分内容展示出来 目录 == 第1章Java开发中通用的方法和准则/1 建议1:不要在常量和变量中出现易混淆的字母/2 建议2:莫让常量蜕变成变量12 建议 ...

  7. 策略模式的应用——游戏中武器的选择

    策略模式(Strategy Pattern):定义一系列算法类,将每一个算法封装起来,并让它们可以相互替换,策略模式让算法独立于使用它的客户而变化,也称为政策模式(Policy).策略模式是一种对象行 ...

  8. 23种设计模式-个人笔记(三)

    目录 行为型模式 12.模板方法模式 12.1.模式的定义与特点 12.2.模式的结构与实现 12.3.模板方法模式的钩子方法 12.4.模板方法模式在Spring框架应用的源码分析 12.5.模板方 ...

  9. 23种设计模式介绍以及在Java中的实现

    本文章出自:blog.csdn.net/anxpp/artic- 若要查看原文请点击 文章中的示例源码在github上:github.com/anxpp/JavaD- 由于CSDN上的下拉翻页比较麻烦 ...

最新文章

  1. 光刻技术的“鬼斧”之变
  2. 反射获取成员方法并运行
  3. Java分页查询工具类
  4. WCF服务实例激活类型编程与开发(转)
  5. Spring Boot笔记-目前对Web后端开发的认识
  6. flask第二十篇——模板【3】
  7. 通信工程领域当前的主流技术及其社会需求调查报告
  8. 21. Django进阶:内建用户系统
  9. 多视几何_计算两幅图像之间的基础矩阵F和一副图像上的点在另一福图像上的极线L
  10. MP4文件中提取H264码流保存成H264文件
  11. win查看产品密钥的方法
  12. 电脑怎么录制玩王者荣耀的过程
  13. html2canvas文字消失,html2canvas截图丢失部分元素
  14. gitlab服务: kex_exchange_identification: Connection closed by remote host
  15. 知乎周源微信_每周源代码7
  16. 每个程序员都应该了解的内存知识(2)-CPU caches
  17. Prometheus 通过钉钉告警
  18. jsp+servlet实现的简单登录验证
  19. GitHub 忘记SSH密钥
  20. 阿里云启动视频云V5计划,全面赋能生态合作伙伴

热门文章

  1. 通过 39 个 问答方式快速了解学习 Git
  2. 歌词数据解析、歌词滚动、歌词进度控制功能的实现(基于js-base64、lyric-parser、better-scroll),以vue项目为例
  3. 谈谈利用JavaScript结合相对单位rem实现自适应布局的简单而实用的方法
  4. 规则引擎Easy-rules
  5. OpenCV:OpenCV中的 parallel_for 和opencv parallel_for_
  6. 0xc000007b:vs2012+Opencv2.4.4出现0xc000007b问题
  7. 华容道6×6图解_2008款马自达6仪表盘图解,仪表盘故障指示灯图解
  8. 利用Linux系统生成随机密码的10种方法
  9. Webwork 学习之路【02】前端OGNL试练
  10. apache个人主页搭建