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.pswp.cn/diannao/40938.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/40938.shtml
英文地址,請注明出處:http://en.pswp.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++ ] 深入理解模板( 進 階 )

目錄 非類型模板參數 類模板沒有實例化的情況 模板的特化 注意函數特化中遇到的問題 建議:(直接使用函數重載) 類模板特化 全特化 偏特化 偏特化有以下兩種表現方式: 部分特化(將模板參數類表中的一部分參數特化…