JavaEE企业开发新技术2

目录

2.7 Field类的基本概念

文字性概念描述:

Field类

2.8  Field的基本操作-1

2.9 Field的基本操作-2

分析:

2.10 Field 的综合练习

总结:

==和equals的区别:

使用 == 比较

使用equals比较 

2.7 Field类的基本概念

文字性概念描述:

Constructor类用来描述类中所定义的构造方法,

(1)得到类的所有构造方法

Constructor constructors

Class.forName(“java.lang.String”).getConstructors();

(2)得到类中某个具体的构造方法,在getConstructor中传入参数类型所对应的字节码

Constructor constructor=

Class.forName(“java.lang.String”).getconstructor(String.class)

使用Constructor类的目的是用来创建相应类的对象

正常情况:

string str=new string(“hello”);

反射情况:

Constructor con=String.class.getConstructor(String.class)

String str=(string)con.newinstance(“hello”);

通过反射方式创建对象的过程

Class---->Constructor---->某个类的对象

只有当要用某个类的无参构造方法创建该类对象时,可以省略创建Constructor类对象的这个过程。

Date d=(Date)Class.forName(“java.util.Date”).newInstance();

注意:java运行环境的缓存中保存了类的无参构造方法所对应的Construtor对象。

Field类

Field类用来表示类中的属性(字段)。

  1. Class.gelFields():得到Class对象的所有字段,返回的是Field数组。
  2. Class.getField(String name)返回一个 Field 对象,它反映此 Class对象所表示的类或接口的指定公有成员字段。
  3. Field的对象所代表的某一个类的属性,而不是那个类的某一个对象的属性。要得到某个对象对应的属性值,需要通过get(0bject obj)方法与某个对象具体关联。
  4. 对于非公有属性只能通过Class的getDeclaredField(String fieldName)方法得到。
  5. 对于私有属性要得到它所关联到的对象的值,需通过Field的setAccessible(boolean boolean)方法设置。(boolean类型设置为true就可以访问私有属性)
  6. Field类的getType()方法用来得到字段所属的类型

2.8  Field的基本操作-1

公有属性:

public String sex;

重载的有参构造方法:

public Person(Integer id,String name,String sex) {

this(id,name);

this.sex=sex;

}

测试类:

public class Test2 {
	public static void main(String[] args) throws NoSuchFieldException, SecurityException, InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException, NoSuchMethodException {

		Person p1=new Person();
		Class clazz1=p1.getClass();
		System.out.println(clazz1==Person.class);
		
		Person p=(Person)clazz1.getConstructor(Integer.class,String.class,String.class).newInstance(100,"小明","男");//通过反射创建
		Field[] fields=clazz1.getFields();//得到所有公有的属性
		for(Field f:fields) {
			System.out.println("类型:"+f.getType().getName()+"属性名称:"+f.getName());//输出公有属性
		}
		
		Field field=clazz1.getDeclaredField("name");//设置访问私有的name属性
		field.setAccessible(true);//允许访问私有的属性
		System.out.println(field.get(p));
	}
}

运行结果:

2.9 Field的基本操作-2

通过getDeclaredFields()方法可以得到指定类中定义的所有属性:

代码:

Field[] fields2=clazz1.getDeclaredFields();//得到该类中定义的所有字段
		for(Field f:fields2) {
			System.out.println("类型:"+f.getType().getName()+"属性名称:"+f.getName());
		}

分析:

Field: 一般情况我们需要调用方法得到该类中定义的字段,要么得到所有的字段,要么得到某一个字段得到字段之后,一般情况我们需要得到该字段在某一个对象上的取值

通常如果我们要拿到某个私有的属性时需要用getDeclaredField(属性名称)方法,用该方法拿到私有属性时,需要用setAccessible(boolean boolean)设置为true,表示允许访问私有的属性,最后看字段在某个对象上的取值,则调用get(object obj)方法就能拿到

2.10 Field 的综合练习

练习:扫描一个对象中所有的字符串类型的属性,并为每一个字符串属性的值后面添加“hello”字符串,然后将这个对象输出。

private Integer id;

private String name;



public String sex;

int statue;

protected String booldType;
public Person(Integer id, String name, String sex, int statue, String booldType) {
		this(id,name,sex);//在构造方法体中调用重载的构造方法
		this.statue = statue;
		this.booldType = booldType;
	}

