Java的clone()用法例項解析
1.背景
用java寫程式的時候很苦惱的一件事就是,如果將一個物件a賦給另一個物件b,那麼你改變a的變數值得時候,b的值也對應的變化。如果我們只想單純的獲取那個時刻的a的狀況給b的話,就要用到clone方法了。
比如說如下程式碼:
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
Node n=new Node();
Node n1=n;
n.a=5;
System.out.print(""+n1.a);
}
}
public class Node {
int a=1;
}
輸出結果是5,
下面就利用clone實現如上情況輸出結果是1.
2.程式碼
克隆的實現需要一下幾步:
在派生類中覆蓋基類的clone()方法,並宣告為public。
在派生類的clone()方法中,呼叫super.clone()。
在派生類中實現Cloneable介面。Cloneable介面沒有任何抽象的方法,這樣的成為標識介面。實現這個介面,只是為了告訴編譯器這個物件可以被克隆了。
首先我們在派生類中覆蓋了Object類的Clone()方法,並宣告為public的。然後我們呼叫了super.clone()方法,這裡會丟擲一個異常(對於這個異常大家可以自己檢視java的幫助文件),所以必須用try……catch……語句捕獲,然後返回此物件。這裡需要說明一下,Clone()方法返回的是Object型別的,所以需要強制型別轉換public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
Node n=new Node();
Node n1=(Node)n.clone();
n.a=5;
System.out.print(""+n1.a);
}
}
public class Node implements Cloneable{
int a=1;
public Object clone(){
Node n=null;
try{
n=(Node)super.clone();
}
catch(Exception e ){
e.printStackTrace();
}
return n;
}
}
輸出結果是1;
15. 不通過建構函式也能建立物件嗎()
A 是 B 否
答案:A
解析:Java建立物件的幾種方式(重要):
(1) 用new語句建立物件,這是最常見的建立物件的方法。
(2) 運用反射手段,呼叫java.lang.Class或者java.lang.reflect.Constructor類的newInstance()例項方法。
(3) 呼叫物件的clone()方法。
(4) 運用反序列化手段,呼叫java.io.ObjectInputStream物件的 readObject()方法。
(1)和(2)都會明確的顯式的呼叫建構函式 ;(3)是在記憶體上對已有物件的影印,所以不會呼叫建構函式 ;(4)是從檔案中還原類的物件,也不會呼叫建構函式。
/********************************
* 本文來自部落格 “李博Garvin“
* 轉載請標明出處:http://blog.csdn.net/buptgshengod
******************************************/
相關文章
- javascript this 用法例項程式碼解析JavaScript
- Java克隆(Clone)的應用薦Java
- Java正規表示式提取字元的方法例項Java字元
- BeautifulSoup解析庫select方法例項——獲取企業資訊
- java的 clone方法Java
- torch.einsum 的用法例項
- 封裝type方法例項封裝
- Java解析Excel例項解析JavaExcel
- xml方式的 android的 tabhost用法例項XMLAndroid
- 邊界值分析法例項
- javascript 靜態方法和例項方法例項JavaScript
- jQuery原始碼解析之clone()jQuery原始碼
- java clone機制Java
- JS訪問SWF的函式用法例項JS函式
- DES演算法例項詳解演算法
- JavaScript閉包原理與用法例項JavaScript
- JavaScript建立物件方法例項小結JavaScript物件
- RNN二進位制加法例項RNN
- charAt()函式用法例項程式碼函式
- $.ajax()用法例項程式碼介紹
- android中部分Intent用法例項AndroidIntent
- sql的 exists 的用法例項--至少語法不錯SQL
- javascript閉包用法例項程式碼分析JavaScript
- linux下grep命令用法例項教程Linux
- fastjson 物件字串互轉方法例項ASTJSON物件字串
- 分散式 ZooKeeper 快取用法例項教程分散式快取
- JS中陣列與物件的遍歷方法例項JS陣列物件
- java狀態模式例項解析Java模式
- <input type="range">標籤用法例項程式碼
- C#中JavaScriptSerializer幫助類用法例項C#JavaScript
- Android Handler詳細使用方法例項Android
- JAVA中的指標,引用及物件的cloneJava指標物件
- UML用例圖例項解析
- javascript排序各種演算法例項程式碼JavaScript排序演算法
- 自然分類演算法例項程式碼分享演算法
- javascript模擬實現trim()方法例項程式碼JavaScript
- java_clone方法使用詳解Java
- Java XML程式設計例項解析JavaXML程式設計