JavaEE企业开发新技术2

news2025/1/8 11:40:03

目录

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方法

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Qt之格栅布局(QGridLayout)控件填满整个单元格

Qt专栏:http://t.csdnimg.cn/GQN1M 目录 1.现象1 2.解决方案 3.现象2 4.解决方案 5.总结 1.现象1 今天在用QGridLayout布局的时候,添加到布局的QWidget有文本框、标签、组合框和按钮等等,布局两列,通过下面的方式添加进去的&…

如何在Windows 10上打开和关闭平板模式?这里提供详细步骤

前言 默认情况下,当你将可翻转PC重新配置为平板模式时,Windows 10会自动切换到平板模式。如果你希望手动打开或关闭平板模式,有几种方法可以实现。​ 自动平板模式在Windows 10上如何工作 如果你使用的是二合一可翻转笔记本电脑&#xff0…

(008)Unity StateMachineBehaviour的坑

文章目录 StateMachineBehaviour同名函数的调用问题StateMachineBehaviour 的 OnState*、OnStateMachine* 的区别 StateMachineBehaviour同名函数的调用问题 1.如果脚本中,两个同名的函数都存在,那么两个函数都会被调用;如果只有其中一个同名…

20232831 2023-2024-2 《网络攻防实践》第2次作业

目录 20232831 2023-2024-2 《网络攻防实践》第2次作业1.实验内容2.实验过程3.学习中遇到的问题及解决4.学习感悟、思考等参考资料 20232831 2023-2024-2 《网络攻防实践》第2次作业 1.实验内容 (1)从www.csdn.net、www.163.com等中选择一个DNS域名进行…

【数学建模】线性规划

针对未来可能的数学建模比赛内容,我对学习的内容做了一些调整,所以先跳过灰色关联分析和模糊综合评价的代码,今天先来了解一下运筹规划类——线性规划模型。 背景: 某数学建模游戏有三种题型,分别是A,B&am…

2024计算机二级4

1. 整数在计算机中使用补码, 机器数有原码、补码和反码 2. 将文件名转化为文件存储地址的结构是文件目录 3. 有可能是最后一个元素或者查找的元素不在表中 4. 不将元素入队时循环队列可能为空也可能为满,可以将元素入队证明不为满,一共将…

软考77-上午题-【面向对象技术3-设计模式】-创建型设计模式02

一、生成器模式 1-1、意图 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。 1-2、结构图 Builder 为创建一个 Product 对象的各个部件指定抽象接口。ConcreteBuilder 实现 Builder 的接口以构造和装配该产品的各个部件,定…

Acwing-基础算法课笔记之动态规划(背包问题)

Acwing-基础算法课笔记之动态规划(背包问题) 一、01背包问题1、概述2、过程模拟 二、完全背包问题1、概述2、闫氏dp分析完全背包问题3、过程模拟代码模板 三、多重背包问题1、概述2、过程模拟3、多重背包问题的优化版本 分组背包问题1、概述2、过程模拟3…

GCNv2_SLAM-CPU详细安装教程(ubuntu18.04)

GCNv2_SLAM-CPU详细安装教程-ubuntu18.04 前言一、安装第三方库1.安装Pangolin2.安装OpenCV3.安装Eigen4.安装Pytorch(c) 二、安装以及运行GCNv2_SLAM1.安装编译GCNv2_SLAM2.单目模式运行演示案例 总结 前言 paper:https://arxiv.org/pdf/1902.11046.pdf githup::https://gith…

mysql事务(MVCC机制:undo日志)(mysql执行过程:redo日志,Buffer Pool缓存池)

事务 目的:保证数据的最终一致性## 事务的目的 事务的4大特性(ACID) 1.原子性(Atomicity):由undo log日志来保证 2.一致性(Consistency):使用事务的最终目的,由业务代码正确逻辑保证,比如错误的try-catch 3.隔离性(Isolation):…

若依Vue3图片预览大图遮罩层和表格的border css层级冲突

样式层级出现问题,表格的层级高于图片的层级 1.解决方式一:设置此文件的该属性(z-index)为继承,则显示正常 .el-table .el-table__cell { z-index: inherit; } 2.解决方式二:将此属性设置为true(本人试了…

Vscode 修改C++版本

1. 首先要检查GCC版本,有的gcc版本过低会导致C版本升级不成功 可以用cmd,用gcc --version命令查看gcc版本 我这里就是gcc版本较低,不支持c17 需要先升级gcc版本 gcc与c对应的版本,大家可以在这位大佬的博客中看,写…

闯关升级游戏特点,闯关小程序游戏开发

闯关升级类游戏一直以来都备受玩家青睐,其独特的游戏性和吸引力让人们乐此不疲。这类游戏以挑战性关卡和角色成长为核心,让玩家在不断的冒险中获得成就感与乐趣。让我们一起深入探讨这类游戏的特点,以及为何它们如此受欢迎。 挑战性关卡设计…

FPGA - 串口发送多字节数据

1,任务要求 关于uart串口接收与发送可以参考我的这篇博客:《FPGA-UART串口》。这篇博客实现了单字节发送与接收。 接下来,来使用串口发送多字节数据到电脑。 2,模块框图以及简单时序分析图 串口发送多字节数据的思路是把写入的…

Windows提示“无法删除文件:无法读源文件或磁盘”怎么办?

当用户在Mac电脑上创建一个文件,又将文件共享到Windows系统后,该文件可能无法被Windows正常识别和使用,并且在删除时出现“无法删除文件:无法读源文件或磁盘”的提示,这可能和Windows不支持Mac电脑创建的某些文件名有关…

Jmeter扩展开发--自定义java取样器

简介 jmeter内置了包括:http、https、tcp等各种协议的支持,通常情况只需要做简单的参数配置即可使用。但在某些特殊情况下,还是希望能做自定义压测处理,此时就涉及Jmeter的扩展开发自定义Java取样器,如下图所示&#…

基于物联网的智能家居监测与控制系统(全套资料)

项目源码资料下载地址: http://comingit.cn/?id29 易学蔚来全套毕设演示(看上哪个选那个): https://www.yuque.com/javagongchengshi/ccadbu/nh92kcpyqodhf07l 毕设服务真实反馈,在线观看: https://www.yu…

opencv中的图像高斯模糊—GaussianBlur

高斯模糊(Gaussian Blur)是一种广泛应用于图像处理的平滑技术,其通过对图像应用高斯函数来减少图像噪声和细节。与简单平均模糊(均值滤波)不同,高斯模糊给予中心像素更高的权重,而远离中心的像素…

介绍Oracle的SQL调化健康检查脚本(SQLHC)

概述 Oracle提供了一个SQL调优健康检查脚本(SQLHC),用于检查需要优化的SQL的运行环境,生成报告以便帮助DBA找到SQL性能不佳的原因。SQLHC是SQLT的一个子集(我后续的文章会介绍SQLT),但SQLHC与S…

#微信小程序(一个emo文案界面)

1.IDE:微信开发者工具 2.实验:一个emo文案界面 (1)最好使用rpx (2)图片宽度占不满,在CSS中设置width为100% (3)imag图片全部为网页链接图片 3.记录 4.代码 index.htm…