JAVA 中的克隆对象

        克隆对象就是复制一个一模一样的对象,但是复制出来的对象和原对象不是同一个对象,是两个对象,只不过复制过来的对象和原对象除了内存地址之外,其它的属性一模一样。

在超类 Object 中有一个 clone() 方法:

protected native Object clone() throws CloneNotSupportedException;

        这里涉及到一个新的关键字 native,该关键字是与 C++ 联合开发的时候使用,纯 Java 的开发中并不会涉及到该关键字。如果一个方法中使用了 native 关键字,表示该方法是一个原生函数,也就是说这个方法是用 C++ 语言实现的,且被编译成了 DLL,由 Java 调用。

        该方法定义上有一个 CloneNotSupportedException 异常声明,如果我们要克隆的对象所属的类, 没有实现 Cloneable 接口,那么这个对象就不能克隆,此时进行克隆操作的时候就会报异常。

Cloneable 接口的源码:

public interface Cloneable {
}

        Cloneable 接口中没有定义任何内容,这样的接口我们称之为标识性接口,表示的是一种能力,即某个类如果实现了 Cloneable 接口,就表示该类类型的实例对象具备克隆能力。

示例:

public class Person implements Cloneable{private String name;private int age;public Person(String name,int age){this.name = name;this.age = age;}/*** 重写 toString 方法* @return*/@Overridepublic String toString() {return "["+this.name + "," + this.age + "]";}/*** 重写克隆方法,修改访问权限* @return* @throws CloneNotSupportedException*/@Overridepublic Object clone() throws CloneNotSupportedException {return super.clone();}}
public class Test {public static void main(String[] args) throws CloneNotSupportedException {Person person1 = new Person("张三",11);Person person2 = (Person) person1.clone();System.out.println(person1 == person2);System.out.println(person1.toString());System.out.println(person2.toString());}
}

打印结果:

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

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

相关文章

17. typedef关键字的使用

一、为什么需要typedef关键字 C 语言允许用户使用 typedef 来为一个数据类型起一个新的别名。一旦用户在程序中定义了别名,就可以在该程序中使用别名来定义变量的类型、数组的类型、指针变量的类型与函数的类型等。 typedef 关键字定义的名称并不是真的创造了一种数…

循序渐进丨MogDB 中 gs_dump 数据库导出工具源码概览

背景 gs_dump 是 MogDB 中一个功能丰富灵活的数据库导出工具,在数据库的维护、迁移和开发中经常使用。该工具允许用户根据需要导出整个数据库或者数据库中的特定对象,如模式(schema)、表(tables)、视图&am…

grafana version 11.1.0 设置Y轴刻度为1

grafana 版本 # /usr/share/grafana/bin/grafana --version grafana version 11.1.0设置轴 Axis 搜索 Standard options 在"Decimals"中输入0,确保只显示整数

Java基础12-特殊文件和日志技术

十二、特殊文件和日志技术 1、特殊文件 properties:用来存储键值对数据。 xml:用来存储有关系的数据。 1.1 properties文件 特点:存储键值对,键不能重复,文件后缀一般是.properties结尾的。 properties:是…

混合专家模型(MoE)中的容量因子f

在混合专家模型(MoE)中,容量因子f是一个重要的参数,它用于衡量MoE层中专家模型的容量和利用情况。具体来说,容量因子f通常定义为MoE层中实际激活的专家数量与MoE层中总专家数量的比例。 当容量因子f为1.25时&#xff…

自定义注解和组件扫描在Spring Boot中动态注册Bean(一)

​ 博客主页: 南来_北往 系列专栏:Spring Boot实战 在Spring Boot中,自定义注解和组件扫描是两种强大的机制,它们允许开发者以声明性的方式动态注册Bean。这种方式不仅提高了代码的可读性和可维护性,还使得Spring Boot应用的…

UPDATE 更新数据

1.更新某一列字段的值 以 teacher 表为例,需要把前 3 条数据的 age 更新为 33,命令如下: UPDATE teacher SET age18,id_number44444444440604099X WHERE id 30;执行结果如下图 : 这里是对 age 字段列的前三条值进行数据的更新,注意更新…

网络安全有关法律法规

1. 前言 在当今数字化高速发展的时代,网络安全已成为关乎国家、企业和个人的重要议题。为了应对日益复杂的网络安全挑战,一系列网络安全法律法规应运而生,它们如同坚实的盾牌,守护着我们的数字世界。现在是2024年10月&#xff0c…

Unity学习日志-API

