5、获取Class中的字段
5、获取Class中的字段
5.1 getField(String name) 只获取共有的字段
- 返回一个 Field对象,它反映此表示的类或接口的指定公共成员字段 类对象。
/**
* 获取字节码文件的字段
*/
@Test
public void getFieldDemo() throws Exception {
Class clazz = Class.forName("com.hw.bean.Person");
Field name = clazz.getField("name");
System.out.println(name);
}
运行:

报错,原因是字段是私有的。
要反映的字段由以下算法确定。 让C成为由该对象表示的类或接口:
- 如果C声明一个具有指定名称的公共字段,那就是要反映的字段。
- 如果在上述步骤1中没有找到字段,则将该算法递归地应用于C的每个直接超级接口。直接超级接口按照它们被声明的顺序被搜索。
- 如果在上面的步骤1和2中没有找到字段,并且C具有超类S,则该算法在S上递归地调用。如果C没有超类,则抛出NoSuchFieldException 。
5.2 getDeclaredField(String name) 只获取本类 但包含私有
@Test
public void getFieldDemo() throws Exception {
Class clazz = Class.forName("com.hw.bean.Person");
Field field = // clazz.getField("name");
clazz.getDeclaredField("name");
Object instance = clazz.newInstance();
Object age = field.get(instance);
}
运行:

还是报错,不能访问私有的
5.3 java.lang.reflect.AccessibleObject
- AccessibleObject类是Field,Method和Constructor对象的基类。 它提供了将反射对象标记为在使用它时抑制默认Java语言访问控制检查的功能。
- 当使用Fields,Methods或Constructors来设置或获取字段,调用方法,或创建和初始化新的类实例时,执行访问检查(对于public,默认(包)访问,受保护和私有成员)。
5.3.1 setAccessible(boolean flag) 暴力访问
- 将此对象的 accessible标志设置为指示的布尔值。
@Test
public void getFieldDemo() throws Exception {
Class clazz = Class.forName("com.hw.bean.Person");
Field field = // clazz.getField("name");
clazz.getDeclaredField("name");
// 对私有字段的访问取消权限检查。暴力访问
field.setAccessible(true);
Object instance = clazz.newInstance();
// 对字段赋值
field.set(instance,"张四");
Object name = field.get(instance);
System.out.println(name);
}
运行:

本章节源码: ReflectDemo3
5、获取Class中的字段的更多相关文章
- [SQL]获取所有数据库名、获取数据库中表名、获取表中的字段名
--()获取所有数据库名: Select Name FROM Master..SysDatabases order by Name --()获取所有表名 --XType=''U'':表示所有用户表; ...
- 获取Django中model字段名 字段的verbose_name
obj._meta.fields 为关键 obj为model类 推荐使用函数 from django.apps import apps def getmodelfield(appname,modeln ...
- 【Java】java获取json中某个字段
import com.alibaba.fastjson.JSONObject; public class JsonTest { public static void main(String[] arg ...
- mysql获取表中的字段名
转载请注明来源:https://www.cnblogs.com/hookjc/ SELECT COLUMN_NAME FROM 'information_schema'.'COLUMNS' where ...
- 使用python来反查数据表中的字段名
1. 链接数据库 import psycopg2 conn = psycopg2.connect(user,host,port,database,password) cur = conn.cursor ...
- c++获取sqlite3数据库表中所有字段的方法
常用方法: 1.使用sqlite3_get_table函数 2.获取sqlite创建表的sql语句字符串,然后进行解析获取到相应的字段 3.采用配置文件的方式,将所有字段名写入配置文件 方法1:使用s ...
- Java反射机制(获取Class对象的三种方式+获取Class中的构造函数进行对象的初始化+获取反射类的字段+获取反射类的一般方法)
反射技术其实就是动态加载一个指定的类,并获取该类中的所有内容.而且将字节码文件封装成对象,并将字节码文件中的内容都封装成对象,这样便于操作这些成员,简单来说:反射技术可以对一个类进行解剖,反射大大增强 ...
- Dynamics CRM 插件Plugin中获取和更新时间字段值的准确转换
前面两篇介绍了后台代码通过组织服务获取更新时间字段.窗体javascript通过Odata获取更新时间字段,最后篇来实验下在插件中的获取和更新时间字段是否需要时制的转化,为何说是最后篇呢,因为在CRM ...
- Sql中获取表结构(字段名称,类型,长度,说明)
Sql中获取表结构(字段名称,类型,长度,说明) SELECT TableName = OBJECT_NAME(c.object_id), ColumnsName = c.name, Descript ...
随机推荐
- 消息中间件——RocketMQ(一) 环境搭建(完整版)
每章一点正能量:每当你想要放弃的时候,就想想是为了什么才一路坚持到现在. 前言 最近在回顾复习Java基础中的一些知识点,发现了一些以前见过但是没有留意却特别有意思的知识特性,比如这次想分享的Java ...
- (十三)自定义JSTL标签
前面的博客,我们讲过了 自定义 el函数 : 讲一个 自定义标签技术 : 目录 自定义标签 快速入门:使用标签输出客户机IP 关于标签处理器类的方法 自定义标签功能扩展 传统标签 简单标签 配置简单标 ...
- C++基础--inline
内联函数的定义: 在函数返回类型前加上inline关键字可以将函数指定为内联函数. 内联函数和普通函数的区别: 当编译器处理调用内联函数的语句时,不会将该语句编译成函数调用的指令,而是直接将整个函数体 ...
- Laravel安装和composer安装
下载地址:https://getcomposer.org/download/ 他会自动找到你的php目录,如果没有记得手动修改 一直点下一步,即可. 如果安装不成功,可能是之前安装过composer ...
- 涛哥:Qt安卓-5.12环境搭建
简介 Qt for android 环境搭建,以Windows平台 Qt5.12为基准. 因为有不少人问相关问题,所以写篇文章汇总一下. 安装Qt 需要先安装Android版的Qt. 一般在Qt的安装 ...
- (六)mybatis之多对一关系(简单)
一.需求分析 需求: 查询所有订单信息及订单下的订单明细信息 分析: 一条订单只能由一个消费者下单,但是一条订单有多条订单明细. 二.创建数据库表和实体对象 Customer.java ...
- Intellij IDEA 快捷键大全【转】
IntelliJ Idea 常用快捷键列表 Ctrl+Shift + Enter,语句完成 “!”,否定完成,输入表达式时按 “!”键 Ctrl+E,最近的文件 Ctrl+Shift+E,最近更改的文 ...
- Python练习_装饰器、生成器_day12
装饰器 装饰器篇: 1.编写装饰器,为多个函数加上认证的功能(用户的账号密码来源于文件),要求登录成功一次,后续的函数都无需再输入用户名和密码. def login(func): def inner( ...
- Python TCP通信之仿文件下载
TCP_文件下载_Client.py import socket def main(): # 创建TCP套接字 tcp_socket = socket.socket(socket.AF_INET, s ...
- 通过Nginx统计网站的PV、UV、IP
转载:通过Nginx统计网站的PV.UV.IP 概念 UV:独立访客:以cookie为依据,假设一台电脑装有3个不同的浏览器,分别打开同一个页面,将会产生3个UV.PV:访问量:页面每访问或刷新一次, ...