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

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

IAR全面支持小华全系芯片,强化工控及汽车MCU生态圈

IAR Embedded Workbench for Arm已全面支持小华半导体系列芯片,加速高端工控MCU和车用MCU应用的安全开发 嵌入式开发软件和服务的全球领导者IAR与小华半导体有限公司(以下简称“小华半导体”)联合宣布,IAR Embedded Workbench fo…

微信小程序开发系列(二十四)·wxml语法·列表渲染·wx:for-item 和 wx:for-index

目录 1. 如果需要对默认的变量名和下标进行修改,可以使用wx:for-item 和 wx:for-index 2. 将 wx:for 用在 标签上,以渲染一个包含多个节点的结构块 方法一 方法二 3. 总结 3.1 wx:for-item 和 wx:for-index总结 3.2 总结 1. 如果需要对默…

简述epoll实现

所有学习笔记:https://github.com/Dusongg/StudyNotes 文章目录 epoll数据结构的选择?以tcp为例,网络io的可读可写如何判断?epoll如何做到线程安全?LT和ET如何实现?tcp状态和io的读写有哪些关系&#xff1…

ChatGPT等AI使用的过程苦笑不得瞬间

引言: 在人工智能的浪潮中,我们见证了技术的飞速发展和智能应用的广泛渗透。特别是随着语言模型的进步,AI如ChatGPT、文心一言、通义千问、讯飞星火等已经成为人们日常生活和工作中不可或缺的助手。然而,与任何新兴技术一样&#…

零售EDI:劳氏 Lowe‘s EDI项目案例

通过 EDI,企业与Lowes之间可以直接交换各种商业文档,如订单、发票、收据等,从而实现信息的实时交换,提高了供应链的效率和准确性。在现代供应链管理中,EDI 已经成为了不可或缺的重要工具。 作为一家拥有多条业务线的企…

力扣每日一题 找出数组的第 K 大和 小根堆 逆向思维(TODO:二分+暴搜)

Problem: 2386. 找出数组的第 K 大和 文章目录 思路复杂度💖 小根堆💖 TODO:二分 暴搜 思路 👨‍🏫 灵神题解 复杂度 时间复杂度: 添加时间复杂度, 示例: O ( n ) O(n) O(n) 空间复杂度: 添加空间复杂…

组态软件基础知识

一、组态软件基础知识 1、概述 (1)、组态软件概念与产生背景 “组态”的概念是伴随着集散型控制系统(Distributed Control System简称DCS)的出现才开始被广大的生产过程自动化技术人员所熟知的。在工业控制技术的不断发…

新手如何快速上手学习单片机?

读者朋友能容我,不使博文负真心 新开专栏,期待与诸君共享精彩 个人主页:17_Kevin-CSDN博客 专栏:《单片机》 学习单片机是一个有趣且有挑战性的过程。单片机是一种微控制器,广泛应用于各种电子设备和嵌入式系统中。在这…

大模型快速实现python3+html内容在线渲染

需求: 有一份数据需要通过前端在线展示给用户,不需要复杂的样式交互,后端服务是基于Python3实现的API接口,对前端技术不是很了解,需要快速实现该需求。类似样式即可: 思路: 如果页面不复杂&am…

开放式高实时高性能PLC控制器解决方案-基于米尔电子STM32MP135

前言 随着工业数字化进程加速与IT/OT深入融合,不断增加的OT核心数据已经逐步成为工业自动化行业的核心资产,而OT层数据具备高实时、高精度、冗余度高、数据量大等等特点,如何获取更加精准的OT数据对数字化进程起到至关重要的作用,…

编译支持国密的抓包工具 WireShark

目录 前言WireShark支持国密的 WireShark小结前言 在上一篇文章支持国密的 Web 服务器中,我们搭建了支持国密的 Web 服务器,但是,我们使用 360 安全浏览器去访问,却出现了错误: 是我们的 Web 服务器没有配置好?在这里插入图片描述还是 360 安全浏览器不支持国密?还是两…

中间件 | Redis - [基本信息]

INDEX 1 常规用法2 QPS3 pipeline 1 常规用法 分布式锁 最常见用法,需要注意分布式锁的redis需要单点 分布式事务 分布式事务中,核心的技术难点其实是分布式事务这个事本身作为数据的持久化 2PC,比如 seata 的 AT 模式下,将 un…

moi3D安装

下载文件双击文件 下一步 同意下一步 下一步 下一步 下一步 安装下一步 完成 破解 将如图中的文件复制到文件目录下 汉化 在目录中进入ui文件夹下 在安装包中找到如下的文件复制到ui目录下 在打开 另存为 另存为时改一下编码格式如图 打开软件 找到如图options进入…

七彩虹八渐变 外贸建站公司wordpress模板

进出口水果wordpress外贸模板 漂亮水果wordpress外贸模板,做水果进出品生意的外贸公司自建站官网模板。 https://www.jianzhanpress.com/?p3516 玩具wordpress外贸模板 简洁玩具wordpress外贸模板,适合做跨境电商外贸公司使用的wordpres外贸s网站主题…

深入探索HAProxy:高性能负载均衡器的奥秘

目录 引言 一、HAProxy基础知识 (一)HAProxy概述 (二)核心特性 (三)支持调度算法 二、安装haproxy (一)下载源码包 (二)解决依赖环境 (三…

CAP告诉你系统没法做到完美,只能做到权衡和适当

一、CAP介绍 CAP原理,全称为Consistency(一致性)、Availability(可用性)和Partition tolerance(分区容错性),是分布式系统设计中的基本原理。它强调了在设计分布式系统时&#xff0c…

【Linux】第四十二站:线程局部存储与线程分离

一、线程的局部存储 1.实现多线程 如果我们想创建多线程&#xff0c;我们可以用下面的代码类似去实现 #include <iostream> #include <pthread.h> #include <string> #include <cstdlib> #include <unistd.h> #include <thread> #inclu…

【机器学习】进阶学习:详细解析Sklearn中的MinMaxScaler---原理、应用、源码与注意事项

【机器学习】进阶学习&#xff1a;详细解析Sklearn中的MinMaxScaler—原理、应用、源码与注意事项 这篇文章的质量分达到了97分&#xff0c;虽然满分是100分&#xff0c;但已经相当接近完美了。请您耐心阅读&#xff0c;我相信您一定能从中获得不少宝贵的收获和启发~ &#x1f…

PromptBreeder---针对特定领域演化和发展提示词的方法

原文地址&#xff1a;promptbreeder-evolves-adapts-prompts-for-a-given-domain 论文地址&#xff1a;https://arxiv.org/pdf/2309.16797.pdf 2023 年 10 月 6 日 提示方法分为两大类 硬提示是由人工精心设计的文本提示&#xff0c;包含离散的输入令牌&#xff1b;其缺点…

如何保证 redis 的高并发和高可用?redis 的主从复制原理能介绍一下么?redis 的哨兵原理能介绍一下么?

目录 一、面试官心理分析 二、面试题剖析 1.Redis 主从架构 2.Redis replication 的核心机制 3.Redis 主从复制的核心原理 4.主从复制的断点续传 5.无磁盘化复制 6.过期 key 处理 7.复制的完整流程 8.全量复制 9.增量复制 10.heartbeat 11.异步复制 12.Redis 如何…