當前位置:首頁 » 編程語言 » java復制對象

java復制對象

發布時間: 2022-09-17 22:17:00

『壹』 java,,"淺克隆,只復制一個對象 ,深克隆 對象和引用一起復制"有java實例嗎不理解啊

對只包含進本類型的類來說,無所謂深克隆。但是一個類包含集合類或者復雜的類,就要考慮二者的區別了。

class Student {
private int id;
private Address address;
private ArrayList<Book> bookList;
}
對於以上類的一個對象a和克隆類 o來說:
淺克隆:
a !=o 但是 a.address == o.address, a.bookList == o.bookList
深克隆:
a !=o 但是 a.address != o.address, a.bookList != o.bookList
並且 bookList中的每個元素不是相同對象。
簡言之, 淺克隆只復制本對象,深克隆除了本對象,其兒子、孫子、....都要克隆。
以上純手敲,有錯請包涵。

『貳』 java 已知一個對象的引用,如何復制一個對象呢

obj.clone();2樓那個只是兩個引用指向一個對象!

『叄』 如何克隆Java對象

Java中的對象涉及使用引用類型,沒有直接的方法可將一個對象的內容復制到一個新對象中。將一個引用分配給另一個引用只會給相同對象建立另一個引用。因此,Java對所有引用類型使用一個特殊的clone()方法,為對象復制自身提供一個標準的機制。以下是你需要了解和克隆Java對象有關的細節。為何建立一個本地拷貝?給一個對象建立本地拷貝的原因很可能是由於你計劃修改該對象,並且你不想修改方法調用者的對象。如果你確定你需要一個本地拷貝,你可以使用Object類的clone()方法來執行這項操作。clone()方法被定義為受保護方法,但你必須在你希望克隆的所有子類中重新公開定義它。例如,標准庫類ArrayList忽略clone(),但你可以這樣為ArrayList調用clone()方法:import java.util.*;class MyInt {private int i;public MyInt(int ii) { i = ii; }public void increment() { i++; }public String toString() {return Integer.toString(i);}}public class Test {public static void main(String[] args) {ArrayList al = new ArrayList();for(int i = 0; i < 10; i++ )al.add(new MyInt(i));ArrayList al1 = (ArrayList)al.clone();// Increment all al1』s elements:for(Iterator e = al1.iterator(); e.hasNext(); ) ((MyInt)e.next()).increment();}}clone()方法生成一個Object,它必須重新轉變為適當的類型。這個例子說明ArrayList的clone()方法如何不能自動克隆ArrayList包含的每一個對象?原有ArrayList和克隆後的ArrayList是相同對象的別名。這種情況通常叫做淺拷貝,因為它僅僅復制一個對象的「表面」部分。實際的對象由這個「表面」,引用指向的所有對象,以及那些對象指向的所有對象等構成。這往往被稱作「對象網路」。下一頁>>

『肆』 如何Java復制父類對象的數據到子類對象中

可以做到。首先數組的定義就是一組相同數據類型的集合,而繼承父類的子類作為一種引用數據類型,他造出的對象也是可以保存在數組當中的。但是基本上沒人會這樣做,但實現我認為是能夠的,你想想,String作為一種引用數據類型,他造出的字元串都可以保存在數組中,子類為什麼不能呢?
-

『伍』 Java中,復制一個對象,有什麼好的方法

使用Java的反射機制實現:為了能更好的區分,寫成了兩個類,可以運行下面的代碼看看效果
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class Test {
public static void main(String[] args) throws Exception {
Customer1 c1 = new Customer1();
c1.setName("c1");
List<String> list = new ArrayList<String>();
list.add("1");
list.add("2");
c1.setList(list);
Map<String,String> map = new HashMap<String, String>();
map.put("map1", "map1");
map.put("map2", "map2");
c1.setMap(map);
Customer2 c2 = new Customer2();
//
Class c = c1.getClass();
Class class2 = c2.getClass();
Field fields[] = c.getDeclaredFields();
for (int i = 0; i < fields.length; i++) {
Field field = fields[i];
String fieldName = field.getName();
String firstLetter = fieldName.substring(0, 1).toUpperCase();
String getMethodName = "get" + firstLetter + fieldName.substring(1);
String setMethodName = "set" + firstLetter + fieldName.substring(1);
Method getMethod = c.getMethod(getMethodName, new Class[] {});
Method setMethod = class2.getMethod(setMethodName,
new Class[] { field.getType() });
Object value = getMethod.invoke(c1, new Object[] {});
setMethod.invoke(c2, new Object[] { value });
}
System.out.println(c2.getName());
System.out.println(c2.getList());
System.out.println(c2.getMap());
}
}
class Customer1 {
private String name;
private List<String> list;
private Map<String, String> map;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public List<String> getList() {
return list;
}
public void setList(List<String> list) {
this.list = list;
}
public Map<String, String> getMap() {
return map;
}
public void setMap(Map<String, String> map) {
this.map = map;
}
}
class Customer2 {
private String name;
private List<String> list;
private Map<String, String> map;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public List<String> getList() {
return list;
}
public void setList(List<String> list) {
this.list = list;
}
public Map<String, String> getMap() {
return map;
}
public void setMap(Map<String, String> map) {
this.map = map;
}
}

『陸』 java對象復制的問題

public class Exception

當調用 Object 類中的 clone 方法復制對象,但該對象的類無法實現 Cloneable 介面時,拋出該異常。

重寫 clone 方法的應用程序也可能拋出此異常,指示不能或不應復制一個對象。

以上引自java api 中文文檔

因為樓主的test沒有實現Cloneable介面..

『柒』 JAVA對象的淺復制和深復制是怎麼一回事啊

舉個例子吧,A是你要復制的對象,A中又引用了對象B,還有一些定義的變數,淺復制後對象為C,C中的變數與A中變數一樣,並且值相同,C中仍然引用了B,仍然指向B。
深復制的話,除了復制對象C之外,另外會把B復制一份D出來,然後C中指向D。

『捌』 java怎麼復制一個一樣的對象

可以使用clone來實現,clone用於為引用類型的復制
1.使用clone方法的類必須先實現Cloneable介面,不然clone方法會直接返回CloneNotSupportedException不支持克隆的異常
2、實現Cloneable介面的類應該使用公共方法重寫 Object.clone(它是受保護的)。某個對象實現了此介面就克隆它是不可能的。即使 clone 方法是反射性調用的,也無法保證它將獲得成功。
3、在Java.lang.Object類中克隆方法是這么定義的:
protected Object clone()
throws CloneNotSupportedException
創建並返回此對象的一個副本。表明是一個受保護的方法,同一個包中可見。
按照慣例,返回的對象應該通過調用 super.clone 獲得。

詳見關於clone的API文檔

『玖』 java怎麼樣構造函數復制一個對象

一、用Object 本身的復制對象的方法, clone()。對象可克隆的類必須實現Cloneable介面,並且clone方法是淺克隆。
二、類實現Serializable,用ObjectOutputStream、ObjectInputStream 來復制對象。

對象克隆有點復雜,尤其是第一種。
關於這個問題你可以搜索:
JAVA深復制(深克隆)與淺復制(淺克隆)
這篇文章看看。

『拾』 關於java克隆對象

--在使用clone方法時,對於每一個類,都需要做如下判斷:
1--默認的clone方法是否能滿足要求
2--默認的clone方法是否能通過調用可變子對象的clone方法修補
3--是否不應該使用clone
----如選擇1和2,就必須實現Cloneable介面,使用public重定義clone方法
意思就是,你如果想用clone方法,首先要考慮Object的clone能不能滿足你的需求,如果可以,那好,直接調用,反之,你就得必須在需要使用clone方法的類中實現Cloneable介面,自己寫一個Clone規則。

熱點內容
安卓如何正確卡槍 發布:2025-01-11 19:29:57 瀏覽:749
米家小相機存儲卡 發布:2025-01-11 19:22:30 瀏覽:698
我的世界如何輸地圖密碼 發布:2025-01-11 19:13:21 瀏覽:225
php表單注冊 發布:2025-01-11 18:43:02 瀏覽:161
虛擬存儲功能 發布:2025-01-11 18:43:01 瀏覽:888
ninjaandroid 發布:2025-01-11 18:26:10 瀏覽:527
華為的編譯器可以用幾個軟體 發布:2025-01-11 18:18:18 瀏覽:620
python中的turtle 發布:2025-01-11 18:06:08 瀏覽:399
羅布樂思賬號密碼手機號多少 發布:2025-01-11 18:00:55 瀏覽:403
在廣州什麼配置的車才能跑滴滴 發布:2025-01-11 18:00:52 瀏覽:893