導航:首頁 > 編程語言 > java中clone

java中clone

發布時間:2022-09-03 11:55:47

『壹』 java代碼 clone()函數的作用是什麼

從樓主對回答的追問上發現,樓主的連JAVA基本的語法都很差啊。=號是賦值運算符,不是比較。

double[] vectorValue;
vectorValue = vectorValue.clone();

這個段代碼執行肯定報錯了。但他還的意思還是很明確的。

首先:double[] vectorValue; 這個是定義了一個double類型的數組變數vectorValue。

其次:vectorValue = vectorValue.clone(); //這個是將vectorValue 克隆一份,賦值給自己。也就是說vectorValue變數指向了新的一塊內存區域。

舉個例子可能更能說明問題。

{
privateinti;
publicTestMain(inti){
this.i=i;
}

@Override
protectedObjectclone(){
//TODOAuto-generatedmethodstub
returnnewTestMain(this.getI()+1);
}

publicintgetI(){
returni;
}

/**
*@paramargs
*/
publicstaticvoidmain(String[]args){
//TODOAuto-generatedmethodstub

TestMaintm1=newTestMain(1);
TestMaintm2=tm1;
tm1=(TestMain)tm1.clone();
System.out.println(tm1.getI());//tm1指向的是通過clone()方法創建的新的對象的地址,i的值已經是2了。
System.out.println(tm2.getI());//tm2指向的還是tm1創建時的地址,i的值為1

}

}

『貳』 Java中是如何實現克隆

java 實現clone對象方法的步驟如下:
(1)實現Cloneable介面
(2)重載Object類中的clone()方法,重載時需定義為public
(3)在重載方法中,調用super.clone()
例如:
class CloneClass implements Cloneable {
public int aInt;

public Object clone() {
CloneClass o = null;
try {
o = (CloneClass) super.clone();
} catch (CloneNotSupportedException e) {
e.printStackTrace();
}
return o;
}

『叄』 關於java中clone()使用的問題,clone無法輸出克隆對象的面積和周長(刪除了抽象類的實現)

  1. 自己寫Cloneable介面,改名為Shape,避免跟java.lang.Cloneable重名,否則java就近原則,會引用你寫的介面。

