getDeclaredField是可以获取一个类的所有字段.

getField只能获取类的public 字段.

public Field getDeclaredField(String name)

throws NoSuchFieldException, SecurityException {

checkMemberAccess(Member.DECLARED, ClassLoader.getCallerClassLoader());

Field field = searchFields(privateGetDeclaredFields(false), name);

if (field == null) {

throw new NoSuchFieldException(name);

}

return field;

}

rivate Field getField0(String name) throws NoSuchFieldException {

Field res = null;

// Search declared public fields

if ((res = searchFields(privateGetDeclaredFields(true), name)) != null) {

return res;

}

getField其实调用的是getField0.

他们最后都调用了searchFields.

不过getDeclaredField传入的是privateGetDeclaredFields(false),

getField传入的是privateGetDeclaredFields(true);

private Field[] privateGetDeclaredFields(boolean publicOnly) {

checkInitted();

Field[] res = null;

if (useCaches) {

clearCachesOnClassRedefinition();

if (publicOnly) {

if (declaredPublicFields != null) {

res = (Field[]) declaredPublicFields.get();

}

} else {

if (declaredFields != null) {

res = (Field[]) declaredFields.get();

}

}

可以看到传入条件为true的时候使用的是declaredPublicFields,意思是public字段

为false的时候使用的是declaredFields.

当然declaredFields和declaredPublicFields最终的来源是:

private native Field[] getDeclaredFields0(boolean publicOnly);

java中getfield_Java反射中getDeclaredField和getField的区别相关推荐

  1. java中的NIO和IO到底是什么区别?20个问题告诉你答案

    摘要:NIO即New IO,这个库是在JDK1.4中才引入的.NIO和IO有相同的作用和目的,但实现方式不同,NIO主要用到的是块,所以NIO的效率要比IO高很多. 本文分享自华为云社区<jav ...

  2. Java中,一切皆是对象——java中的对象类型与基本数据类型的区别

    起因:取一个list给另一个list赋值,然后在另一个list中取出进行修改.list其中类型为对象时,String时,基本数据类型时. [java中的对象类型与基本数据类型的区别] #声明和实例化 ...

  3. java堆和栈 常量池_GitHub - han-guang-xue/difference-of-stack-heap-pool: Java中堆、栈和常量池的区别...

    Java中堆.栈和常量池的区别 栈 堆 常量池的概念 首先我们先了解一下概念,Java把内存分成两种,一种叫做栈内存,一种叫做堆内存. 栈内存 存放基本类型的变量数据和对象类型的引用(请注意存放的是引 ...

  4. Java中Array和ArrayList之间的9个区别

    array和ArrayList都是Java中两个重要的数据结构,在Java程序中经常使用. 即使ArrayList在内部由数组支持,了解Java中的数组和ArrayList之间的差异对于成为一名优秀的 ...

  5. java中list,set,map集合的区别,及面试要点

    Map集合:链接: Map集合的五种遍历方式及Treemap方法 Set集合:链接: Java中遍历Set集合的三种方法 TreeSet集合:链接: Java深入了解TreeSet,和迭代器遍历方法 ...

  6. java中*和**的作用 以及 /和/*和/**的区别

    一.java中*和**的作用 "*"就表示了所有的文件,但是"*"并不包括子目录下的文件: "**"匹配包含任意级子目录中所有的文件: 二. ...

  7. 解析java中方法的重载和重写之间的区别与联系

    解析java中方法的重载和重写之间的区别与联系 1 不同点 1.1 方法重写是在不同的类中(父子类),方法重载是在同一类中 1.2 方法重载最初的目的是构造方法的多样化,方法重写的目的是让重写的方法满 ...

  8. java中取反运算符_~取反运算符

    在java虚拟机中整数有byte.short.int.long四种 分别表示 8位.16位.32位.64位有符号整数. (1)在Java中,所有数据的表示方式都是以补码形式来表示 (2)正数:原码.反 ...

  9. java 取反 值_java编程 按位取反的问题 java中取反操作是正数

    这个问题涉及到计算机内部的编码. 对于整数,计算机内部用最高位表示符号位,0表示为正,1表示为负. 对于负数,为了便于计算,计算机用补码来表示其值. 已经一个数的补码,要知道其值分两种情况: 1:符号 ...

最新文章

  1. Android应用签名详解 Eclipse+ADT
  2. 分布式锁原理及实现方式
  3. 搭建好看的静态博客(使用Hexo进行搭建)
  4. 图解PE文件实例研究
  5. Android 开发, Android 安全 精品资料收集 (持续更新...)
  6. Teams Bot的ServiceLevel测试
  7. 建模元件有哪些在MapleSim中
  8. php事件检测,细说浏览器特性检测(2)-通用事件检测_jquery
  9. oracle数据库中分区表的效果是,分区表实际测试中发现并没有什么效果,帮忙看看问题出在哪里了???...
  10. 左对齐 latex_LaTex中使用XYpic绘制交换图表
  11. dbutils mysql_mysql dbutils
  12. Spring Boot Configuration Annotation Processor not configured
  13. 年轻人先实现社会价值,再去实现人生价值
  14. ARM Linux从Bootloader、kernel到filesystem启动流程
  15. 完美解决Mac无法写入NTFS硬盘——Mounty for NTFS
  16. 利用XGBoost特征选择和堆叠集成分类器提高蛋白质-蛋白质相互作用预测精度
  17. 激活win10正式企业版
  18. Phonetic symbol 双元音 -- əʊ
  19. 2021 年 10 月 TIOBE 指数榜:Python 超越 C 语言成 20 多年来的新霸主
  20. 2020年浙江理工大学新生赛 E DD_BOND买赛博朋克2077

热门文章

  1. 【幻灯片动画制作教程】Focusky教程 | 图片与照片的排版秘籍
  2. 03 【基础篇-系统管理】
  3. 【linux C】绑定任务到特定CPU(CPU亲和性)
  4. 如何解决Pr启动错误(adobe premiere无法找到任何视频处理播放组件)
  5. ubuntu20更换节点_安装Ubuntu 20.10之后要做的10件事情
  6. “吞下”全峰快递,青旅物流想做快递业航母?
  7. 高并发dubbo服务,每次重启后都大量超时,我懵圈了
  8. “PMP”的意思是“拍马屁”,真的吗???
  9. JSP入门及JSP三种脚本
  10. 目前已经知道的乐视所有产品各个型号的强刷方法!更新X50