欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

淺談Java中實(shí)現(xiàn)深拷貝的兩種方式—clone() & Serialized

 更新時(shí)間:2019年03月14日 14:25:08   作者:劉知安  
這篇文章主要介紹了Java中實(shí)現(xiàn)深拷貝的兩種方式—clone() & Serialized,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

clone() 方法麻煩一些,需要將所有涉及到的類實(shí)現(xiàn)聲明式接口 Cloneable,并覆蓋Object類中的clone()方法,并設(shè)置作用域?yàn)閜ublic(這是為了其他類可以使用到該clone方法)。

序列化的方法簡(jiǎn)單,需要將所有涉及到的類實(shí)現(xiàn)接口Serializable

package b1ch06.clone;

import java.io.Serializable;

class Car implements Cloneable, Serializable {
  private String band;

  public Car(String band) {
    this.band = band;
  }

  public String getBand() {
    return band;
  }

  public void setBand(String band) {
    this.band = band;
  }

  @Override
  public Object clone() throws CloneNotSupportedException {
    return super.clone();
  }
}
package b1ch06.clone;

import java.io.Serializable;

class Employee implements Cloneable, Serializable {
  private String name;
  private Car car;

  public Employee(String name, Car car) {
    this.name = name;
    this.car = car;
  }

  public String getName() {
    return name;
  }

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

  public Car getcar() {
    return car;
  }

  public void setcar(Car car) {
    this.car = car;
  }

  protected void test() {
    System.out.println("test func");
  }

  @Override
  public Object clone() throws CloneNotSupportedException {

    Employee employee_cloned = (Employee) super.clone();
    Car car_cloned = (Car) this.car.clone();
    employee_cloned.setcar(car_cloned);
    return employee_cloned;
  }
}


package b1ch06.clone;


import java.io.*;


public class SerializedClone {
  @SuppressWarnings("unchecked")
  public static <T extends Serializable> T clone(T obj) {
    T cloneObj = null;
    try {
      //寫入字節(jié)流
      ByteArrayOutputStream out = new ByteArrayOutputStream();
      ObjectOutputStream obs = new ObjectOutputStream(out);
      obs.writeObject(obj);
      obs.close();

      //分配內(nèi)存,寫入原始對(duì)象,生成新對(duì)象
      ByteArrayInputStream ios = new ByteArrayInputStream(out.toByteArray());
      ObjectInputStream ois = new ObjectInputStream(ios);
      //返回生成的新對(duì)象
      cloneObj = (T) ois.readObject();
      ois.close();
    } catch (Exception e) {
      e.printStackTrace();
    }
    return cloneObj;
  }


}
package b1ch06.clone;

public class MyClone {


  public static void main(String[] args) {
    Car car = new Car("BMW");
    Employee employee = new Employee("ANDY", car);
    // 方法一:覆蓋所有涉及到的類的clone()方法
    try {

      Employee employee_cp = (Employee) employee.clone();

      System.out.println("=========================");
      System.out.println("original對(duì)象地址?:");
      System.out.println(employee.toString());
      System.out.println("copy對(duì)象地址?:");
      System.out.println(employee_cp.toString());
      System.out.println("前后兩個(gè)對(duì)象指向同一地址?:");
      System.out.println(employee_cp == employee);
      System.out.println("=========================");

      System.out.println("original對(duì)象中car對(duì)象地址?:");
      System.out.println(employee.getcar().toString());
      System.out.println("copy對(duì)象中car對(duì)象地址?:");
      System.out.println(employee_cp.getcar().toString());
      System.out.println("前后兩個(gè)car對(duì)象指向同一地址?:");
      System.out.println(employee_cp == employee);

    } catch (CloneNotSupportedException e) {
      e.printStackTrace();
    }

    // 方法二:序列化實(shí)現(xiàn)深拷貝
    Employee cloned_employee = SerializedClone.clone(employee);
    System.out.println("=========================");
    System.out.println("original對(duì)象地址?:");
    System.out.println(employee.toString());
    System.out.println("copy對(duì)象地址?:");
    System.out.println(cloned_employee.toString());
    System.out.println("前后兩個(gè)對(duì)象指向同一地址?:");
    System.out.println(cloned_employee == employee);

    System.out.println("=========================");

    System.out.println("original對(duì)象中car對(duì)象地址?:");
    System.out.println(employee.getcar().toString());
    System.out.println("copy對(duì)象中car對(duì)象地址?:");
    System.out.println(cloned_employee.getcar().toString());
    System.out.println("前后兩個(gè)car對(duì)象指向同一地址?:");
    System.out.println(cloned_employee == employee);

  }
}

