本文目錄一覽:
- 1、Java中,複製一個對象,有什麼好的方法
- 2、java怎麼樣構造函數複製一個對象
- 3、Java中Object.clone方法的用途是什麼?
- 4、如何複製一個java對象
- 5、java 如何複製一個對象?
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”);
ListString list = new ArrayListString();
list.add(“1”);
list.add(“2”);
c1.setList(list);
MapString,String map = new HashMapString, 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 ListString list;
private MapString, String map;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public ListString getList() {
return list;
}
public void setList(ListString list) {
this.list = list;
}
public MapString, String getMap() {
return map;
}
public void setMap(MapString, String map) {
this.map = map;
}
}
class Customer2 {
private String name;
private ListString list;
private MapString, String map;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public ListString getList() {
return list;
}
public void setList(ListString list) {
this.list = list;
}
public MapString, String getMap() {
return map;
}
public void setMap(MapString, String map) {
this.map = map;
}
}
java怎麼樣構造函數複製一個對象
java複製對象:
一、使用clone。對象可克隆的類必須實現Cloneable介面,並且clone方法是淺克隆。
二、類實現Serializable,用ObjectOutputStream、ObjectInputStream 來複制對象。
三、可以直接new一個對象,賦值!
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對象
/**
* 複製對象
*
* @param srcObj
* @return
*/
public static Object depthClone(Object srcObj) {
if (srcObj == null) {
return null;
}
Object cloneObj = null;
ByteArrayOutputStream out = null;
ObjectOutputStream oo = null;
ByteArrayInputStream in = null;
ObjectInputStream oi = null;
try {
out = new ByteArrayOutputStream();
oo = new ObjectOutputStream(out);
oo.writeObject(srcObj);
in = new ByteArrayInputStream(out.toByteArray());
oi = new ObjectInputStream(in);
cloneObj = oi.readObject();
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} finally {
if (out != null) {
try {
out.close();
} catch (IOException ex) {
ex.printStackTrace();
}
}
if (oo != null) {
try {
oo.close();
} catch (IOException ex) {
ex.printStackTrace();
}
}
if (in != null) {
try {
in.close();
} catch (IOException ex) {
ex.printStackTrace();
}
}
if (oi != null) {
try {
oi.close();
} catch (IOException ex) {
ex.printStackTrace();
}
}
}
return cloneObj;
}
java 如何複製一個對象?
給你個小例子
class test implents Cloneable
{
test t1 = new test();
test t2 = null;
try {
t2 = (test)t1.clone();
} catch (CloneNotSupportedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
用clone()方法,不過在對象重載了Object的clone才能用。Object的clone方法是protected。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/301418.html