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;

    @Override
    protected 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;
    }
    @Override
    protected Object clone()
            throws CloneNotSupportedException {
       Person tmp=(Person)super.clone();
       tmp.money= (Money)tmp.money.clone();
       return tmp;
    }
}

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

3:运行结果

加油!!!!!!!!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Linux-应用编程学习笔记(三、文件属性和目录)

一、文件类型 1、普通文件(ls -l 文件,权限前边第一个"-"代表普通文件;stat 文件) 文本文件:ASCII字符 二进制文件:数字0/1 2、目录文件(‘’d):文件夹 3…

每日两题 / 79. 单词搜索 39. 组合总和(LeetCode热题100)

79. 单词搜索 - 力扣(LeetCode) 遍历board,遇到字符等于word的第一个字符时,进行dfs回溯 设置访问数组,标记已经走过的坐标 每次dfs时,往四个方向走,若当前字符不匹配则回溯,记得消…

【深度学习】paddlets,时序数据预测

文章目录 一、环境二、题目1三、题目2四、题目3五、函数参数 资料: https://paddlets.readthedocs.io/zh-cn/latest/source/api/paddlets.models.base.html#paddlets.models.base.BaseModel.recursive_predict https://aistudio.baidu.com/projectdetail/5866171?…

记一次MySQL执行修改语句超时问题

异常问题 原因分析 这个问题发生在开发环境,怀疑是提交事务时终止项目运行,没有提交该事务,造成死锁 调试该事务时时间太长,为什么说有这个原因呢,因为通过查找日志显示 The client was disconnected by the server …

$subcribe的使用

$subcribe的使用 只要是store都有$subscribe函数,是订阅的意思,可以监测到store中数据的变化 使用$subscribe函数可以实现刷新不丢失,将数据保存到浏览器的本地存储中,每次进入页面都使用localStorage的数据填充页面

【credit_based流控机制】

credit_based流控机制 1 credit_based way1.1 Principle1.3 DFD1.4 Module1.4.1 Interface1.4.2 Code Block 在网络芯片处理大流量报文中,一般主要是两种机制:1.valid–ready反压(backpressure)机制;2.credit信用机制; credit机制…

电商API接口(api商品数据)【电商商品实时数据采集API接口】

众多品牌选择电商API实时数据采集接口进行采购,主要是出于以下几个重要原因: 第一,高效便捷。比价工具通过自动化的方式获取价格信息,避免了繁琐的人工操作,大大节省了时间和精力。 第二,精准比较。API比价…

常见的CSS布局

1 左侧固定宽度&#xff0c;右侧自适应宽度的两列布局实现 HTML: <div className"outer"><div className"left">固定宽度</div><div className"right">自适应宽度</div></div> 方法1&#xff1a;左侧div设…

美发店服务预约会员小程序的作用是什么

美发店不同于美容美甲&#xff0c;男女都是必需且年龄层几乎不限&#xff0c;商家在市场拓展时只要方法得当相对比较容易&#xff0c;当今客户适应于线上信息获取、咨询及实际内容开展&#xff0c;商家也需要赋能和提升自身服务效率&#xff0c;合理化管理。 运用【雨科】平台…

C语言基础(六)

C语言基础 指针与一维数组总结 * p、* (p)、&#xff08;\*p&#xff09;、* p、*(p)、*p区别和用法运算优先级p与p区别*p与 *&#xff08;p&#xff09;与&#xff08;*p&#xff09;*p与 *&#xff08;p&#xff09;与 *p 指针常量与一维数组的关系指针变量与一维数组的关系数…

002 仿muduo库实现高性能服务器组件_整体框架

​&#x1f308;个人主页&#xff1a;Fan_558 &#x1f525; 系列专栏&#xff1a;仿muduo &#x1f339;关注我&#x1f4aa;&#x1f3fb;带你学更多知识 文章目录 前言项目框架小结 前言 本文不会包含任何项目模块的代码&#xff0c;旨在向你介绍项目具体分为哪几个模块&am…

文档档案管理系统整体建设方案书(实际项目原件word2024)

1.系统概述 1.1.需求描述 1.2.需求分析 1.3.重难点分析 1.4.重难点解决措施 2.系统架构设计 2.1.系统架构图 2.2.关键技术 数据备份技术 3.系统功能设计 3.1.功能清单列表 3.2.基础数据管理 3.3.位置管理 3.4.文档使用 3.5.文档管理 软件全套资料包获取方式①&#xff1a;软件项…

揭秘 淘宝死店采集私信筛选,号称日赚500+

淘宝死店采集工具为电子商务创业者揭示了一个领域的新机遇&#xff0c;通过提供一系列深入分析和资源挖掘的功能&#xff0c;展现了从失败中寻找成功之道的独特方法论。以下是如何通过这种工具寻找电商平台中的隐含机会的几个关键方面&#xff1a; 分析失败的深层原因&#x…

【启程Golang之旅】深入解析函数的奥秘与技巧

欢迎来到Golang的世界&#xff01;在当今快节奏的软件开发领域&#xff0c;选择一种高效、简洁的编程语言至关重要。而在这方面&#xff0c;Golang&#xff08;又称Go&#xff09;无疑是一个备受瞩目的选择。在本文中&#xff0c;带领您探索Golang的世界&#xff0c;一步步地了…

html5+css3+js学习记录(1)-- html

1 vscode前端插件 1.1 Web标准 2 文档声明与字符编码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewpor…

【全开源】海报在线制作系统源码(ThinkPHP+FastAdmin+UniApp)

打造个性化创意海报的利器 引言 在数字化时代&#xff0c;海报作为一种重要的宣传媒介&#xff0c;其设计质量和效率直接影响着宣传效果。为了满足广大用户对于个性化、高效制作海报的需求&#xff0c;海报在线制作系统源码应运而生。本文将详细介绍海报在线制作系统源码的特…

【电子元件】TL431 电压基准

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

【知识图谱】探索攻略:基础、构建、高级应用与相关论文方向

【知识图谱】相关文章汇总 写在最前面一、什么是知识图谱&#xff1f;二、相关历史文章代码实现&#xff1a;简单的知识图谱可视化知识图谱前身&#xff1a;信息抽取知识图谱应用1&#xff1a;社交网络分析知识图谱应用2&#xff1a;威胁情报挖掘知识图谱应用3&#xff1a;Code…

当AWR1843发送完设置的固定帧后,如何使其再发送第一次的帧?

&#x1f3c6;本文收录于「Bug调优」专栏&#xff0c;主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案&#xff0c;希望能够助你一臂之力&#xff0c;帮你早日登顶实现财富自由&#x1f680;&#xff1b;同时&#xff0c;欢迎大家关注&&收藏&&…

人类最友好语言? YAML 深入解析:从语法到最佳实践

什么是YAML YAML&#xff08;YAML Ain’t Markup Language&#xff09;是一种人类可读的数据序列化语言。它的设计目标是使数据在不同编程语言之间交换和共享变得简单。YAML采用了一种简洁、直观的语法&#xff0c;以易于阅读和编写的方式表示数据结构。 YAML广泛应用于配置文…