以上所述是小編給大家介紹的Java中實(shí)現(xiàn)深拷貝的兩種方式--——clone() & Serialized詳解整合,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!

相關(guān)文章

  • Java中實(shí)現(xiàn)接口與繼承的區(qū)別及說(shuō)明

    Java中實(shí)現(xiàn)接口與繼承的區(qū)別及說(shuō)明

    這篇文章主要介紹了Java中實(shí)現(xiàn)接口與繼承的區(qū)別及說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-03-03
  • JAVA中常用的設(shè)計(jì)模式:?jiǎn)卫J?,工廠模式,觀察者模式

    JAVA中常用的設(shè)計(jì)模式:?jiǎn)卫J剑S模式,觀察者模式

    設(shè)計(jì)模式(Design pattern)代表了最佳的實(shí)踐,通常被有經(jīng)驗(yàn)的面向?qū)ο蟮能浖_(kāi)發(fā)人員所采用。設(shè)計(jì)模式是軟件開(kāi)發(fā)人員在軟件開(kāi)發(fā)過(guò)程中面臨的一般問(wèn)題的解決方案。這些解決方案是眾多軟件開(kāi)發(fā)人員經(jīng)過(guò)相當(dāng)長(zhǎng)的一段時(shí)間的試驗(yàn)和錯(cuò)誤總結(jié)出來(lái)的。
    2020-04-04
  • Java狀態(tài)機(jī)的一種優(yōu)雅寫法分享

    Java狀態(tài)機(jī)的一種優(yōu)雅寫法分享

    狀態(tài)機(jī)是一種數(shù)學(xué)模型,對(duì)于我們業(yè)務(wù)實(shí)現(xiàn)有很大的幫助。我們可以用非常多的方法實(shí)現(xiàn)狀態(tài)機(jī),這篇文章就來(lái)介紹一個(gè)狀態(tài)機(jī)優(yōu)雅的實(shí)現(xiàn)方法,希望對(duì)大家有所幫助
    2023-04-04
  • Java自定義標(biāo)簽用法實(shí)例分析

    Java自定義標(biāo)簽用法實(shí)例分析

    這篇文章主要介紹了Java自定義標(biāo)簽用法,結(jié)合實(shí)例形式分析了java自定義標(biāo)簽的定義、使用方法與相關(guān)注意事項(xiàng),需要的朋友可以參考下
    2017-11-11
  • win10下配置java環(huán)境變量的方法

    win10下配置java環(huán)境變量的方法

    這篇文章主要介紹了win10下配置java環(huán)境變量的方法,本文圖文并茂給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-02-02
  • SpringBoot整合FTP使用示例教程

    SpringBoot整合FTP使用示例教程

    這篇文章主要介紹了SpringBoot整合FTP使用示例教程,本文通過(guò)示例代碼給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧
    2024-08-08
  • SpringBoot前后端分離實(shí)現(xiàn)驗(yàn)證碼操作

    SpringBoot前后端分離實(shí)現(xiàn)驗(yàn)證碼操作

    驗(yàn)證碼的功能是防止非法用戶惡意去訪問(wèn)登錄接口而設(shè)置的一個(gè)功能,今天我們就來(lái)看看在前后端分離的項(xiàng)目中,SpringBoot是如何提供服務(wù)的
    2022-05-05
  • 這一次搞懂Spring的XML解析原理說(shuō)明

    這一次搞懂Spring的XML解析原理說(shuō)明

    這篇文章主要介紹了這一次搞懂Spring的XML解析原理說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-08-08
  • spring.mvc.servlet.load-on-startup屬性方法源碼解讀

    spring.mvc.servlet.load-on-startup屬性方法源碼解讀

    這篇文章主要介紹了spring.mvc.servlet.load-on-startup的屬性方法源碼解讀,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-12-12
  • Java設(shè)計(jì)模式中單一職責(zé)原則詳解

    Java設(shè)計(jì)模式中單一職責(zé)原則詳解

    這篇文章主要介紹了Java設(shè)計(jì)模式中單一職責(zé)原則詳解,單一職責(zé)原則 (SRP) 是軟件設(shè)計(jì)中的一個(gè)重要原則,它要求每個(gè)類只負(fù)責(zé)一個(gè)職責(zé),需要的朋友可以參考下
    2023-05-05

最新評(píng)論