当前位置: 代码迷 >> J2SE >> 关于如何拷贝一个对象
  详细解决方案

关于如何拷贝一个对象

热度:41   发布时间:2016-04-24 13:14:17.0
关于怎么拷贝一个对象。
请教一个问题:
public class Ja(){
public int i ;
public void setI( int i ){
this.i = i;
}
public int getI( ){
return i;
}
}

public class Main(){
public static void main(){
Ja ja1 = new Ja();
ja1.setI(9);

Ja ja2 = new Ja();
ja2 = ja1;

// 我试过了,ja2虽然是 new 出来的,但是却是引用的 ja1.
请问怎么复制一份 ja1,而且不是引用呢?
}
}

------解决方案--------------------
浅拷贝:调用Object的clone()方法
深拷贝:重写(覆盖)clone()方法
------解决方案--------------------
Java code
public class Test {  public static void main(String args[]) {    Ja ja1 = new Ja();    ja1.setI(9);    Ja ja2 = ja1.clone(); // 调用clone方法实现复制  }}class Ja {  public int i;  public void setI(int i) {    this.i = i;  }  public int getI() {    return i;  }  @Override  public Ja clone() { // 自定义的clone方法    Ja a = new Ja();    a.setI(this.getI());    return a;  }}
------解决方案--------------------
浅克隆:因为楼主类中没有对象引用,所能用Object的clone()方法 ,你的类应该实现Cloneable接口。
Java code
class Ja implements Cloneable {    public int i;    public void setI(int i) {        this.i = i;    }    public int getI() {        return i;    }    @Override    public Object clone() throws CloneNotSupportedException { // 自定义的clone方法        return super.clone();    }}public class Test {          public static void main(String args[]) {            Ja ja1 = new Ja();            ja1.setI(10);            Ja ja2 = null;            try {                ja2 = (Ja)ja1.clone();            } catch (CloneNotSupportedException e) {                // TODO Auto-generated catch block                e.printStackTrace();            } // 调用clone方法实现复制            System.out.println(ja2.getI());                      }}
------解决方案--------------------
调用超类 
也就是Cloneable 接口
  相关解决方案