浅谈Java反射中的getFields()方法和getDeclaredFields ()方法

目录

  • 1. 概念
  • 2. getFields()方法
  • 2. getDeclaredFields()方法
  • 4. 总结

1. 概念

反射是Java中一种强大的机制,允许在运行时获取、检查和操作类、方法、字段等信息,而不需要在编译时知道这些信息。

其中字段(Field)在Java中是类中用于存储数据的成员变量。在反射中,可以通过Field类获取和操作类的字段。

  • getFields(): 该方法用于获取某个类及其父类中所有的公有字段。公有字段是指用public修饰的字段。
    这个方法对于需要获取类的公有属性时很有用,例如在某些框架或通用库中。

  • getDeclaredFields(): 该方法用于获取某个类中声明的所有字段,包括公有、私有、受保护的字段,但不包括继承的字段。
    这个方法对于需要获取类的所有字段时很有用,尤其是在进行一些高级的操作时。

具体的比较:

方法示例优点缺点场景
getFields()Field[] fields = MyClass.class.getFields();简单易用,一次性获取类及其父类的所有公有字段。不能获取私有字段,且只能获取到从父类继承而来的公有字段,不包括类本身声明的非公有字段。当只关心类及其父类的公有字段,不需要考虑私有字段时
getDeclaredFields()Field[] fields = MyClass.class.getDeclaredFields();能够获取类中声明的所有字段,包括公有、私有、受保护的字段。不能获取父类的字段,如果需要获取父类的字段,必须迭代遍历父类。当需要获取类中声明的所有字段,包括私有字段时,或者需要更多字段的信息时。

2. getFields()方法

import java.lang.reflect.Field;

public class test1 {
	public int publicField;
	private String privateField;

	public static void main(String[] args) {

//		Class<?> myClass = test1.class;
		// 获取所有公有字段
		Field[] fields = test1.class.getFields();

		for (Field field : fields) {
			System.out.println("Public Field: " + field.getName());
		}
	}
}

截图如下:

在这里插入图片描述

2. getDeclaredFields()方法

import java.lang.reflect.Field;

public class test1 {
	public int publicField;
	private String privateField;

	public static void main(String[] args) {

//		Class<?> myClass = test1.class;
		// 获取所有公有字段
		Field[] fields = test1.class.getDeclaredFields();

		for (Field field : fields) {
			System.out.println("Field: " + field.getName());
		}
	}
}

截图如下:

在这里插入图片描述

4. 总结

  • getFields(): 获取某个类的所有的public字段,其中是包括父类的public字段的。

  • getDeclaredFields():获取某个类的自身的所有字段,不包括父类的字段。

具体代码可看如下:


import java.lang.reflect.Field;

// 父类
class ParentClass {
	public int parentPublicField;
	private String parentPrivateField;
}

// 子类继承父类

class ChildClass extends ParentClass {
	public String childPublicField;
	private int childPrivateField;
}

public class test1 {
	public static void main(String[] args) {

		// 获取子类的Class对象
		Class<?> childClass = ChildClass.class;

		System.out.println("Using getFields():");
		// 获取子类及其父类的所有公有字段
		Field[] publicFields = childClass.getFields();
		for (Field field : publicFields) {
			System.out.println("Public Field: " + field.getName());
		}

		System.out.println("\nUsing getDeclaredFields():");
		// 获取子类中声明的所有字段,包括公有、私有、受保护的字段
		Field[] declaredFields = childClass.getDeclaredFields();
		for (Field field : declaredFields) {

			System.out.println("Field: " + field.getName());
		}
	}
}

截图如下:

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/270918.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【精选】vulnhub CTF5 NanoCMS漏洞 (青铜门笔记)

&#x1f36c; 博主介绍&#x1f468;‍&#x1f393; 博主介绍&#xff1a;大家好&#xff0c;我是 hacker-routing &#xff0c;很高兴认识大家~ ✨主攻领域&#xff1a;【渗透领域】【应急响应】 【python】 【VulnHub靶场复现】【面试分析】 &#x1f389;点赞➕评论➕收藏…

