当前位置:首页 » 编程语言 » java对象复制

java对象复制

发布时间: 2022-07-09 00:53:06

java怎么样构造函数复制一个对象

一、用Object 本身的复制对象的方法, clone()。对象可克隆的类必须实现Cloneable接口,并且clone方法是浅克隆。
二、类实现Serializable,用ObjectOutputStream、ObjectInputStream 来复制对象。

对象克隆有点复杂,尤其是第一种。
关于这个问题你可以搜索:
JAVA深复制(深克隆)与浅复制(浅克隆)
这篇文章看看。

Ⅱ 如何Java复制父类对象的数据到子类对象中

可以做到。首先数组的定义就是一组相同数据类型的集合,而继承父类的子类作为一种引用数据类型,他造出的对象也是可以保存在数组当中的。但是基本上没人会这样做,但实现我认为是能够的,你想想,String作为一种引用数据类型,他造出的字符串都可以保存在数组中,子类为什么不能呢?
-

Ⅲ java对象深层复制有什么好处

你说的是不是深拷贝和浅拷贝,深拷贝是把一个原变量的值赋给新的变量,而浅拷贝只是把原变量在计算机的内存地址赋给新的变量,所以深拷贝之后可以独立操作原变量和新变量,互不干扰,而浅拷贝只要新变量或者原变量的值改变了,另一个也改变

Ⅳ Java 如何复制对象

可以使用clone来实现,clone用于为引用类型的复制
1.使用clone方法的类必须先实现Cloneable接口,不然clone方法会直接返回CloneNotSupportedException不支持克隆的异常
2、实现Cloneable接口的类应该使用公共方法重写 Object.clone(它是受保护的)。某个对象实现了此接口就克隆它是不可能的。即使 clone 方法是反射性调用的,也无法保证它将获得成功。
3、在Java.lang.Object类中克隆方法是这么定义的:
protected Object clone()
throws CloneNotSupportedException
创建并返回此对象的一个副本。表明是一个受保护的方法,同一个包中可见。

Ⅳ 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中,复制一个对象,有什么好的方法

使用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对象癿深复制和浅复制区别指什么帮帮忙~~

浅拷贝:仅复制引用,即两个引用指向同一个对象,如:
String aString = "hello";
String bString = aString;

深拷贝:复制对象的内容,Java里通过实现Clonnable并覆盖clone方法实现,具体深度由clone的实现决定,如:
public class People implements Clonnable{
private int age;
private String name;

public void setAge(int age){
this.age = age;
}

public int getAge(){
return this.age;
}

public void setName(String name){
this.name = name;
}

public String getAge(){
return this.name;
}

public Object clone(){
People people = new People();
people.setAge(this.age);
people.setName(this.name);

return people;
}
}

如果对您有帮助,请记得采纳为满意答案,谢谢!祝您生活愉快!

vaela

Ⅷ 如何克隆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 对象 克隆

这是里面的一段(非完整的例子):
public class Snake implements Cloneable {

...........................

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

}
书上一段给你看看,希望有帮助把。。
当制作实例变量的一个引用时,原始实例变量和副本实力变量在内存中引用的均是同一个存储空间,这就意味着但对其中一个实例变量操作时就会影响到这个对象的副本。例如下面的程序代码。在执行时将会看到所画的两条线重合在一起,都是改变后的LineFigure1。
LineFigure lineFigure1 = new LineFigure();
LineFigure lineFigure2 = lineFigure1;
lineFigure1.draw(g);
…code for changing lineFigure1
lineFigure2.draw(g);
如果想让LineFigure2成为一个新的对象,就要用到Clone( )方法。Clone的后对象和原对象的存储空间不同,改变其中一个并不会对另一个产生任何影响。例如下面代码所示:
…………….
LineFigure2 = lineFigure1.clone();
…………….
如果LineFigure2中没有对其他对象的引用,事情就到此结束了,但LineFigure类中的实例变量StartPoint和EndPoint都是一个对象,即使简单地实现了对LineFigure1地Clone,可LineFigure1和LineFigure2的StartPoint和EndPoint实例变量引用的是同一个变量,要想完全的实现将LineFigure2和LineFigure1分离开,就要实现Cloneable接口,并重写Clone方法。Cloneable接口是Java提供的少数几个标签化接口之一。平常所说的标签化接口就是不提供任何方法的接口。在图形白板程序中,也用到了Cloneable接口,例如LineFigure类中的代码:
public class LineFigure extends Figure implements Cloneable{
public Object clone(){
LineFigure lineFigure = new LineFigure();
lineFigure.startPoint = (Point)startPoint.clone();
lineFigure.endPoint = (Point)endPoint.clone();
lineFigure.firstDraw = firstDraw;
return lineFigure;
}
………………..
}
这样一来,LineFigure1和LineFigure2所引用的对象就没有任何的重合。对其中任何一个进行修改而不影响另一个的应用。

热点内容
红包邀请验证码在哪里填安卓手机 发布:2024-05-16 22:30:01 浏览:641
上传日上限 发布:2024-05-16 22:26:08 浏览:858
c语言基本概念 发布:2024-05-16 21:44:16 浏览:190
sqlserver跨库查询 发布:2024-05-16 21:36:56 浏览:164
sql多表连接语句 发布:2024-05-16 21:21:53 浏览:301
sqlscope 发布:2024-05-16 21:17:37 浏览:966
存储器通常有 发布:2024-05-16 21:17:35 浏览:379
云数据库概念 发布:2024-05-16 21:17:32 浏览:819
铺地板编程 发布:2024-05-16 21:07:36 浏览:459
苹果手机缓存删除 发布:2024-05-16 21:04:35 浏览:507