Person p=(Person)clazz1.getConstructor(Integer.class,String.class,String.class,int.class,String.class).newInstance(100,"小明","男",1,"O型血");

Field[] fields2=clazz1.getDeclaredFields();//得到该类中定义的所有字段
		for(Field f:fields2) {
			if(f.getType()==String.class) {//判断得到的类型是否是String类型
				f.setAccessible(true);//设置为true可以访问私有属性
				String oldValue=(String)f.get(p);
				String newValue=oldValue.concat("hello");//将得到的属性值后面追加“hello”
				//得到新的属性值之后,还需要将新值设置给原来对象
				f.set(p, newValue);
			}
		}
		System.out.println("设置完新值后的对象是:"+p);

运行结果:

总结:

Class.gelFields()可以得到Class对象的所有字段,返回Field数组。

Class.getField(String name)返回一个 Field 对象,它可以指定公有成员字段。

Field的对象所代表的某一个类的属性,而不是那个类的某一个对象的属性。要得到某个对象对应的属性值,需要通过get(0bject obj)方法与某个对象具体关联。

对于非公有属性只能通过Class的getDeclaredField(String fieldName)方法得到,可以指定非公有成员字段。

对于私有属性要得到它所关联到的对象的值,需要用到Field的setAccessible(boolean boolean)方法设置。(boolean类型设置为true就可以访问私有属性)

Field类的getType()方法用来得到字段所属的类型

==和equals的区别:

使用 == 比较

Java中的8种基本数据类型(byte,short,char,int,long,float,double,boolean)比较他们之间的值是否相等。

引用数据类型,比较的是他们在堆内存地址是否相等。每新new一个引用类型的对象,会重新分配堆内存空间,使用==比较返回false。

使用equals比较 


  引用类型:默认情况下,比较内存地址值是否相等。可以按照需求逻辑,重写对象的equals方法

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

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

相关文章

OpenCV 图像的几何变换

一、图像缩放 1.API cv2.resize(src, dsize, fx0,fy0,interpolation cv2.INTER_LINEAR) 参数: ①src :输入图像 ②dsize:绝对尺寸 ③fx,fy:相对尺寸 ④interpolation:插值方法 2.代码演示 import cv2 …

前端报错404,nginx正常、gateway没有转发请求

问题描述:前端报错 404 Not Found 原因:nacos中对应服务没有上线,下线后,可以启动本地服务,然后在测试上调试代码。!! 记住重启对应服务,也不会自动上线。

JVM的内存区域

JVM内存区域最粗略的划分可以分为堆和栈,当然,按照虚拟机规范,可以划分为以下几个、区域 Java虚拟机运行时数据区 JVM内存分为线程私有区和线程共享区,其中方法区和堆是线程共享区,虚拟机栈、本地方法栈和程序计数器是…

植物病害识别:YOLO水稻病害识别/分类数据集(2000多张,2个类别,yolo标注)

YOLO水稻病害识别/分类数据集,包含疾病和正常2类,共2000多张图像,yolo标注完整,可直接训练。 适用于CV项目,毕设,科研,实验等 需要此数据集或其他任何数据集请私信

floodfill算法题目

前言 大家好,我是jiantaoyab,在下面的题目中慢慢体会floodFill算法,虽然是新的算法,但是用的思想和前面的文章几乎一样,代码格式也几乎一样,但不要去背代码 图像渲染 https://leetcode.cn/problems/flood…

事物的传播属性

事务传播属性是Spring框架在处理事务时的一个重要概念,它定义了在事务方法被另一个事务方法调用时,如何处理事务边界的行为。这些属性是通过Spring的Transactional注解中的propagation属性来设置的。下面是几个常见的Spring事务传播属性: *RE…

生成式 AI:使用 Pytorch 通过 GAN 生成合成数据

导 读 生成对抗网络(GAN)因其生成图像的能力而变得非常受欢迎,而语言模型(例如 ChatGPT)在各个领域的使用也越来越多。这些 GAN 模型可以说是人工智能/机器学习目前主流的原因; 因为它向每个人&#xff0…

RK3568 xhci主控挂死问题

串口日志 rootjenet:~# [18694.115430] xhci-hcd xhci-hcd.1.auto: xHCI host not responding to stop endpoint command. [18694.125667] xhci-hcd xhci-hcd.1.auto: xHCI host controller not responding, assume dead [18694.125977] xhci-hcd xhci-hcd.1.auto: HC died; c…