微信小程序使用canvas制作海报并保存到本地相册(超级详细)

案例图 分析案例图都有哪些元素 1.渐变背景 2.圆形头像 3.文字 4.文字超出换行 5.图片居中 6.文字居中 7.单位适配 8.弹窗保存图片。因为一个个绘制图形太麻烦所以这里都采用了方法封装。 canvas api介绍 最后有全部代码&#xff0c;复制即用。 data数据 data() {return {myO…

并发程序设计--D1进程的创建和回收

进程和程序内容区别 进程包含的内容&#xff1a; BSS段&#xff1a;存放程序中未初始化的全局变量 数据段&#xff1a;已初始化的全局变量 代码段&#xff1a;程序执行代码 堆&#xff08;heap&#xff09;&#xff1a;malloc等函数分配内存 栈(stack)&#xff1a;局部变量…

升压斩波电路的simulink建模与仿真

目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 一、升压斩波电路概述 二、升压斩波电路的基本工作原理 5.完整工程文件 1.课题概述 升压斩波电路的simulink建模与仿真&#xff0c;通过双闭环结构实现电池&#xff0c;点击的控制。 2.系统仿真结果 …

复试情报准备

英语自我介绍&#xff0c;介绍完老师会根据你的回答用英语问你问题&#xff0c;比如介绍一下你的本科学校&#xff0c;或者家乡什么的。计网过一遍&#xff0c;会问两道题。接下来是重点&#xff0c;我当时是根据我成绩单&#xff0c;问了我本科学过的科目&#xff0c;比如pyth…

PPT中加入页码

PPT中加入页码 文章目录 简单版本样式更改 简单版本 PPT中插入页码&#xff0c;基础的就是在“插入”选项卡中单机“幻灯片编号”即可 样式更改 然而&#xff0c;就像我们做幻灯片不满足于白底黑字一样&#xff0c;页码也总不能是默认的样式。 比如&#xff0c;在页码下面…

Spring Cloud Gateway 网关整合 Knife4j 4.3 实现微服务接口文档聚合

&#x1f680; 作者主页&#xff1a; 有来技术 &#x1f525; 开源项目&#xff1a; youlai-mall &#x1f343; vue3-element-admin &#x1f343; youlai-boot &#x1f33a; 仓库主页&#xff1a; Gitee &#x1f4ab; Github &#x1f4ab; GitCode &#x1f496; 欢迎点赞…

QT小技巧 - 使用QMovie进行gif切帧

简介 使用QMovie 将 gif 进行切帧&#xff0c; magick 进行合并代码 QString gifPath "E:\\workspace\\qt\\gif2imgs\\203526qre64haq3ccoobqi.gif"; // 你的图片QMovie movie(gifPath); movie.setCacheMode(QMovie::CacheNone);qDebug() << movie.frameCou…

31. Ajax

简介 AJAX 是 Asynchronous JavaScript And XML 的简称。直译为&#xff0c;异步的JS和XML。AJAX的实际意义是&#xff0c;不发生页面跳转、异步载入内容并改写页面内容的技术。AJAX也可以简单的理解为通过JS向服务器发送请求。 AJAX这门技术很早就被发明&#xff0c;但是直到…

基于AR+地图导航的景区智慧导览设计

随着科技的飞速发展&#xff0c;智慧旅游已经成为现代旅游业的一个重要趋势。在这个背景下&#xff0c;景区智慧导览作为智慧旅游的核心组成部分&#xff0c;正逐渐受到越来越多游客的青睐。本文将深入探讨地图导航软件在景区智慧导览中的应用&#xff0c;并分析其为游客和景区…

C++中的存储类及其实例

