【Elasticsearch】文档操作:添加、更新和删除

🧑 博主简介:CSDN博客专家历代文学网(PC端可以访问:https://literature.sinhy.com/#/?__c=1000,移动端可微信小程序搜索“历代文学”)总架构师,15年工作经验,精通Java编程高并发设计Springboot和微服务,熟悉LinuxESXI虚拟化以及云原生Docker和K8s,热衷于探索科技的边界,并将理论知识转化为实际应用。保持对新技术的好奇心,乐于分享所学,希望通过我的实践经历和见解,启发他人的创新思维。在这里,我希望能与志同道合的朋友交流探讨,共同进步,一起在技术的世界里不断学习成长。
技术合作请加本人wx(注明来自csdn):foreast_sea

在这里插入图片描述


在这里插入图片描述

【Elasticsearch】文档操作:添加、更新和删除

引言

在当今数据爆炸的时代,高效地存储检索管理数据成为了众多应用程序面临的关键挑战。Elasticsearch作为一款强大的开源分布式搜索引擎和数据分析引擎,凭借其卓越的性能和灵活的功能,在数据处理领域占据了重要地位。其中,对文档的操作是Elasticsearch的核心功能之一,包括添加、更新和删除文档等操作。

添加文档是将数据存入Elasticsearch的第一步,我们需要考虑如何为文档指定唯一标识,或者让系统自动生成,同时还要处理可能出现的版本冲突问题。更新文档则涉及到对已有数据的修改,可能是部分字段的更新,也可能是全量更新,了解其背后的原理和实现机制对于正确操作至关重要。而删除文档则要确保数据的准确性和一致性,根据不同的条件准确地删除指定的文档。

在前面,我们详细介绍了Elasticsearch的查询方法:【Elasticsearch】八种Query搜索类型详解。

在本文,我们将深入探讨Elasticsearch中这些文档操作(增、删、改)的具体方法和技巧,通过实际的代码示例和详细的原理讲解,帮助读者全面掌握Elasticsearch文档操作的精髓,为高效处理数据提供有力支持。

1. Elasticsearch简介及相关Maven依赖

1.1 Elasticsearch简介

Elasticsearch是一个基于Lucene库的分布式、RESTful风格的搜索和数据分析引擎。它具有高度可扩展性、实时性和强大的搜索功能,能够快速地存储、检索和分析海量数据。其核心概念包括索引(Index)、文档(Document)和映射(Mapping)等。

  • 索引(Index):类似于关系型数据库中的数据库,是具有相似特征的文档的集合。
  • 文档(Document):是Elasticsearch中的基本数据单元,以JSON格式存储,可以包含多个字段。
  • 映射(Mapping):定义了文档中各个字段的类型、格式和属性等信息,类似于关系型数据库中的表结构。

1.2相关Maven依赖

在Java项目中使用Elasticsearch,需要添加相应的Maven依赖。以下是常用的依赖配置:

<dependency><groupId>org.elasticsearch.client</groupId><artifactId>elasticsearch-rest-high-level-client</artifactId><version>7.17.3</version>
</dependency>
<dependency><groupId>org.elasticsearch</groupId><artifactId>elasticsearch</artifactId><version>7.17.3</version>
</dependency>

这里我们使用了elasticsearch-rest-high-level-client,它提供了更高级、更方便的API来与Elasticsearch进行交互。elasticsearch依赖则包含了Elasticsearch的核心功能和数据结构。

在项目中引入这些依赖后,就可以开始编写代码来操作Elasticsearch中的文档了。接下来,我们将分别介绍添加文档、更新文档和删除文档的具体操作方法。

2. 添加文档

2.1指定文档的唯一标识添加文档

在Elasticsearch中,每个文档都可以有一个唯一的标识,称为_id。我们可以在添加文档时指定这个_id,这样可以方便地对文档进行后续的操作,如更新和删除。

以下是一个使用Java代码通过指定_id添加文档的示例:

import org.apache.http.HttpHost;
import org.elasticsearch.action.index.IndexRequest;
import org.elasticsearch.action.index.IndexResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.common.xcontent.XContentType;import java.io.IOException;public class AddDocumentWithIdExample {public static void main(String[] args) throws IOException {// 创建Elasticsearch客户端RestHighLevelClient client = new RestHighLevelClient(RestClient.builder(new HttpHost("localhost", 9200, "http")));// 定义文档数据String jsonString = "{\"title\":\"Elasticsearch入门\", \"content\":\"这是一篇关于Elasticsearch的文章\"}";// 创建索引请求对象,并指定索引名、文档唯一标识和文档数据IndexRequest request = new IndexRequest("my_index").id("1").source(jsonString, XContentType.JSON);// 执行索引请求IndexResponse response = client.index(request, RequestOptions.DEFAULT);// 输出结果System.out.println("索引名称:" + response.getIndex());System.out.println("文档唯一标识:" + response.getId());System.out.println("版本号:" + response.getVersion());// 关闭客户端client.close();}
}

在上述代码中,我们首先创建了一个RestHighLevelClient对象,用于与Elasticsearch进行交互。然后,定义了一个JSON格式的文档数据,并创建了一个IndexRequest对象,指定了索引名、文档的唯一标识_id和文档数据。最后,通过client.index()方法执行索引请求,并输出结果。

2.2由系统自动生成文档唯一标识添加文档

如果我们不想手动指定文档的_id,可以让Elasticsearch系统自动生成。在这种情况下,只需要在创建IndexRequest对象时不调用id()方法即可。

以下是一个使用Java代码由系统自动生成_id添加文档的示例:

import org.apache.http.HttpHost;
import org.elasticsearch.action.index.IndexRequest;
import org.elasticsearch.action.index.IndexResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.common.xcontent.XContentType;import java.io.IOException;public class AddDocumentAutoIdExample {public static void main(String[] args) throws IOException {// 创建Elasticsearch客户端RestHighLevelClient client = new RestHighLevelClient(RestClient.builder(new HttpHost("localhost", 9200, "http")));// 定义文档数据String jsonString = "{\"title\":\"Elasticsearch进阶\", \"content\":\"深入学习Elasticsearch的高级特性\"}";// 创建索引请求对象,并指定索引名和文档数据IndexRequest request = new IndexRequest("my_index").source(jsonString, XContentType.JSON);// 执行索引请求IndexResponse response = client.index(request, RequestOptions.DEFAULT);// 输出结果System.out.println("索引名称:" + response.getIndex());System.out.println("文档唯一标识:" + response.getId());System.out.println("版本号:" + response.getVersion());// 关闭客户端client.close();}
}

在这个示例中,我们没有调用id()方法来指定文档的_id,Elasticsearch会自动为文档生成一个唯一的标识。

2.3处理文档的版本冲突

在分布式系统中,多个客户端可能同时对同一个文档进行操作,这就可能导致版本冲突的问题。Elasticsearch通过乐观并发控制(Optimistic Concurrency Control)来处理版本冲突。

每个文档都有一个版本号(_version),当对文档进行更新或删除操作时,需要指定当前文档的版本号。如果指定的版本号与Elasticsearch中存储的文档版本号不一致,操作将失败。

以下是一个使用Java代码处理文档版本冲突的示例:

import org.apache.http.HttpHost;
import org.elasticsearch.action.index.IndexRequest;
import org.elasticsearch.action.index.IndexResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.common.xcontent.XContentType;
import org.elasticsearch.rest.RestStatus;import java.io.IOException;public class HandleVersionConflictExample {public static void main(String[] args) throws IOException {// 创建Elasticsearch客户端RestHighLevelClient client = new RestHighLevelClient(RestClient.builder(new HttpHost("localhost", 9200, "http")));// 定义文档数据String jsonString = "{\"title\":\"Elasticsearch更新\", \"content\":\"更新Elasticsearch文档内容\"}";// 创建索引请求对象,并指定索引名、文档唯一标识、版本号和文档数据IndexRequest request = new IndexRequest("my_index").id("1").version(1).source(jsonString, XContentType.JSON);try {// 执行索引请求IndexResponse response = client.index(request, RequestOptions.DEFAULT);// 输出结果System.out.println("索引名称:" + response.getIndex());System.out.println("文档唯一标识:" + response.getId());System.out.println("版本号:" + response.getVersion());} catch (Exception e) {if (e.getMessage().contains("version_conflict_engine_exception")) {System.out.println("发生版本冲突,请检查文档版本号。");} else {e.printStackTrace();}}// 关闭客户端client.close();}
}

在上述代码中,我们通过version()方法指定了文档的版本号。如果在执行索引请求时,Elasticsearch中存储的文档版本号与指定的版本号不一致,将抛出version_conflict_engine_exception异常,我们可以根据异常信息进行相应的处理。

3. 更新文档

3.1部分字段更新

在实际应用中,我们可能只需要更新文档中的部分字段,而不是整个文档。Elasticsearch提供了UpdateRequest来实现部分字段的更新。

以下是一个使用Java代码对文档进行部分字段更新的示例:

import org.apache.http.HttpHost;
import org.elasticsearch.action.update.UpdateRequest;
import org.elasticsearch.action.update.UpdateResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.common.xcontent.XContentType;import java.io.IOException;
import java.util.HashMap;
import java.util.Map;public class PartialUpdateDocumentExample {public static void main(String[] args) throws IOException {// 创建Elasticsearch客户端RestHighLevelClient client = new RestHighLevelClient(RestClient.builder(new HttpHost("localhost", 9200, "http")));// 定义要更新的字段和值Map<String, Object> updateFields = new HashMap<>();updateFields.put("content", "这是更新后的文章内容");// 创建更新请求对象,并指定索引名、文档唯一标识和要更新的字段UpdateRequest request = new UpdateRequest("my_index", "1").doc(updateFields);// 执行更新请求UpdateResponse response = client.update(request, RequestOptions.DEFAULT);// 输出结果System.out.println("索引名称:" + response.getIndex());System.out.println("文档唯一标识:" + response.getId());System.out.println("版本号:" + response.getVersion());// 关闭客户端client.close();}
}

在上述代码中,我们首先创建了一个Map对象,用于存储要更新的字段和值。然后,创建了一个UpdateRequest对象,指定了索引名、文档的唯一标识和要更新的字段。最后,通过client.update()方法执行更新请求,并输出结果。

3.2全量更新

如果需要对文档进行全量更新,可以使用与添加文档类似的方法,只是在创建IndexRequest对象时指定文档的_id,这样就会覆盖原来的文档内容。

以下是一个使用Java代码对文档进行全量更新的示例:

import org.apache.http.HttpHost;
import org.elasticsearch.action.index.IndexRequest;
import org.elasticsearch.action.index.IndexResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.common.xcontent.XContentType;import java.io.IOException;public class FullUpdateDocumentExample {public static void main(String[] args) throws IOException {// 创建Elasticsearch客户端RestHighLevelClient client = new RestHighLevelClient(RestClient.builder(new HttpHost("localhost", 9200, "http")));// 定义新的文档数据String jsonString = "{\"title\":\"Elasticsearch全量更新\", \"content\":\"全新的Elasticsearch文档内容\"}";// 创建索引请求对象,并指定索引名、文档唯一标识和新的文档数据IndexRequest request = new IndexRequest("my_index").id("1").source(jsonString, XContentType.JSON);// 执行索引请求IndexResponse response = client.index(request, RequestOptions.DEFAULT);// 输出结果System.out.println("索引名称:" + response.getIndex());System.out.println("文档唯一标识:" + response.getId());System.out.println("版本号:" + response.getVersion());// 关闭客户端client.close();}
}

在这个示例中,我们创建了一个新的IndexRequest对象,指定了索引名、文档的_id和新的文档数据。然后,通过client.index()方法执行索引请求,实现了对文档的全量更新。

3.3更新操作背后的原理与实现机制

Elasticsearch的更新操作实际上是先从索引中获取原始文档,然后在内存中对文档进行修改,最后将修改后的文档重新索引到Elasticsearch中。

当执行部分字段更新时,Elasticsearch会根据UpdateRequest中指定的字段和值,在内存中修改原始文档的相应字段。然后,将修改后的文档重新索引到索引中,更新文档的版本号。

对于全量更新,Elasticsearch会直接使用新的文档数据覆盖原来的文档内容。同样,在更新完成后,会更新文档的版本号。

在更新过程中,Elasticsearch会通过乐观并发控制来处理版本冲突。如果在获取原始文档后,其他客户端对文档进行了修改,导致版本号不一致,更新操作将失败。

4. 删除文档

4.1根据文档的唯一标识删除文档

根据文档的_id删除文档是最常见的删除方式。Elasticsearch提供了DeleteRequest来实现根据_id删除文档的功能。

以下是一个使用Java代码根据文档的_id删除文档的示例:

import org.apache.http.HttpHost;
import org.elasticsearch.action.delete.DeleteRequest;
import org.elasticsearch.action.delete.DeleteResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestHighLevelClient;import java.io.IOException;public class DeleteDocumentByIdExample {public static void main(String[] args) throws IOException {// 创建Elasticsearch客户端RestHighLevelClient client = new RestHighLevelClient(RestClient.builder(new HttpHost("localhost", 9200, "http")));// 创建删除请求对象,并指定索引名和文档唯一标识DeleteRequest request = new DeleteRequest("my_index", "1");// 执行删除请求DeleteResponse response = client.delete(request, RequestOptions.DEFAULT);// 输出结果System.out.println("索引名称:" + response.getIndex());System.out.println("文档唯一标识:" + response.getId());System.out.println("版本号:" + response.getVersion());// 关闭客户端client.close();}
}

在上述代码中,我们创建了一个DeleteRequest对象,指定了索引名和文档的_id。然后,通过client.delete()方法执行删除请求,并输出结果。

4.2根据查询条件删除文档

除了根据_id删除文档,我们还可以根据查询条件删除符合条件的多个文档。Elasticsearch提供了DeleteByQueryRequest来实现根据查询条件删除文档的功能。

以下是一个使用Java代码根据查询条件删除文档的示例:

import org.apache.http.HttpHost;
import org.elasticsearch.action.delete.DeleteByQueryRequest;
import org.elasticsearch.action.delete.DeleteByQueryResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.index.query.QueryBuilders;import java.io.IOException;public class DeleteDocumentByQueryExample {public static void main(String[] args) throws IOException {// 创建Elasticsearch客户端RestHighLevelClient client = new RestHighLevelClient(RestClient.builder(new HttpHost("localhost", 9200, "http")));// 创建删除请求对象,并指定索引名和查询条件DeleteByQueryRequest request = new DeleteByQueryRequest("my_index");request.setQuery(QueryBuilders.matchQuery("title", "Elasticsearch"));// 执行删除请求DeleteByQueryResponse response = client.deleteByQuery(request, RequestOptions.DEFAULT);// 输出结果System.out.println("删除的文档数量:" + response.getDeleted());// 关闭客户端client.close();}
}

在这个示例中,我们创建了一个DeleteByQueryRequest对象,指定了索引名和查询条件。这里使用了QueryBuilders.matchQuery()方法来构建一个匹配查询条件,查询title字段中包含Elasticsearch的文档。然后,通过client.deleteByQuery()方法执行删除请求,并输出删除的文档数量。

5. 总结

本文详细介绍了Elasticsearch中文档的添加、更新和删除操作。在添加文档时,我们可以指定文档的唯一标识或由系统自动生成,并通过乐观并发控制来处理版本冲突。更新文档可以分为部分字段更新和全量更新,其背后的原理是先获取原始文档,在内存中修改后重新索引。删除文档可以根据文档的唯一标识删除,也可以根据查询条件进行批量删除。

6、参考资料文献

  1. Elasticsearch官方文档
  2. 《Elasticsearch实战》书籍
  3. Elasticsearch相关博客文章

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

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

相关文章

【insert 插入数据语法合集】.NET开源ORM框架 SqlSugar 系列

系列文章目录 &#x1f380;&#x1f380;&#x1f380; .NET开源 ORM 框架 SqlSugar 系列 &#x1f380;&#x1f380;&#x1f380; 文章目录 系列文章目录一、前言 &#x1f343;二、插入方式 &#x1f4af;2.1 单条插入实体2.2 批量 插入实体2.3 根据字典插入2.4 根据 Dat…

权限掩码umask

1 、 设置新建文件或目录的默认权限 在 Linux 系统中&#xff0c;当用户创建一个新的文件或目录时&#xff0c;系统都会为新建的文件或目录分配默认的权限&#xff0c;该默认权限与umask 值有关&#xff0c;其具体关系是&#xff1a; 新建文件的默认权限 0666-umask 值 新建…

202-01-06 Unity 使用 Tip1 —— UnityHub 模块卸载重装

文章目录 1 卸载模块2 更新配置文件3 重启 UnityHub 起因&#xff1a; ​ WebGL 平台打包程序报错&#xff0c;懒得修复了&#xff0c;因此粗暴地删了重装。但是 UnityHub 不支持卸载模块&#xff0c;因此手动配置。 1 卸载模块 ​ 以 Unity 6000.0.26f1c1 为例&#xff0c;其…

打造三甲医院人工智能矩阵新引擎(二):医学影像大模型篇--“火眼金睛”TransUNet

一、引言 1.1 研究背景与意义 在现代医疗领域,医学影像作为疾病诊断与治疗的关键依据,发挥着不可替代的作用。从传统的X射线、CT(计算机断层扫描)到MRI(磁共振成像)等先进技术,医学影像能够直观呈现人体内部结构,为医生提供丰富的诊断信息,涵盖疾病识别、病灶定位、…

国产编辑器EverEdit - 两种删除空白行的方法

1 使用技巧&#xff1a;删除空白行 1.1 应用场景 用户在编辑文档时&#xff0c;可能会遇到很多空白行需要删除的情况&#xff0c;比如从网页上拷贝文字&#xff0c;可能就会存在大量的空白行要删除。 1.2 使用方法 1.2.1 方法1&#xff1a; 使用编辑主菜单 选择主菜单编辑 …

李宏毅机器学习笔记-Transformer

目录 1. Seq2seq 2. encoder Transformer 中的 Block 结构 3. Decoder 4.Encoder和Decoder间的信息传递 5.Training 6.Tips 1. Seq2seq Transformer 是一个seq2seq的model。Seq2seq指的是input是一个序列&#xff0c;输出也是一个序列&#xff0c;输出的长度是由机器自己…

GitLab集成Runner详细版--及注意事项汇总【最佳实践】

一、背景 看到网上很多用户提出的runner问题其实实际都不是问题&#xff0c;不过是因为对runner的一些细节不清楚导致了误解。本文不系统性的介绍GitLab-Runner&#xff0c;因为这类文章写得好的特别多&#xff0c;本文只汇总一些常几的问题/注意事项。旨在让新手少弯路。 二、…

指针 const 的组合

1、首先来了解一下常量 const int num 5&#xff1b; 那么num的值是5&#xff0c; num的值不可修改 2、来了解一下指针 int value 5; int* p &value; 我喜欢吧指针和类型放一起&#xff0c;来强调p是一个指针类型&#xff0c; 而赋值的时候就得赋值一个int类型的地址…

《C++11》各种初始化方式的详细列举与对比

在 C 中&#xff0c;初始化对象的方式多种多样。随着 C 标准的演进&#xff0c;特别是 C11 的引入&#xff0c;初始化方式得到了显著的扩展和改进。本文将详细列举 C 中的各种初始化方式&#xff0c;并对它们进行对比&#xff0c;帮助开发者更好地理解和应用这些特性。 1. C98…

前端小案例——520表白信封

前言&#xff1a;我们在学习完了HTML和CSS之后&#xff0c;就会想着使用这两个东西去做一些小案例&#xff0c;不过又没有什么好的案例让我们去练手&#xff0c;本篇文章就提供里一个案例——520表白信封 ✨✨✨这里是秋刀鱼不做梦的BLOG ✨✨✨想要了解更多内容可以访问我的主…

【Vim Masterclass 笔记05】第 4 章:Vim 的帮助系统与同步练习(L14+L15+L16)

文章目录 Section 4&#xff1a;The Vim Help System&#xff08;Vim 帮助系统&#xff09;S04L14 Getting Help1 打开帮助系统2 退出帮助系统3 查看具体命令的帮助文档4 查看帮助文档中的主题5 帮助文档间的上翻、下翻6 关于 linewise7 查看光标所在术语名词的帮助文档8 关于退…

10-C语言项目池

C语言项目池 《个人通讯录》 《火车订票系统》 管理员用户1录入火车票信息区间查询/购票2显示火车票信息打印购票信息3查询火车票信息退票4修改火车票信息5添加火车票信息 《学生学籍管理系统》 1录入学生信息2添加学生信息3显示学生信息4查找学生信息5删除学生信息6修改学…

Android 绘制学习总结

1、刷新率介绍 我们先来理一下基本的概念&#xff1a; 1、60 fps 的意思是说&#xff0c;画面每秒更新 60 次 2、这 60 次更新&#xff0c;是要均匀更新的&#xff0c;不是说一会快&#xff0c;一会慢&#xff0c;那样视觉上也会觉得不流畅 3、每秒 60 次&#xff0c;也就是 1…

每日一题:BM1 反转链表

文章目录 [toc]问题描述数据范围示例 C代码实现使用栈实现&#xff08;不符合要求&#xff0c;仅作为思路&#xff09; 解题思路 - 原地反转链表步骤 C语言代码实现 以前只用过C刷过代码题目&#xff0c;现在试着用C语言刷下 问题描述 给定一个单链表的头结点 pHead&#xff…

78、使用爱芯派2_AX630C开发板 3.2T高有效算力 低功耗 支持AI-ISP真黑光实验

基本思想:使用爱心元智最新的版本开发板进行实验 AX630C、AX620Q 都是 620E 这一代 一、参考这个官方教程,先把代码在本地交叉编译完成 https://github.com/AXERA-TECH/ax620e_bsp_sdk 然后在拷贝到620c设备上 root@ax630c:~/ax620e_bsp_sdk/msp/out/arm64_glibc/bin# ./…

【Redis经典面试题七】Redis的事务机制是怎样的?

目录 一、Redis的事务机制 二、什么是Redis的Pipeline&#xff1f;和事务有什么区别&#xff1f; 三、Redis的事务和Lua之间有哪些区别&#xff1f; 3.1 原子性保证 3.2 交互次数 3.3 前后依赖 3.4 流程编排 四、为什么Lua脚本可以保证原子性&#xff1f; 五、为什么R…

企业网络性能监控

什么是网络性能监控 网络性能监控&#xff08;NPM&#xff09;是指对计算机网络的性能进行持续测量、分析和管理的过程&#xff0c;通过监控流量、延迟、数据包丢失、带宽利用率和正常运行时间等关键指标&#xff0c;确保网络高效、安全地运行&#xff0c;并将停机时间降至最低…

【开源】创建自动签到系统—QD框架

1. 介绍 QD是一个 基于 HAR 编辑器和 Tornado 服务端的 HTTP 定时任务自动执行 Web 框架。 主要通过抓包获取到HAR来制作任务模板&#xff0c;从而实现异步响应和发起HTTP请求 2. 需要环境 2.1 硬件需求 CPU&#xff1a;至少1核 内存&#xff1a;推荐 ≥ 1G 硬盘&#xff1a;推…

SUB输入5V升压充电16.8V芯片HU5912

HU5912芯片&#xff0c;作为航誉微电子有限公司推出的一款高性能升压充电管理IC&#xff0c;自其面世以来&#xff0c;便以其出色的性能和广泛的应用领域&#xff0c;受到了业界的高度关注和赞誉。本文将详细介绍HU5912芯片的技术特点、应用优势、市场定位以及其在各类电子设备…

练习(继承)

大家好&#xff0c;今天我们写几道题来巩固一下我们所学的知识&#xff0c;以便我们更好的学习新内容。 方法重写&#xff1a; 继承&#xff1a; 注&#xff1a;java中只能继承一个类 那么今天分享就到这里&#xff0c;谢谢大家&#xff01;&#xff01;&#xff01;