clone方法总结Java

Java中Object类当中有许多方法,如图所示:

clone方法就是其中一种,分为浅拷贝,深拷贝举一个例子:

浅拷贝:

在Person类当中右键鼠标然后,选中Generate:

然后重写clone方法

protected Object clone() throws CloneNotSupportedException {return super.clone();}

重写完还是不能使用,需要一下几个步骤:

1:implements Cloneable这个接口

(这个Cloneable接口是标记接口,意味着这个类可以进行克隆)

public class Person implements Cloneable

2:由于这个方法返回类型是Object类,所以这里需要强制类型转换才能使用

3:强制类型转换成Person后还需要

4:运行结果:

深拷贝:

1:浅拷贝的缺陷

public class Test {public static void main(String[] args)throws CloneNotSupportedException {Person person1=new Person("zhangsan",18);Person person2=(Person)person1.clone();person2.money.m=10;System.out.println("person1:"+person1.money.m);System.out.println("person2:"+person2.money.m);}
}

当我们写出这样的代码,改变person2.money.m的值会影响person.money.m的值,这里我们不难发现,person2.money和person.money存的地址是相同的,所以会互相影响。

2:解决方法

a:在Money类中也重写clone方法
public class Money implements Cloneable{public int m;@Overrideprotected Object clone() throws CloneNotSupportedException {return super.clone();}
}
b:修改Person类中的clone方法
public class Person implements Cloneable{public String name;public int age;public Money money=new Money();public Person(String name,int age){this.age=age;this.name=name;}@Overrideprotected Object clone()throws CloneNotSupportedException {Person tmp=(Person)super.clone();tmp.money= (Money)tmp.money.clone();return tmp;}
}

这里要特别注意类型转化!!!

3:运行结果

加油!!!!!!!!

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

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

相关文章

电赛之路:历年试题剖析、实战经验分享与代码资源宝典

电赛之路:历年试题剖析、实战经验分享与代码资源宝典 一、电赛历年试题剖析2018年试题回顾:智能小车2019年试题精选:智能家居系统 二、实战经验分享1. 团队协作的艺术2. 时间管理与迭代开发3. 代码与文档规范 三、代码程序资源推荐1. GitHub电…

PTA 6-4 配对问题

许多大学生报名参与大运会志愿者工作。其中运动场引导员需要男女生组队,每组一名男生加一名女生,男生和女生各自排成一队,依次从男队和女队队头各出一人配成小组,若两队初始人数不同,则较长那一队未配对者调到其他志愿…

Vue3学习-Pinia 集中式状态管理工具

安装 Pinia npm i piniaPinia 集中式状态管理工具官网 传送门 引入 Pinia //引入 import { createPinia } from pinia const pinia createPinia() const app createApp(App); app.use(pinia);使用 // store 注册 import { defineStore } from "pinia"; export …

python弹出文件打开和保存的选择框

tkinter.filedialog 模块中的 askopenfilename 函数和 asksaveasfilename 函数来显示文件打开和保存的选择框。 这两个函数的作用都是返回一个文件名。如果选择了一个文件,则会返回文件的绝对路径,如果取消了选择,则返回空字符串 前者用来读时…

赶紧收藏!2024 年最常见 20道 Redis面试题(八)

上一篇地址:赶紧收藏!2024 年最常见 20道 Redis面试题(七)-CSDN博客 十五、一个Redis实例最多能存放多少的keys? Redis实例能存放的键(keys)的数量主要受限于以下几个因素: 物理内…

android studio的gradle设置和镜像

新建的应用和其他的应用gradle版本各不一致,想着使用本地已经存在的版本,不知道为啥一直要去下载 现在先找一下镜像源: 官网地址:https://services.gradle.org/distributions/ 腾讯镜像 Gradle下载地址:https://mirro…

【MySQL精通之路】SQL优化(1)-查询优化(5)-引擎条件下推

1 介绍 这种优化提高了无索引列和常量之间直接比较的效率。 在这种情况下,条件会“向下推”到存储引擎进行评估。此优化只能由NDB存储引擎使用。 对于NDB集群,这种优化可以消除在集群的数据节点和发布查询的MySQL服务器之间通过网络发送不匹配行的操作…

【微服务】springboot 构建镜像多种模式使用详解

