原文地址:http://tutorials.jenkov.com/java-reflection/fields.html

========================================================================================

使用java反射,你可以在运行时检查类的字段(成员变量)并且get/set它们的值。这些是通过Java类java.lang.reflect.Field做的。本文将会给出更详细的关于Field对象的信息。请记住也去查阅Sun的JavaDoc。下面是主题列表:

  1. Obtaining Field Objects (获取Field对象)
  2. Field Name (字段名)
  3. Field Type (字段类型)
  4. Getting and Setting Field Values (get/set字段的值)

========================================================================================

  • Obtaining Field Objects

从Class对象中获取Field对象。这里有一个例子:

Class aClass = ...//obtain class object
Field[] methods = aClass.getFields();

数组Field[ ]将会存储在类中声明的所有为public的字段的Field对象。

如果你知道你想要访问的字段的字段名,你可以像这样来访问它:

Class  aClass = MyObject.class
Field field = aClass.getField("someField");

上面的例子将会返回Field实例,和下面MyObject声明的字段someField对应:

public class MyObject{
public String someField = null;
}

如果不存在和方法getField( )接受的参数一致的字段,会抛出NoSuchFieldException异常。

========================================================================================

  • Field Name

  一旦你获取了一个Field实例,你可以像这样通过Field.getName()方法取得字段名:

Field field = ... //obtain field object
String fieldName = field.getName();

========================================================================================

  • Field Type

你可以通过Field.getType() 方法取得字段类型(String, int etc.) :

Field field = aClass.getField("someField");
Object fieldType = field.getType();

========================================================================================

  • Getting and Setting Field Values

  一旦你获取了Field对象的引用,你可以像这样通过Field.get()方法和Field.set()方法get/set字段的值:

Class  aClass = MyObject.class
Field field = aClass.getField("someField");
MyObject objectInstance = new MyObject();
Object value = field.get(objectInstance);
field.set(objetInstance, value);

传给get和set方法的参数objectInstance必须是拥有该字段的实例。在上面的例子中,用了一个MyObject的实例,因为someField是类MyObject的成员实例。
     如果字段是静态字段(public static …),则传null作为get和set方法的参数,而不是上面传的objectInstance。

========================================================================================

  • 目录

  这是一个本教程到目前为止涵盖的主题列表:

  1. Java反射——引言
  2. Java反射——Class对象
  3. Java反射——构造函数
  4. Java反射——字段
  5. Java反射——方法
  6. Java反射——Getter和Setter
  7. Java反射——私有字段和私有方法
  8. Java反射——注解
  9. Java反射——泛型
  10. Java反射——数组
  11. Java反射——动态代理
  12. Java反射——类的动态加载和重新加载

(敬请期待下一篇翻译)

【译】4. Java反射——字段的更多相关文章

  1. java反射——字段

    大家都知道反射技术在Java里面时非常重要的一个技术点,因为Java好多框架的编写都是基于反射的,别的不多说,spring框架里面的IOC就是基于反射实现.那么什么是反射呢?JAVA反射机制是在运行状 ...

  2. 【译】7. Java反射——私有字段和私有方法

    原文地址:http://tutorials.jenkov.com/java-reflection/private-fields-and-methods.html =================== ...

  3. 【译】1. Java反射——引言

    原文地址:http://tutorials.jenkov.com/java-reflection/index.html *By Jakob Jenkov Java的反射机制使得它可以在运行时检查类.接 ...

  4. 【译】2. Java反射——Class对象

    原文地址:http://tutorials.jenkov.com/java-reflection/classes.html ====================================== ...

  5. 【译】3. Java反射——构造函数

    原文地址:http://tutorials.jenkov.com/java-reflection/constructors.html ================================= ...

  6. 【译】5. Java反射——方法

    原文地址:http://tutorials.jenkov.com/java-reflection/methods.html ====================================== ...

  7. 【译】6. Java反射——Getter和Setter

    原文地址:http://tutorials.jenkov.com/java-reflection/getters-setters.html ============================== ...

  8. 【译】8. Java反射——注解

    原文地址:http://tutorials.jenkov.com/java-reflection/annotations.html ================================== ...

  9. 【译】9. Java反射——泛型

    原文地址:http://tutorials.jenkov.com/java-reflection/generics.html ===================================== ...

随机推荐

  1. sed 双引号 单引号的区别

    a="abcd" b="abc" sed -i '/$a/ s/$/$b/' test.a 我想在test.a中匹配以”abcd“开头的行,然后在行尾加入”ab ...

  2. git在实际开发中的应用

    PS: git操作实例(https://learngitbranching.js.org/?demo) 一, 创建分支,合并分支到master 1. 在远程仓库中创建master和test分支 2.本 ...

  3. Java多线程之实现Runnable接口

    package org.study2.javabase.ThreadsDemo.runnable; /** * @Auther:GongXingRui * @Date:2018/9/18 * @Des ...

  4. Python——Django-应用的models.py内容

    一.数据的相关配置 #数据库的相关配置 DATABASE = { 'default':{ #连接的数据库类型 'ENGINE':'django.db.backends.sqlite3', #连接数据库 ...

  5. excel 公式 insert 语句

    ="insert into tb_fdn_deviceaccount (zdmc,czmc,sbbh,sbmc,SZCS,SBFLMC,SBLXMC,SBGG,SBYZ,SBJZ,SBXH, ...

  6. 51nod 1503 猪和回文(dp滚存)

    题面 大意:在一个n*m的矩形中从(1,1)走到(n,m)而且走过的路径是一条回文串,统计方案数 sol:我们考虑从(1,1)和(n,m)两端开始算,这样就只要保证每次经过的字符一样就可以满足回文了, ...

  7. 人工智能将继续壮大,两会委员建议增加“AI+教育”支持板块

    导读 今年上海两会期间,上海市政协委员.上海交通大学机械与动力工程学院教授范秀敏提交提案,建议政府在推进上海人工智能专项建设中,增加“AI+教育”专项支持板块,并鼓励集聚发展AI产业的各个区,在人工智 ...

  8. 【题解】K乘积

    题目描述 有N个数,每个数的范围是[-50,50],现在你要从这N个数中选出K个,使得这K个数的乘积最大. 输入格式 第一行,N和K. 1 <= N <= 50.  1 <= K & ...

  9. 李昊大佬的CV模板

    #include<cstdio> #include<iostream> #include<cstdlib> #include<iomanip> #inc ...

  10. 洛谷p2661信息传递题解

    题目 这个题一眼看上去就是用并查集求最小环. 我们可以设两个数组分别是f,d分别表示该点的爸爸和该点到祖先的距离. 当该点的爸爸等于他时,那他肯定就是祖先. 此时信息就肯定传递完了,此时的整个图中(我 ...