clone()方法

529c96694b434ec8903f0e9b7d918baf.gif在Java中,clone() 方法是一个非常有趣且强大的工具,用于创建对象的一个副本。这个方法位于 Object 类中,因此可以被所有类使用。让我们讨论一下它的几个要点:

 

什么是克隆?

克隆就是创建一个对象的新副本,这个副本在功能上与原对象相同。在Java中,默认的 clone() 方法执行的是浅拷贝,也就是说,它复制非静态变量值的一个副本。如果对象内部还持有其他对象的引用,那么这些引用也会被复制,而不是那些对象本身。这意味着,原始对象和克隆对象将共享相同的内存地址。

浅拷贝与深拷贝

  1.浅拷贝:只有顶层对象是非引用的,底层对象仍然是引用。

  2.深拷贝:整个对象树都是非引用的,每个对象都独立存在于另一个内存位置。

如何使用 clone()

要使用 clone(),你需要实现 Cloneable 接口并且重写 clone() 方法。这是因为默认的 clone() 方法会检查当前对象是否实现了 Cloneable 接口。如果没有,它会抛出 CloneNotSupportedException。下面是如何使用 clone() 的一个简单例子:

public class CloneExample implements Cloneable {

    int value;

 

    public CloneExample(int value) {

        this.value = value;

    }

 

    @Override

    protected Object clone() throws CloneNotSupportedException {

        return super.clone();

    }

 

    public static void main(String[] args) {

        CloneExample original = new CloneExample(5);

        try {

            CloneExample cloned = (CloneExample) original.clone();

            // cloned 和 original 是两个独立的对象,拥有相同的初始值

        } catch (CloneNotSupportedException e) {

            e.printStackTrace();

        }

    }

}

 

注意事项

  1.你必须处理 CloneNotSupportedException,要么通过使用 try-catch 块,要么通过显式抛出。

  2.默认的 clone() 方法只进行浅拷贝,如果你需要深拷贝,你需要手动编写代码来实现。

  3.如果你决定使用克隆,请注意,它可能会使对象的状态变得复杂,因为多个对象可能看起来是相似的,但实际上并不是同一个对象。

 

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

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

相关文章

2005-2022全国及各省家庭承包耕地流转总面积及经营耕地面积数据(无缺失)

2005-2022全国及各省家庭承包耕地流转总面积及经营耕地面积数据(无缺失) 1、时间:2005-2022年 2、范围:全国及30省 3、指标:家庭承包耕地流转总面积、家庭承包经营耕地面积、土地流转率、 4、来源:农村…

《web应用技术》第十一次课后作业

验证过滤器进行权限验证的原理。 创建Filter: package com.example.filter;import javax.servlet.*; import javax.servlet.annotation.WebFilter; import java.io.IOException;WebFilter(urlPatterns "/*") public class DemoFilter implements Filter …

【3维BFS】个人练习-Leetcode-LCP 79. 提取咒文

题目链接:https://leetcode.cn/problems/kjpLFZ/ 题目大意:给一个矩阵matrix[][],元素为小写英文字母。给一个字符串mantra,求从矩阵的(0,0)位置开始,可以移动(上下左右)或者提取字母&#xff…

怎么搭建个人博客教程,附云主机选购指南

一、搭建个人博客教程 1. 规划博客内容与技术栈 确定博客主题:首先明确博客的定位和主题,这将影响后续的技术选择和内容规划。选择技术栈:根据个人偏好和技术背景,选择合适的建站技术。例如,可以使用WordPress&#…

adobe pdf设置默认打开是滚动而不是单页视图

上班公司用adobe pdf,自己还不能安装其它软件。 每次打开pdf,总是默认单页视图,修改滚动后,下次打开又 一样,有时候比较烦。 后面打开编辑->首选项, 如下修改,下次打开就是默认滚动了

Websocket通信实战项目(图片互传应用)+PyQt界面+python异步编程(async) (上)服务器端python实现