微软模拟飞行器回放功能

参考b站up主,欢迎大家去关注:https://www.bilibili.com/video/BV1Z34y1P7zz/?spm_id_from333.880.my_history.page.click&vd_source4e0b40493e2382633fab2ddc1bb1d9cc 下载网址:https://flightsim.to/file/8163/flight-recorder 坠毁检…

嘿!AI 编码新玩法上线!

随着 AI 智能浪潮到来,AI 编码助手成为越来越多开发者的必备工具,将开发者从繁重的编码工作中解放出来,极大地提高了编程效率,帮助开发者实现更快、更好的代码编写。 通义灵码正是这样一款基于阿里云通义代码大模型打造的智能编码…

如何保证消息的顺序性

先看看顺序会错乱的场景:RabbitMQ:一个 queue,多个 consumer,这不明显乱了: 解决方案:

代码背后的女性:突破性别壁垒的技术先驱

个人主页:17_Kevin-CSDN博客 收录专栏:《程序人生》 引言 在计算机科学的历史长河中,有许多杰出的女性为这个领域的发展做出了重要贡献。她们不仅在技术上取得了卓越成就,还打破了性别壁垒,为后来的女性树立了榜样。今…

22 Dytechlab Cup 2022C. Ela and Crickets(思维、找规律、模拟)

思路就是找规律 可以发现,当拐点在角落时的情况和不在角落的情况是不同 当拐点在角落时,只有目标点的横纵坐标其中的一个和它相同时,这时才可能到达。 否则,我们就简单的例子可以看一下,当一个 2 ∗ 2 2*2 2∗2的矩阵的…

伪分布HBase的安装与部署

1.实训目标 (1)熟悉掌握使用在Linux下安装伪分布式HBase。 (2)熟悉掌握使用在HBase伪分布式下使用自带Zookeeper。 2.实训环境 环境 版本 说明 Windows 10系统 64位 操作电脑配置 VMware 15 用于搭建所需虚拟机Linux系统 …

PostgreSQL容器安装

docker中的centos7中安装 选择对应的版本然后在容器中的centos7中执行下面命令 但是启动容器的时候需要注意 开启端口映射开启特权模式启动init进程 docker run -itd --name centos-postgresql -p 5433:5432 --privilegedtrue centos:centos7 /usr/sbin/init 启动然后进入后先…

ARMv8/ARMv9架构下特权程序之间的跳转模型与系统启动探析

文章目录 背景1、前言小结: 2、4个特权等级/4个安全状态之间的跳转模型小结: 3、启动时镜像之间的跳转模型小结: 4、runtime程序之间的跳转模型小结: 推荐 背景 ARMv8和ARMv9架构是ARM公司推出的先进处理器架构,被广泛…

华为ce12800交换机m-lag(V-STP模式)配置举例

配置## 标题思路 采用如下的思路配置M-LAG双归接入IP网络: 1.在Switch上配置上行接口绑定在一个Eth-Trunk中。 2.分别在SwitchA和SwitchB上配置V-STP、DFS Group、peer-link和M-LAG接口。 3.分别在SwitchA和SwitchB上配置LACP M-LAG的系统优先级、系统ID。 4.分别在…

粒子群算法优化RBF神经网络气体浓度预测

目录 完整代码和数据下载链接:粒子群算法优化RBF神经网络气体浓度预测,pso-rbf气体浓度预测(代码完整,数据齐全)资源-CSDN文库 https://download.csdn.net/download/abc991835105/88937920 RBF的详细原理 RBF的定义 RBF理论 易错及常见问题 RBF应用实例,粒子群算法优化R…

植物病害识别:YOLO水稻病害识别数据集(1000多张,3个类别,yolo标注)

YOLO水稻病害识别数据集,包含水稻白叶枯病、稻瘟病、水稻褐斑病3个常见病害类别,共1000多张图像,yolo标注完整,可直接训练。 适用于CV项目,毕设,科研,实验等 需要此数据集或其他任何数据集请私…

antv L7结合高德地图使用dome1

antv L7结合高德地图使用 一、设置底图二 、添加antv L7 中要使用的dome1. 安装L7 依赖2. 使用的dome 、以下使用的是浮动功能3. 运行后显示 自定义样式修改1. 设置整个中国地图浮动起来 自定义标注点1. 静态标注点2. 动态标注点(点位置需要自己改)3. 完…