導航:首頁 > 源碼編譯 > javaclone源碼

javaclone源碼

發布時間:2022-11-26 12:55:39

『壹』 java 編程clone方法

1、Cloneable介面只是個標記介面,裡面沒有任何實現方法,不實現Cloneable介面也可以使用Object的clone方法
2、任何類都是Object的子類,在子類里當然可以直接調用clone方法,比如super.clone()
3、注意clone方法用native修飾,表明該方法有方法體只是調用的jre外部方法,一般是用C語言實現,其作用是通過jvm和操作系統底層交互
4、參照3

『貳』 java怎麼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()方法。

『叄』 java的clone方法

1.Object中的clone執行的時候使用了RTTI(run-time type identification)的機制,動態得找到目前正在調用clone方法的那個reference,根據它的大小申請內存空間,然後進行bitwise的復制,將該對象的內存空間完全復制到新的空間中去,從而達到shallow的目的。
所以你調用super.clone() 得到的是當前調用類的副本,而不是父類的副本。
2.這句話是J2SE API幫助裡面的話,意思是要讓實例調用clone方法就需要讓此類實現Cloneable介面,API裡面還有句話是:如果在沒有實現 Cloneable 介面的實例上調用 Object 的 clone 方法,則會導致拋出 CloneNotSupportedException 異常,這便是「合法」的含義。 但請注意,Cloneable介面只是個標簽介面,不含任何需要實現的方法,就像Serializable介面一樣。

3. Object.clone()? 不能這么調用的。

回答還滿意么。

/*------------------以下是對問題的補充---悲哀的注釋------------*/

ok 請容我慢慢道來
你看到clone()是Object的方法,而Object是所有類的父類,就認為可以用Object調用 clone是么?
但不能使用Object調用clone()方法
原因如下:
1.從你寫法本身來看,Object.clone()肯定不行,因為Object是類, 而clone()是成員方法,所以不能用Object.clone();
2.那麼是不是可以先Object obj=new Object();再obj.clone();或者Object.class.newInstance().clone()呢?還是不行。
clone()對Object類對象本身是不可見的。所以你會發現找不到clone()方法
原因是:clone()方法是protected訪問許可權
方法原型:protected native java.lang.Object clone() throws java.lang.CloneNotSupportedException
而protected許可權的含義是:只對同一包中的類和不同包中的子類及間接子類可訪問,換句話說就是不同包中的非子類或間接子類不能訪問,包含了默認的包訪問許可權。
這個地方容易混淆哦
你可能會問任何類都是Object的子類為什麼不能訪問呢,對,任何類是他的子類也繼承了clone()方法
但請注意,你那句代碼clone()的調用者是誰?是Object本身,即Object對象,正如我們所說,「不同包中的非子類或間接子類不能訪問」,這裡面也包括了父類本身,你調用者是父類,在不同包中,protected成員對父類不可見哦,所以根本不能用object對象調用clone()

綜上,因為在不同包中父類本身不能調用,也找不到protected方法 ,故無法在代碼中使用object直接調用clone()方法,

有點難理解,關鍵在對protected的理解上,因為protected除了本身在繼承上的訪問許可權外,還包含了包訪問許可權,希望回答你還滿意。

『肆』 java clone方法 怎麼用

什麼是"clone"?

在實際編程過程中,我們常常要遇到這種情況:


有一個對象A,在某一時刻A中已經包含了一些有效值,此時可能會需要一個和A完全相同新對象B,並且此後對B任何改動都不會影響到A中的值,也就是說,A與B是兩個獨立的對象,但B的初始值是由A對象確定的。在 Java語言中,用簡單的賦值語句是不能滿足這種需求的。要滿足這種需求雖然有很多途徑,但實現clone()方法是其中最簡單,也是最高效的手段。

Java的所有類都默認繼承java.lang.Object類,在java.lang.Object類中有一個方法clone()。JDK API的說明文檔解釋這個方法將返回Object對象的一個拷貝。

要說明的有兩點:

一是拷貝對象返回的是一個新對象,而不是一個引用。

二是拷貝對象與用 new操作符返回的新對象的區別就是這個拷貝已經包含了一些原來對象的信息,而不是對象的初始信息。