  2. Rect implements Shape, Cloneable,這里Cloneable是java.lang包的,如果你的類或者父類沒實現這個介面,就會報CloneNotSupportedException。

『肆』 java里clone方法的問題

首先必須實現介面,
public interface Cloneable此類實現了 Cloneable 介面,以指示 Object.clone() 方法可以合法地對該類實例進行按欄位復制。

如果在沒有實現 Cloneable 介面的實例上調用 Object 的 clone 方法,則會導致拋出 CloneNotSupportedException 異常。

按照慣例,實現此介面的類應該使用公共方法重寫 Object.clone(它是受保護的)。請參閱 Object.clone(),以獲得有關重寫此方法的詳細信息。
==》protected Object clone() throws CloneNotSupportedException

注意,此介面不 包含 clone 方法。因此,因為某個對象實現了此介面就克隆它是不可能的。即使 clone 方法是反射性調用的,也無法保證它將獲得成功。

public class Box implements Cloneable{

public Date d = new Date();

@Override
public Box clone() throws CloneNotSupportedException
{
Box cloned = (Box)super.clone();

cloned.d = (Date)d.clone();

return (Box)super.clone();
}
public static void main(String[] args) throws Exception {
Box b = new Box();
Box b2 = (Box)b.clone();

System.out.println(b.d == b2.d);
}
}

測試後直接返回的話結果是地址相等。
你在克隆後用了set方法重新操作了,肯定是不一樣的。。。。!!!
3,注釋起來後結果是改變了的,你會不會是沒編譯保存。
你們老師是說的對的

你好,當然知道 你說的那樣。我正是因為三個的試過了,所以最後沒改回去,那不正是你第二個問題嘛。。。
如果是深克隆就是FALSE 不是深克隆就返回TRUE啊。

『伍』 Java中Object.clone方法的用途是什麼

clone方法是用來復制一個對象。不同於「=」。
對於值類型的數據是可以通過「=」來實現復制的。但是對於引用類型的對象,「=」只能復制其內存地址,使對象的引用指向同一個對象,而不會創建新的對象。clone則可以創建與原來對象相同的對象。舉個例子:
有一個Car類
Car c1 = new Car();
Car c2 = c1;
這兩句事實上只創建了一個對象。只不過c1和c2指向了同一個對象。
如果上面的兩句改為:
Car c1 = new Car();
Car c2 = c1.clone();
那麼就有了兩個對象,而且這兩個對象的內容是一樣的。(所有的屬性值相同)
同時,我想說的是一樓的使用,雖然程序本身沒有錯誤,但是用date.clone()添加到list當中,會再次創建date的對象,消耗內存資源,這是編程的忌諱。特別是編寫java程序,更要好好利用內存的有限資源,避免浪費。

『陸』 java中的clone()方法,幾點疑問!

不實現Cloneable介面而直接調用Object.clone方法是會拋出CloneNotSupportedException的。 另外,介面往往只是一個協議,仔細看api文檔就可以知道Cloneable只是一個標識介面,就是沒有任何方法聲明的介面,他或許並不能幹實際的什麼事情,但是他可以讓大家知道某個類實現了Cloneable介面,那麼大家就很清楚這個類提供clone功能。對應系統的維護來說是一個不錯的特性,就以clone為例,如果可以clone的類和不可以clone的類的聲明都一樣,那麼一個新進開發人員怎麼知道哪些類提供Clone,而哪些類不提供clone呢。每個人寫的代碼風格都不同,又不遵守一些協議,時間久了還怎麼去維護呢。

『柒』 java 數組的clone方法是引用呢,還是新建一個新的數組(與之前的數組的值的變化沒有關系了)

這個要看你數組的內容是什麼了,對於非基本數據類型的數組,比如數組的內容是類,clone()方法也是復制數組的內容,但是這時候數組的內容是指向對象的引用而不是對象的本身.對於基本數據類型的數組,clone()方法就是新建一個新的數組,與之前的數組的值的變化沒有關系.

『捌』 Java中clone方法的疑問

因為在java.lang.Object類的定義里,clone()這個方法是protected,
按照protected的訪問控制范圍規定,只能是當前類,或當前包,或其他包的子類,這三種情況能訪問。

注意這里的」能訪問「都是通過原有對象訪問的。

你可能以為你代碼里obj滿足」其他包的子類「這個條件,錯了,一旦new出來,就脫離了作用域了。而super仍是原有對象,因此可以訪問父類Base乃至Object的保護的clone()方法。

『玖』 java中clone出的對象怎麼用

首先必須實現介面,publicinterfaceCloneable此類實現了Cloneable介面,以指示Object.clone()方法可以合法地對該類實例進行按欄位復制。如果在沒有實現Cloneable介面的實例上調用Object的clone方法,則會導致拋出CloneNotSupportedException異常。按照慣例,實現此介面的類應該使用公共方法重寫Object.clone(它是受保護的)。請參閱Object.clone(),以獲得有關重寫此方法的詳細信息。==》protectedObjectclone()注意,此介面不包含clone方法。因此,因為某個對象實現了此介面就克隆它是不可能的。即使clone方法是反射性調用的,也無法保證它將獲得成功。{publicDated=newDate();@OverridepublicBoxclone(){Boxcloned=(Box)super.clone();cloned.d=(Date)d.clone();return(Box)super.clone();}publicstaticvoidmain(String[]args)throwsException{Boxb=newBox();Boxb2=(Box)b.clone();System.out.println(b.d==b2.d);}}測試後直接返回的話結果是地址相等。你在克隆後用了set方法重新操作了,肯定是不一樣的。。。。!!!3,注釋起來後結果是改變了的,你會不會是沒編譯保存。你們老師是說的對的你好,當然知道你說的那樣。我正是因為三個的試過了,所以最後沒改回去,那不正是你第二個問題嘛。。。如果是深克隆就是FALSE不是深克隆就返回TRUE啊。

『拾』 Java 中 如果clone為什麼必須實現Cloneable介面

因為如果不繼承自Cloneable介面,當調用clone()時會拋出CloneNotSupportedException異常

以下是詳細講解:

Java的所有類都默認繼承java.lang.Object類,在java.lang.Object類中有一個方法clone()。JDK API的說明文檔解釋這個方法將返回Object對象的一個拷貝。要說明的有兩點:一是拷貝對象返回的是一個新對象,而不是一個引用。二是拷貝對象與用 new操作符返回的新對象的區別就是這個拷貝已經包含了一些原來對象的信息,而不是對象的初始信息。
怎樣應用clone()方法?
一個很典型的調用clone()代碼如下:
class CloneClass implements Cloneable{
public int aInt;
public Object clone(){
CloneClass o = null;
try{
o = (CloneClass)super.clone();
}catch(CloneNotSupportedException e){
e.printStackTrace();
}
return o;
}

有三個值得注意的地方,一是希望能實現clone功能的CloneClass類實現了Cloneable介面,這個介面屬於java.lang 包,java.lang包已經被預設的導入類中,所以不需要寫成java.lang.Cloneable。另一個值得請注意的是重載了clone()方 法。最後在clone()方法中調用了super.clone(),這也意味著無論clone類的繼承結構是什麼樣的,super.clone()直接或 間接調用了java.lang.Object類的clone()方法。下面再詳細的解釋一下這幾點。

應該說第三點是最重要的,仔細 觀察一下Object類的clone()一個native方法,native方法的效率一般來說都是遠高於java中的非native方法。這也解釋了為 什麼要用Object中clone()方法而不是先new一個類,然後把原始對象中的信息賦到新對象中,雖然這也實現了clone功能。對於第二點,也要 觀察Object類中的clone()還是一個protected屬性的方法。這也意味著如果要應用clone()方法,必須繼承Object類,在 Java中所有的類是預設繼承Object類的,也就不用關心這點了。然後重載clone()方法。還有一點要考慮的是為了讓其它類能調用這個clone 類的clone()方法,重載之後要把clone()方法的屬性設置為public。

那麼clone類為什麼還要實現 Cloneable介面呢?稍微注意一下,Cloneable介面是不包含任何方法的!其實這個介面僅僅是一個標志,而且這個標志也僅僅是針對 Object類中clone()方法的,如果clone類沒有實現Cloneable介面,並調用了Object的clone()方法(也就是調用了 super.Clone()方法),那麼Object的clone()方法就會拋出CloneNotSupportedException異常。

閱讀全文

與java中clone相關的資料

熱點內容
游俠下載的游戲都需要解壓沒 瀏覽:81
初次認識控制命令完整版 瀏覽:255
雙屏程序員 瀏覽:799
怎麼把兩個文件夾放到一個文件夾裡面 瀏覽:545
命令與征服大神宮 瀏覽:207
php發送簡訊驗證碼 瀏覽:505
前端伺服器如何接收http請求 瀏覽:796
程序員資質查詢 瀏覽:357
程序員被別人開除怎麼辦 瀏覽:888
解壓視頻看一下 瀏覽:129
android仿知乎日報 瀏覽:335
為什麼前端比安卓手機需求大 瀏覽:855
命令行執行關機命令 瀏覽:52
在學校心情不好怎麼解壓 瀏覽:116
我的世界基岩版伺服器怎麼讀取 瀏覽:161
快件命令 瀏覽:853
阿里雲06折伺服器能用嗎 瀏覽:421
h5個人中心源碼 瀏覽:221
下三角矩陣的壓縮存儲 瀏覽:922
招人用什麼app好用 瀏覽:722