java field, property,variable及getField和getDeclaredField的区别
java 里面的field ,property, attribute,variable的区别
field: 就是定义的用于保存数据的字段
property: property是用于描述类中的特征,所以property比field的含义要广,因为特征包含的方面更加广,一个数据可以代表某方面的特征,但是并不是所有的特征都是你要的数据,它可能是类本身的某个特性的描述。
variable:变量,就是我们平时看到的变量。
综上:如果你要想通过反射来获取某个数据模型里面的字段的话跟Field相关,跟其它的没多大关系。
getField:获取某个类的所有public字段(包含所继承的类的所有字段)
需要注意的是getField这个方法有很多的条件限制:在api文档里面提到了,如果某个类(这里取名类A),类A中如果不包含public关键字修饰的Field,或类A是一个数组类型,原子类型(byte,short,int,long,char,float,double,boolean),无返回值类型的时候,这个方法返回的数组是一个长度为0的数组。假如你通过这个方法得到了要返回的字段了,这些字段是所有它的继承与实现的父类,接口,及自身的字段列表。注意public申明的是字段而不是说你的get,set 方法是用public关键字生命的,假如的定义的成员变量 a 这个字段没有public申明那么通过这个方法是取不到的。这里面有一句话蛮难理解的是“类A是一个数组类型,原子类型(byte,short,int,long,char,float,double,boolean),无返回值类型的时候”,它的意思是这个类型是你对象申明的类型,数组类型是 int []这种,而不是说你的类继承了Array这个类型。以下举个例子就理解了。
private static String[] fieldNamesOfClass(Class aClass){
if(aClass == null){
return null;
}
Field fields[] = aClass.getFields();
int length = fields.length;
String fieldNames[] = new String[length];
for (int i=0; i<length; i++){
Field field = fields[i];
fieldNames[i] = field.getName();
}
System.out.printf(fieldNames.toString());
return fieldNames;
}
int []xx = new int[3];
String[] xxfieldNames = fieldNamesOfClass(xx);
int yy = 3;
String[] yyfieldNames = fieldNamesOfClass(yy);
getDeclaredField:获取当前类的字段(包含public,protected,private修饰的所有字段,不包含其所继承类的字段),所以如果你要对某个数据模型做反射的话要注意里面的字段的定义,不要冗余了
(当然你的类或接口里面没有过申明字段,那么你掉上面那两个方法是没有一点意义的。返回的都是长度为0的数组)
获取反射字段的方法是用 getDeclaredField;
java field, property,variable及getField和getDeclaredField的区别的更多相关文章
- getField()与getDeclaredField()的区别
Java的反射机制中,用Class的getField(String name)或getDelaredField(String name)可以得到目标类的指定属性,返回类型是Field. 但这两个是有区 ...
- getField和getDeclaredField的区别
这两个方法都是用于获取字段getField 只能获取public的,包括从父类继承来的字段.getDeclaredField 可以获取本类所有的字段,包括private的,但是不能获取继承来的字段. ...
- 【java】 field 和 variable 区别及相关术语解释
Having said that, the remainder of this tutorial uses the following general guidelines when discussi ...
- java Field 二三事
java在反射时候经常用到了 Field 类. 我认为代码是最好的解释,直接上代码. 首先,用到了一个bean类,源代码如下: package com.ncs; public class P ...
- Java之Property类使用
http://blog.csdn.net/hopestar2/article/details/6372883 在项目中经常用到各种配置文件,有.properties的,也有.xml格式的 都可以通过j ...
- JAVA基础2---深度解析A++和++A的区别
我们都知道JAVA中A++和++A在用法上的区别,都是自增,A++是先取值再自增,++A是先自增再取值,那么为什么会是这样的呢? 1.关于A++和++A的区别,下面的来看个例子: public cla ...
- Java中集合List,Map和Set的区别
Java中集合List,Map和Set的区别 1.List和Set的父接口是Collection,而Map不是 2.List中的元素是有序的,可以重复的 3.Map是Key-Value映射关系,且Ke ...
- Java中的“==操作符”和equals方法有什么区别
Java中的"=="和equals方法究竟有什么区别? 1.==操作符 "=="操作符专门用来比较两个变量的值是否相等,也就是用于比较变量所对应的内存中所存储的 ...
- 列举两种不同类型的Java标识注释,并解释它们之间的区别。
列举两种不同类型的Java标识注释,并解释它们之间的区别.
随机推荐
- caffe中的props
VS .props解析 在VS 2010项目文件夹中属性表文件的新的格式(.props).Visual Studio 2010引入了用户设置文件(Microsoft.cpp.<Platfor ...
- golang内存分配
golang内存分配 new一个对象的时候,入口函数是malloc.go中的newobject函数 func newobject(typ *_type) unsafe.Pointer { flags ...
- 从设计到开发,硅谷技术专家教你做“声控”APP
编者:本文为携程机票研发部技术专家祁一鸣在携程技术微分享中的分享内容,关注携程技术中心微信公号ctriptech,获知更多一手干货. [携程技术微分享]是携程技术中心推出的线上公开分享课程,每月1-2 ...
- SQL Server - 把星期一(周一)当作每个星期的开始在一年中求取周数
先感叹一句!好长时间没有更新博客了!偶尔看到一句话,觉得被电击了 - 庸人败于懒,能人败于傲! 因此,不能再懒惰了! 今天想写一个有关计算 Week Number 的函数,刚开始觉得应该很简单,凭着感 ...
- RDLC报表打印
如果你的报表能正常显示,会看到RDLC工具条下的打印图标: 如果在客户端,第一次去点击此铵钮,如果当前操作者没有管理权限,会提示: Unable to load client print contro ...
- SQLProfiler_SQL抓包
有时候我们的某个程序或者应用在执行SQL语句时报错了, 我们需要拿到报错的SQL语句检查, 那么你可以借助:SQL Profiler工具来实现. 1.SQL Profiler是一个可以检测SQL服务器 ...
- 为什么说Babel将推动JavaScript的发展
Babel是一个转换编译器,它能将ES6转换成可以在浏览器中运行的代码.Babel由来自澳大利亚的开发者Sebastian McKenzie创建.他的目标是使Babel可以处理ES6的所有新语法,并为 ...
- ASP.NET MVC SSO单点登录设计与实现(转载)
实验环境配置 HOST文件配置如下: 127.0.0.1 app.com127.0.0.1 sso.com IIS配置如下: 应用程序池采用.Net Framework 4.0 注意IIS绑定的域名, ...
- MVC之前的那点事儿系列(7):WebActivator的实现原理详解
文章内容 上篇文章,我们分析如何动态注册HttpModule的实现,本篇我们来分析一下通过上篇代码原理实现的WebActivator类库,WebActivator提供了3种功能,允许我们分别在Http ...
- [转]CSS编码规范
单行形式书写风格的排版约束 1. 每一条规则的大括号 { 前后加空格 2. 多个selector共用一个样式集,则多个selector必须写成多行形式 3. 每一条规则结 ...