Rqtz : 个人主页 ​​ 共享IT之美,共创机器未来 ​ Sharing the Beauty of IT and Creating the Future of Machines Together 目录 项目背景 ​编辑​专有名词介绍 服务器GUI展示 功能(位置见上图序号) 客户端GUI展示(h5cssjs&#xf…

flask的进阶使用方法

【 一 】一对多关系 # 1 一对一 [本质就是一对多--》多的那个唯一] # 2 一对多 # 3 多对多1.1 关系 #### 一对多关系 class Hobby(Base):__tablename__ hobbyid Column(Integer, primary_keyTrue)caption Column(String(50), default篮球)def __str__(self):return sel…

C++多态(虚函数,纯虚函数,抽象类)

一.多态 1.理解: 多种形态,多种形式 eg:多个派生类均把基类的方法run重新实现,但是实现的方式不同,体现了多种形式,即为多态 2.分类 (1)编译时的多态:在编译过程中确定了同名操…

Java中的代码优化与重构策略

Java中的代码优化与重构策略 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿! 1. 引言 代码优化与重构在软件开发中扮演着至关重要的角色。优秀的代码不仅令人…

将游戏降权运行 2024年,防止游戏检测,泄漏个人隐私

不得不说,现在的游戏,胆子是真的越来越大了。很多都带了个启动器,你开着游戏的时候他就给他开多了1个扫描器,看下你有没看一些小孩不宜的,玩游戏不宜打开的软件什么的,包括你的MAC地址啊,你当前…

pydub、ffmpeg 音频文件声道选择转换、采样率更改

快速查看音频通道数和每个通道能力判断具体哪个通道说话;一般能量大的那个算是说话 import wave from pydub import AudioSegment import numpy as npdef read_wav_file(file_path):with wave.open(file_path, rb) as wav_file:params wav_file.getparams()num_cha…

量化交易:金融投资的新篇章

在金融投资的世界里,量化交易正逐渐成为一股不可忽视的力量。它以数据驱动和算法决策为特点,为投资者提供了一种全新的交易方式。本文将深入探讨量化交易的基本概念、优势、挑战以及如何开始使用量化交易策略。 量化交易的定义与起源 量化交易&#xf…

Android10以上实现获取设备序列号功能

Android10以上实现获取设备唯一标识,目前只支持华为和荣耀设备。实现原理:通过无障碍服务读取序列号界面。 public class DeviceHelper implements Application.ActivityLifecycleCallbacks {static final String TAG "WADQ_DeviceHelper";s…

Zoom使用的基本步骤和注意事项

Zoom是一款功能强大的视频会议软件,广泛应用于远程办公、在线教育、团队协作等多个场景。以下是Zoom使用的基本步骤和注意事项: 一、注册与登录 注册Zoom账户: 访问Zoom官方网站(如zoom.us),点击“注册”…

Android Enable 和clickable

setEnabled 使能控件 设置为false,该控件永远不会活动,不管设置为什么属性,都无效; 设置为true,表明激活该控件,控件处于活动状态,处于活动状态,就能响应事件了,比如触摸…

mybatis实现动态sql

第一章、动态SQL MyBatis 的强大特性之一便是它的动态 SQL。如果你有使用 JDBC 或其它类似框架的经验,你就能体会到根据不同条件拼接 SQL 语句的痛苦。例如拼接时要确保不能忘记添加必要的空格,还要注意去掉列表最后一个列名的逗号。利用动态 SQL 这一特…

2024北京大健康展,北京健康生活产品展览会十月举办

2024北京健博会,立足北京,效应辐射全国买方市场,助力健康中国事业建设; 2024第11届中国(北京)国际大健康产业博览会 The 2024 China (Beijing) International Health Service Expo 时间:2024年…

华为 RIP 协议中 RIP 兼容版本、RIPv1、RIPv2 在收发 RIP 报文时的区别

华为 RIP 协议中 RIP 兼容版本、RIPv1、RIPv2 的区别 为了更好地支持实际环境中路由器对 RIP 的支持,华为 VRP 平台具有一个兼容版本,默认情况下启动 RIP 进程后,如果没有配置 RIP 版本,该版本就为兼容版本,对 versio…

[ C++ ] 深入理解模板( 进 阶 )

目录 非类型模板参数 类模板没有实例化的情况 模板的特化 注意函数特化中遇到的问题 建议:(直接使用函数重载) 类模板特化 全特化 偏特化 偏特化有以下两种表现方式: 部分特化(将模板参数类表中的一部分参数特化…