怎樣應用clone()方法?

一個很典型的調用clone()代碼如下:

{
publicintaInt;
publicObjectclone(){
CloneClasso=null;
try{
o=(CloneClass)super.clone();
}catch(CloneNotSupportedExceptione){
e.printStackTrace();
}
returno;
}


有三個值得注意的地方,

一是希望能實現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 代碼實現對象的拷貝

package com.teven.comefromnet;

/**
* Name:C.java
* Founction:
* Created:2011-9-15
* @author :teven
*/
public class CloneTest {

static class A implements Cloneable{
int i=1;

@Override
protected A clone() throws CloneNotSupportedException {

return (A)super.clone();
}

}
static class B extends A{
int j=2;

@Override
protected B clone() throws CloneNotSupportedException {

return (B)super.clone();
}

}
static class C extends B{
int k=3;

@Override
protected C clone() throws CloneNotSupportedException {

return (C)super.clone();
}

}

public static void main(String[] args) throws CloneNotSupportedException {
A a = new CloneTest.A();
A aa = (A) a.clone();
System.out.println("before clone a.i = "+ a.i+">> after clone aa.i=" +aa.i);

B b = new CloneTest.B();
B bb= (B) b.clone();
System.out.println("before clone b.j = "+ b.j+">> after clone bb.j=" +bb.j);

C c = new CloneTest.C();
C cc= (C) c.clone();
System.out.println("before clone c.k = "+ c.k+">> after clone cc.k=" +cc.k);

}

}

『陸』 java clone方法

可以用this啊,應為你調用this.clone是調用的當前類的clone方法,所以你在調用object的clone時就要寫super了,你把你employee的clone方法名換個別的名字
public Employee cloneDemo() throws CloneNotSupportedException
{
return (Employee)this.clone();
}
就可以了

『柒』 java clone()方法

雖然clone是Object就有的方法,但是想用必須實現Cloneable介面,String沒有實現這個介面

所以這么提示,The method clone() from the type Object is not visible

從Object繼承過來的clone方法不可見

『捌』 java clone()

這是Object對象的clone克隆/復制方法作用是執行後將復制一份當前對象,並返回。

使用clone方法的類必須先實現Cloneable介面,不然clone方法會直接返回CloneNotSupportedException不支持克隆的異常

所以 Employee必須 implements Cloneable
又由於clone方法是Object就具有的,所以可以直接返回return (Employee)this.clone();

『玖』 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的object類中clone方法的源代碼

看不到的,是C代碼。聽說Java開源了,你倒是可以去官網上看看。

調用中實現clonable介面並給出方法。

public class Example implements Clonable {

int valueToClone;

public Object clone() {
Object o = super.clone();
(Example) o).valueToClone = valueToClone;

return o;
}
}

另外參見API. 有的書建議不採用Clonable,因為非常難實現一個完美的Clone 鏈,且方法本身返回Object需要cast,並不美觀。可以自己寫一個介面代替。

閱讀全文

與javaclone源碼相關的資料

熱點內容
怎麼在手機設置中解除應用加密 瀏覽:551
安卓手機怎麼讓微信提示音音量大 瀏覽:331
批處理域用戶訪問共享文件夾 瀏覽:131
怎麼做軟綿綿解壓筆 瀏覽:699
壓縮包網路傳輸會丟色嗎 瀏覽:221
x79伺服器主板用什麼內存條 瀏覽:441
小程序編譯器源碼 瀏覽:66
程序員降薪么 瀏覽:201
u盤內部分文件夾不顯示 瀏覽:397
手機上pdf怎麼加密碼 瀏覽:1001
51單片機hex文件 瀏覽:329
vsc怎麼編譯bin 瀏覽:6
安卓基站延遲怎麼辦 瀏覽:544
亞馬遜店鋪可以遷移到雲伺服器嗎 瀏覽:841
真空泵壓縮比會改變嗎 瀏覽:330
示波器app怎麼看 瀏覽:613
米家app英文怎麼改 瀏覽:606
學習編程你有什麼夢想 瀏覽:887
農行信用報告解壓密碼 瀏覽:218
小程序員調試信息 瀏覽:184