目录 一、前言 二、微服务常用的镜像构建方案 3.1 使用Dockerfile 3.2 使用docker plugin插件 3.3 使用docker compose 编排文件 三、环境准备 3.1 服务器 3.2 安装JDK环境 3.2.1 创建目录 3.2.2 下载安装包 3.2.3 配置环境变量 2.2.4 查看java版本 3.3 安装maven …

pyqt 浮动窗口QDockwidget

pyqt 浮动窗口QDockwidget QDockwidget效果代码 QDockwidget QDockWidget 是 PyQt中的一个控件,它提供了一个可以停靠在主窗口边缘或者浮动在屏幕上的窗口小部件(widget)。QDockWidget 允许用户自定义其界面,并提供了灵活的停靠和…

Keras实现SegNet

我真服了原来我之前用tf复现SegNet给复现错了 在网上试了多个版本代码,折腾了好久,现在终于复现对了,代码也跑通了 SegNet的架构比较老了,这几年都没人更新代码了,我这里算是提供一个最近能跑通的版本的代码吧 tf版本…

Elasticsearch集群许可证过期问题解决方法汇总

最近在使用elasticsearch的过程中,使用elastic-head进行可视化展示集群的状态和信息,从2024年5月18日突然elastic-head无法现在集群的状态界面啦,elasticsearch集群状态是正常,命令如下: curl -X GET "localhost:9200/_cluster/health?pretty" 在google页面上通过…

引流500+创业粉,抖音口播工具

在抖音平台运营一个专注于口播的工具号,旨在集结超过500位热衷于创业的粉丝,这需要精心筹划的内容策略和周到的运营计划。首先,明确你的口播工具号所专注的领域,无论是分享创业经验、财务管理技巧还是案例分析,确保你所…

Axmol 2.1.3 发布

我们非常荣幸,axmol 能在发布此版本之前被 awsome-cpp 收录! The 2.1.3 release is a minor LTS release for bugfixes and improvements, thanks to iAndyHD3 add axmol to awsome-cpp The axmol home page was change to https://axmol.dev Signifi…

引入Dao

1.crm和数据库的结合 我们先前实现的crm项目的数据都是自定义的 而非数据库获取 因此现在我们应该实现crm和数据库的集成 ListServlet.java doPost方法中在处理异常的选项中 并没有发现throws方式 而只有try-catch方式 这是因为子类throws的异常必须和父类throws异常一致或者是…

【电子元件】TL431 电压基准

TL431(C23892)是一种常用的可调节精密电压基准和电压调节器。它广泛应用于电源管理、精密参考电压和稳压电路等领域。以下是TL431的一些关键特点和使用方法: 关键特点 可调输出电压:TL431的输出电压可以通过外部电阻网络在2.495V到36V范围内调整。精度高…

淘宝x5sec

声明 本文章中所有内容仅供学习交流使用,不用于其他任何目的,抓包内容、敏感网址、数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关!wx a15018601872 本文章未…

vuedraggable插件 修改元素首次拖拽进入占位样式

vuedraggable是一款适用于vue3 的可拖拽插件。 通过配置ghost-class“ghost” 属性,可以对组件内元素拖拽过程中的占位符进行修改。但是无法根据ghost这一class对元素首次拖拽进组件内的占位元素进行样式修改 解决方法:元素首次拖拽进vuedraggable 中时…

python 面对对象 类 继承

继承 继承就是为了解决两个有大量重复性代码的类,抽象出一个更抽象的类放公共代码,主要是代码复用,方便代码的管理与修改 类的继承包括属性和方法,私有属性也可继承 class Person(): # 默认是继承object超类pass…

【数据结构(邓俊辉)学习笔记】二叉树03——重构

0 .概述 介绍下二叉树重构 1. 遍历序列 任何一棵二叉树我们都可以导出先序、中序、后序遍历序列。这三个序列的长度相同,他们都是由树中的所有节点依照相应的遍历策略所确定的次序,依次排列而成。 若已知某棵树的遍历序列是否可以忠实地还原出这棵树…

ic基础|时钟篇05:芯片中buffer到底是干嘛的?一文带你了解buffer的作用

大家好,我是数字小熊饼干,一个练习时长两年半的ic打工人。我在两年前通过自学跨行社招加入了IC行业。现在我打算将这两年的工作经验和当初面试时最常问的一些问题进行总结,并通过汇总成文章的形式进行输出,相信无论你是在职的还是…