Java反射中getXXX和getDeclaredXXX的解析
来源:互联网 发布:js判断页面加载完毕 编辑:程序博客网 时间:2024/05/18 01:23
今天复习一下Java反射部分知识,想获得一写新的知识点,在网上搜了一遍基本差不多的内容。讲讲getDeclaredXXX()和getXXX(),从网上搜的知识来看说,getDeclaredXXX()能访问私有的方法或属性,getXXX()只能访问公有的方法或属性,我之前也停留在这种水平,下面分享一下今天的学习。
分析getFields VS getDeclaredFields,其他的类似。
getFields:返回本类中和父类中的公有属性。PS:如果该类代表的是array类、原生类型(例如:int.class)以及void
类型,返回的是长度为0的数组。为什么只有公有属性?看源码
public Field[] getFields() throws SecurityException { // be very careful not to change the stack depth of this // checkMemberAccess call for security reasons // see java.lang.SecurityManager.checkMemberAccess checkMemberAccess(Member.PUBLIC, Reflection.getCallerClass(), true);//检查公有权限 return copyFields(privateGetPublicFields(null)); }getDeclaredFields:返回本类中的public, protected, default*(package) access, private公有属性,但是不包含
从父类继承过来的属性。PS:如果该类代表的是array类、原生类型(例如:int.class)以及void类型,返回的是长度
为0的数组。
public Field[] getDeclaredFields() throws SecurityException { // be very careful not to change the stack depth of this // checkMemberAccess call for security reasons // see java.lang.SecurityManager.checkMemberAccess checkMemberAccess(Member.DECLARED, Reflection.getCallerClass(), true);//检查声明的访问权限 return copyFields(privateGetDeclaredFields(false)); }到这里只有
checkMemberAccess(Member.PUBLIC, Reflection.getCallerClass(), true);
checkMemberAccess(Member.DECLARED, Reflection.getCallerClass(), true);
这Member.PUBLIC和Member.DECLARED不一样
在看看Member的源码:
Member是一个接口,保存着反射的信息。
public interface Member { /** * Identifies the set of all public members of a class or interface, * including inherited members. *标示类或接口所有的公共成员,并包含从父类中继承而来 * @see java.lang.SecurityManager#checkMemberAccess */ public static final int PUBLIC = 0; /** * Identifies the set of declared members of a class or interface. * Inherited members are not included. *标示类或接口所有的声明的成员,但不包含从父类继承 * @see java.lang.SecurityManager#checkMemberAccess */ public static final int DECLARED = 1;......}
0 0
- Java反射中getXXX和getDeclaredXXX的解析
- 代码测试:java反射中getXXX和getDeclaredXXX的区别
- Java中Class.getXXX()和Class.getDeclaredXXX()的区别
- 安卓中使用反射以及getDeclaredXXX()和getXXX()方法的区别
- Java的Class类提供了许多的getDeclaredxxx和getxxx方法,例如getDeclaredMethod和getMethod成对出现,那它们有什么区别呢?
- Struts2中使用execAndWait后,在 Action中调用getXXX()方法报告java.lang.NullPointerException异常的原因和解决方法
- struts2的debug标签和getXxx方法
- 【备忘】java中File类的getXxx(路径相关方法)返回值
- Java的反射解析
- java 中this,setxxx,getxxx讲解与练习
- java request.getxxx()
- java中new和反射的区别
- JSONObject对象的optXXX和getXXX的区别
- 关于c++和C的getXXX系列函数
- java反射的应用场景和解析方法
- java反射(二)-基于反射和注解的Excel解析工具Demo
- Java反射生成json和解析json
- java反射中getDeclaredMethods和getMethods的区别
- wk2 50. Pow(x, n)
- Water+
- IOS开发中的弹框综述
- 两个升序单向链表的合并
- c语言基础
- Java反射中getXXX和getDeclaredXXX的解析
- final,finally,finalize的区别
- Linux_Ubuntu_openwrt_编译环境准备
- javax.mail.AuthenticationFailedException: 550
- 【LeetCode】240. Search a 2D Matrix II (Medium)
- BFS广度优先搜索(5)(亦可以用DFS)--hdu1241(poj1562)(基础题)
- 397.Longest Increasing Continuous Subsequence-最长上升连续子序列(容易题)
- 9.13总结
- Leetcode解题报告:215. Kth Largest Element in an Array