文章目录 0. 语法1. 自动存储类自动存储类对象的属性自动存储类的例子 2. 外部存储类extern存储类对象的属性extern存储类的例子 3. 静态存储类静态存储类的属性静态存储类的例子 4. 寄存器存储类寄存器存储类对象的属性寄存器存储类例子 5. 可变&#xff08;mutable&#xff0…

iMazing2024免费版iOS移动设备管理软件

以自己的方式管理iPhone&#xff0c;让备受信赖的软件为您传输和保存音乐、消息、文件和数据。安全备份任何 iPhone、iPad 或 iPod touch。iMazing 功能强大、易于使用&#xff0c;称得上是 Mac 和 PC 上最好的 iOS 设备管理器。 正在为iTunes繁琐的操作发愁&#xff1f;设备数…

86% 的网络攻击是通过加密渠道进行

自 2022 年以来&#xff0c;HTTPS 威胁增长了 24%&#xff0c;凸显了针对加密通道的网络犯罪策略的复杂性。 制造业连续第二年成为最常受到攻击的行业&#xff0c;教育和政府组织的攻击同比增幅最高。此外&#xff0c;包括恶意 Web 内容和恶意软件负载在内的恶意软件继续主导其…

数字化转型是什么?有哪些应用?_光点科技

数字化转型是什么&#xff1f; 数字化转型是指企业或组织通过采用数字技术来改变其业务模式和运营方式&#xff0c;以适应新兴市场趋势、提高效率、增强客户体验和增加竞争优势的过程。它不仅涉及技术的变革&#xff0c;还包括企业文化、组织结构和业务流程的全面调整。数字化…

zookeeper基本使用

目录 环境搭建 单机版搭建 集群版搭建 基本语法使用 可视化客户端 数据结构 节点分类 1. 持久节点 2. 临时节点 3. 有序节点 4. 容器节点 5. TTL节点 节点状态 监听机制 watch监听 永久性watch 应用场景 1. 实现分布式锁 2. 乐观锁更新数据 应用场景总结 选…

docker安装MySQL8.0

1、从docker仓库中拉去mysql 8.0 docker pull mysql:8.0 2、查看是否拉取成功 docker images mysql:8.0 3、安装运行mysql8.0容器 docker run --name mysql8 -v /my/mysql/config:/etc/mysql/conf.d -v /my/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD123456 -p 3306…

《Spring Cloud学习笔记:Nacos配置管理 OpenFeign LoadBalancer Getway》

基于Feign的声明式远程调用&#xff08;代码更优雅&#xff09;&#xff0c;用它来去代替我们之前的RestTemplate方式的远程调用 1. Nacos配置管理 Nacos除了可以做注册中心&#xff0c;同样也可以做配置管理来使用。 利用Nacos实现统一配置管理以及配置的热更新&#xff1a;…

几种串口扩展电路

一、IIC串口扩展电路 LCT200 是一款可以通过 I2C 接口通讯&#xff0c;拓展 2 路独立串口的通讯芯片&#xff0c;同时也支持通过 2 路串口读写 I2C 接口的数据。LCT200 的封装为 TSSOP-20。 主要功能&#xff1a;⚫ 通过对 I2C 接口读写实现拓展 2 路独立串口功能 ⚫ 通过读写…

SpringBoot Event,事件驱动轻松实现业务解耦

什么是事件驱动 Spring 官方文档AWS Event Driven 简单来说事件驱动是一种行为型设计模式&#xff0c;通过建立一对多的依赖关系&#xff0c;使得当一个对象的状态发生变化时&#xff0c;所有依赖它的对象都能自动接收通知并更新。即将自身耦合的行为进行拆分&#xff0c;使拆…

AI安全综述

1、引言 AI安全这个话题&#xff0c;通常会引伸出来图像识别领域的对抗样本攻击。下面这张把“熊猫”变“猴子”的攻击样例应该都不陌生&#xff0c;包括很多照片/视频过人脸的演示也很多。 对抗样本的研究领域已经具备了一定的成熟性&#xff0c;有一系列的理论来论述对抗样本…