java,对象的克隆
生活随笔
收集整理的這篇文章主要介紹了
java,对象的克隆
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
這次寫的是有關java對象的克隆
首先是 java對象的假克隆
對于基本類型我們可以用“=”來進行克隆,此時對于兩個變量除了相等沒有其他的關系
但對于引用類型來說就不能簡單的使用“=”來進行克隆,這樣java的內存空間使用有關
對于引用變量而言,使用“=”將修改引用,而不是復制堆中的對象。此時兩個引用對象
將指向同一個對象。示例代碼如下:
1)創建一個Employer類
2)創建一個Demo類進行輸出實驗
3)結果可以自行運行
備注;如果應用類型是不可變的,如String類則不用進行深克隆,即你可以把String類型像基本類型看待
/** 定義兩個成員變量和兩個方法,get 和 set*/ public class Employer {String name;int age;public Employer(String name,int age){this.name=name;this.age=age;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}@Overridepublic String toString() {// TODO Auto-generated method stub//return super.toString();return "姓名:"+name+" 年齡 "+age;} } public class Demo {public static void main(String args[]) {System.out.println("克隆前");Employer e1=new Employer("林青霞", 58);System.out.println("雇主一的信息");System.out.println(e1);System.out.println("克隆后");Employer e2=e1;e2.setName("王祖賢");e2.setAge(48);System.out.println("雇主1的信息");System.out.println(e1);System.out.println("雇主2的信息");System.out.println(e2);} }
下面講解的是淺克隆
首先是定義的類需要繼承Cloneable類,并重寫其中的clone()方法
1)首先定義一個Love類
2)創建一個CopyOfEmployer類繼承Cloneable ,重寫clone()方法
3)創建Demo測試類,測試CopyOfEmployer類
示例代碼如下
public class Love {public String people;public int number;public String getPeople() {return people;}public void setPeople(String people) {this.people = people;}public int getNumber() {return number;}public void setNumber(int number) {this.number = number;}@Overridepublic String toString() {// TODO Auto-generated method stubStringBuilder sb=new StringBuilder("喜歡的人:");sb.append(people).append(" 喜歡的數字:").append(number);return sb.toString();} }CopyOfEmployer類
public class CopyOfEmployer implements Cloneable{String name;int age;Love love;public Love getLove() {return love;}public void setLove(Love love) {this.love = love;}@Overridepublic CopyOfEmployer clone(){// TODO Auto-generated method stubCopyOfEmployer coe=null;try {coe=(CopyOfEmployer) super.clone();} catch (CloneNotSupportedException e) {// TODO Auto-generated catch blocke.printStackTrace();} //實現淺克隆;//coe.love=(Love) love.clone();return coe;}public CopyOfEmployer(String name,int age,Love love){this.name=name;this.age=age;this.love=love;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}@Overridepublic String toString() {// TODO Auto-generated method stub//return super.toString();return "姓名:"+name+" 年齡 "+age+" 喜愛的東西:"+love;} }Demo測試類,下面只是寫出了main中的內容
Love love=new Love();love.setNumber(18);love.setPeople("husband");System.out.println("克隆前");CopyOfEmployer e1 = new CopyOfEmployer("林青喜", 58,love);System.out.println("雇主一的信息");System.out.println(e1);System.out.println("克隆后");CopyOfEmployer e2 = null;e2 = e1.clone();e2.setName("王祖賢");e2.setAge(48);e2.getLove().setNumber(16);e2.getLove().setPeople("小鮮肉");System.out.println("雇主1的信息");System.out.println(e1);System.out.println("雇主2的信息");System.out.println(e2);
最后要講的是深克隆
其實就是讓Love類也繼承Cloneable類,因為只是淺克隆的話,Love類并沒有被克隆島,所以修改如下
Love類
public class Love implements Cloneable{public String people;public int number;@Overrideprotected Love clone() {// TODO Auto-generated method stubLove love=null;try {love=(Love) super.clone();} catch (CloneNotSupportedException e) {// TODO Auto-generated catch blocke.printStackTrace();}return love;}public String getPeople() {return people;}public void setPeople(String people) {this.people = people;}public int getNumber() {return number;}public void setNumber(int number) {this.number = number;}@Overridepublic String toString() {// TODO Auto-generated method stubStringBuilder sb=new StringBuilder("喜歡的人:");sb.append(people).append(" 喜歡的數字:").append(number);return sb.toString();} }其他的類和淺克隆中的一樣,大家可以自行測試
最后希望大家給予我良好的修改意見,謝謝!
總結
以上是生活随笔為你收集整理的java,对象的克隆的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 一课时计算机基础教案模板,计算机基础电子
- 下一篇: mindjet mindmanager2