Untiy基本API 角度旋转自转相对于某一个轴 转多少度相对于某一个点转练习 角度 this.transform.rotation(四元数)界面上的xyz(相对于世界坐标) this.transform.eulerAngles;相对于父对象 this.transform.localEulerAngles;设置角度和设置位置一样,不能单独设置xz…

PHP对Json数据格式的理解

PHP 对 JSON(JavaScript Object Notation)数据格式的理解涉及将 JSON 数据解析为 PHP 变量(通常是数组或对象),以及将 PHP 变量编码为 JSON 字符串。JSON 是一种轻量级的数据交换格式,易于人阅读和编写&…

EM算法学习

1.EM算法的介绍 可以发现:计算出θA和θB的值的前提是知道A、B币种的抛掷情况。 所以我们需要使用EM算法:求出每轮选择硬币种类的概率 2.EM算法执行过程: 第一步:首先初始化设置一组PA和PB证明的值。然后通过最大似然估计得到每…

MOE论文详解(3)-Switch Transformers

Switch Transformers也是google在2022年发表的一篇论文, 该论文简化了MoE的路由算法, 减少了计算量和通信量; 第一次支持bfloat16精度进行训练. 基于T5-Base和T5-Large设计的模型在相同的算力下训练速度提升了7x倍; 同时发布了1.6万亿(1.6 trillion)参数的MoE模型,相…

Linux系统:Ubuntu上安装Chrome浏览器

Ubuntu系统版本:23.04 在Ubuntu系统上安装Google Chrome浏览器,可以通过以下步骤进行: 终端输入以下命令,先更新软件源: sudo apt update 或 sudo apt upgrade终端输入以下命令,下载最新的Google Chrome .…

多机编队—(3)Fast_planner无人机模型替换为Turtlebot3模型实现无地图的轨迹规划

文章目录 前言一、模型替换二、Riz可视化三、坐标变换四、轨迹规划最后 前言 前段时间已经成功将Fast_planner配置到ubuntu机器人中,这段时间将Fast_planner中的无人机模型替换为了Turtlebot3_waffle模型,机器人识别到环境中的三维障碍物信息&#xff0…

5 首页框架及路由配置

1 添加首页LayoutVue.vue组件&#xff0c;登录成功之后跳转到该组件 <script setup> import {Management,Promotion,UserFilled,User,Crop,EditPen,SwitchButton,CaretBottom } from element-plus/icons-vue import avatar from /assets/default.png// 导入ref import {…

Selenium 模拟快捷键来进行粘贴操作

Selenium 可以模拟快捷键来进行粘贴操作。在 Selenium 中&#xff0c;使用 send_keys 方法可以模拟键盘输入&#xff0c;包括常见的快捷键操作。对于粘贴操作&#xff0c;可以使用 Keys.CONTROL v&#xff08;在 Windows 和 Linux 上&#xff09;或 Keys.COMMAND v&#xff0…

GitLab 老旧版本如何升级?

极狐GitLab 正式对外推出 GitLab 专业升级服务 https://dl.gitlab.cn/cm33bsfv&#xff01; 专业的技术人员为您的 GitLab 老旧版本实例进行专业升级&#xff01;服务详情可以在官网查看详细解读&#xff01; 那些因为老旧版本而被攻击的例子 话不多说&#xff0c;直接上图&a…

RTMP、FFmpeg安装测试

RTMP、FFmpeg安装测试 1.使用 Docker 部署 RTMP 服务1.拉取带有 RTMP 模块的 NGINX 镜像&#xff1a;2.运行容器 2. 防火墙放行3.windows安装ffmpeg1. [下载链接](https://ffmpeg.org//download.html)2.解压3.环境变量配置 4.常用的 FFmpeg 推流和拉流命令1.推流命令1. 推流到 …

SQL实现给表添加数据及其触发器操作

新建一个表实现添加数据&#xff0c;数据不重复&#xff0c;。判断两个字段是否存在&#xff0c;如果存在&#xff0c;就修改对应字段&#xff0c;如果不存在就新增数据。 测试表格Test如下&#xff1a; 新建触发器如图&#xff1a; 触发程式如下&#xff1a; USE [Test] GO/*…

C语言_字符串+内存函数的介绍

字符函数和字符串函数 本章重点 重点介绍处理字符和字符串的库函数的使用和注意事项 求字符串长度 strlen 长度不受限制的字符串函数 strcpy strcat strcmp 字符串查找 strstr strtok 错误信息报告 strerror 字符操作内存操作函数 memcpy memmove memset memcmp 1. 字…