乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      java clone - ttitfly的筆記 - JavaEye技術(shù)網(wǎng)站

       goldbomb 2008-01-15

      java clone

      關(guān)鍵字: java clone
      1.java里的clone分為:
      A:淺復(fù)制(淺克隆): 淺復(fù)制僅僅復(fù)制所考慮的對象,而不復(fù)制它所引用的對象。
      b:深復(fù)制(深克?。?span style="COLOR: red">深復(fù)制把要復(fù)制的對象所引用的對象都復(fù)制了一遍。
      Java中對象的克隆,為了獲取對象的一份拷貝,我們可以利用Object類的clone()方法。必須要遵循下面三點
      1.在派生類中覆蓋基類的clone()方法,并聲明為public【Object類中的clone()方法為protected的】。
      2.在派生類的clone()方法中,調(diào)用super.clone()。
      3.在派生類中實現(xiàn)Cloneable接口。

      Object類里的clone方法是淺復(fù)制(淺克?。?/span>

      淺復(fù)制(淺克?。┑睦尤缦拢?

      Java代碼 復(fù)制代碼
      1. package com.test;   
      2.   
      3. //淺復(fù)制(淺克?。? 淺復(fù)制僅僅復(fù)制所考慮的對象,而不復(fù)制它所引用的對象。   
      4. //深復(fù)制(深克?。荷顝?fù)制把要復(fù)制的對象所引用的對象都復(fù)制了一遍。   
      5. //   
      6. //Java中對象的克隆,為了獲取對象的一份拷貝,我們可以利用Object類的clone()方法。必須要遵循下面三點   
      7. //1.在派生類中覆蓋基類的clone()方法,并聲明為public【Object類中的clone()方法為protected的】。   
      8. //2.在派生類的clone()方法中,調(diào)用super.clone()。   
      9. //3.在派生類中實現(xiàn)Cloneable接口。   
      10.   
      11. //<SPAN style="COLOR: red">Object類里的clone方法是淺復(fù)制(淺克隆)</SPAN>public class CloneTest {   
      12.   
      13.     public static void main(String[] args) throws Exception{   
      14.         //teacher對象將被clone出來的Student對象共享.   
      15.         Teacher teacher = new Teacher();   
      16.         teacher.setAge(40);   
      17.         teacher.setName("Teacher zhang");   
      18.            
      19.         Student student1 = new Student();   
      20.         student1.setAge(20);   
      21.         student1.setName("zhangsan");   
      22.         student1.setTeacher(teacher);   
      23.            
      24.         //復(fù)制出來一個對象student2   
      25.         Student student2 = (Student)student1.clone();   
      26.         System.out.println(student2.getAge());   
      27.         System.out.println(student2.getName());   
      28.            
      29.            
      30.         System.out.println("~~~~~~~~~~~~~~~~~~~~~~");   
      31.         System.out.println(student1.getTeacher().getAge());   
      32.         System.out.println(student1.getTeacher().getName());   
      33.            
      34.            
      35.         //修改student2的引用對象   
      36.         student2.getTeacher().setAge(50);   
      37.         student2.getTeacher().setName("Teacher Li");   
      38.            
      39.         System.out.println("~~~~~~~~~~~~~~~~~~~~~~");   
      40.         System.out.println(student1.getTeacher().getAge());   
      41.         System.out.println(student1.getTeacher().getName());   
      42.     }   
      43. }   
      44.   
      45. class Teacher {   
      46.     public int age;   
      47.     public String name;   
      48.        
      49.     public int getAge() {   
      50.         return age;   
      51.     }   
      52.     public void setAge(int age) {   
      53.         this.age = age;   
      54.     }   
      55.     public String getName() {   
      56.         return name;   
      57.     }   
      58.     public void setName(String name) {   
      59.         this.name = name;   
      60.     }   
      61.        
      62.        
      63. }   
      64.   
      65. class Student implements Cloneable{   
      66.        
      67.     public int age ;   
      68.     public String name;   
      69.     public Teacher teacher;   
      70.     public int getAge() {   
      71.         return age;   
      72.     }   
      73.     public void setAge(int age) {   
      74.         this.age = age;   
      75.     }   
      76.     public String getName() {   
      77.         return name;   
      78.     }   
      79.     public void setName(String name) {   
      80.         this.name = name;   
      81.     }   
      82.     public Teacher getTeacher() {   
      83.         return teacher;   
      84.     }   
      85.     public void setTeacher(Teacher teacher) {   
      86.         this.teacher = teacher;   
      87.     }   
      88.     @Override  
      89.     public Object clone() throws CloneNotSupportedException {   
      90.         return super.clone();   
      91.     }   
      92.        
      93.        
      94. }   
      95. 輸出結(jié)果為:   
      96. 20  
      97. zhangsan   
      98. ~~~~~~~~~~~~~~~~~~~~~~   
      99. 40  
      100. Teacher zhang   
      101. ~~~~~~~~~~~~~~~~~~~~~~   
      102. 50  
      103. Teacher Li  


      2.深復(fù)制(深Clone)例子:

      Java代碼 復(fù)制代碼
      1.   
      2. package com.test1;   
      3.   
      4. //深clone   
      5. public class DeepCloneTest {   
      6.   
      7.     public static void main(String[] args) throws Exception{   
      8.         //teacher對象將不被clone出來的Student對象共享.   
      9.         Teacher teacher = new Teacher();   
      10.         teacher.setAge(40);   
      11.         teacher.setName("Teacher zhang");   
      12.            
      13.         Student student1 = new Student();   
      14.         student1.setAge(20);   
      15.         student1.setName("zhangsan");   
      16.         student1.setTeacher(teacher);   
      17.            
      18.         //復(fù)制出來一個對象student2   
      19.         Student student2 = (Student)student1.clone();   
      20.         System.out.println(student2.getAge());   
      21.         System.out.println(student2.getName());   
      22.            
      23.            
      24.         System.out.println("~~~~~~~~~~~~~~~~~~~~~~");   
      25.         System.out.println(student1.getTeacher().getAge());   
      26.         System.out.println(student1.getTeacher().getName());   
      27.            
      28.            
      29.         //修改student2的引用對象   
      30.         student2.getTeacher().setAge(50);   
      31.         student2.getTeacher().setName("Teacher Li");   
      32.            
      33.         System.out.println("~~~~~~~~~~~~~~~~~~~~~~");   
      34.         System.out.println(student1.getTeacher().getAge());   
      35.         System.out.println(student1.getTeacher().getName());   
      36.     }   
      37. }   
      38.   
      39. class Teacher implements Cloneable{   
      40.     public int age;   
      41.     public String name;   
      42.        
      43.     public int getAge() {   
      44.         return age;   
      45.     }   
      46.     public void setAge(int age) {   
      47.         this.age = age;   
      48.     }   
      49.     public String getName() {   
      50.         return name;   
      51.     }   
      52.     public void setName(String name) {   
      53.         this.name = name;   
      54.     }   
      55.     @Override  
      56.     public Object clone() throws CloneNotSupportedException {   
      57.         return super.clone();   
      58.     }   
      59.        
      60. }   
      61.   
      62. class Student implements Cloneable{   
      63.        
      64.     public int age ;   
      65.     public String name;   
      66.     public Teacher teacher;   
      67.     public int getAge() {   
      68.         return age;   
      69.     }   
      70.     public void setAge(int age) {   
      71.         this.age = age;   
      72.     }   
      73.     public String getName() {   
      74.         return name;   
      75.     }   
      76.     public void setName(String name) {   
      77.         this.name = name;   
      78.     }   
      79.     public Teacher getTeacher() {   
      80.         return teacher;   
      81.     }   
      82.     public void setTeacher(Teacher teacher) {   
      83.         this.teacher = teacher;   
      84.     }   
      85.     @Override  
      86.     public Object clone() throws CloneNotSupportedException {   
      87.         Student student = (Student)super.clone();   
      88.         //將引用的對象teacher也clone下   
      89.         student.setTeacher((Teacher)(student.getTeacher().clone()));   
      90.         return student;   
      91.     }   
      92.        
      93.        
      94. }   
      95. 輸出結(jié)果為:   
      96. 20  
      97. zhangsan   
      98. ~~~~~~~~~~~~~~~~~~~~~~   
      99. 40  
      100. Teacher zhang   
      101. ~~~~~~~~~~~~~~~~~~~~~~   
      102. 40  
      103. Teacher zhang  


      3.利用序列化來做深復(fù)制,把對象寫到流里的過程是序列化(Serilization)過程,而把對象從流中讀出來的過程則叫做反序列化(Deserialization)過程。應(yīng)當(dāng)指出的是,寫在流里的是對象的一個拷貝,而原對象仍然存在于JVM里面。,利用這個特性,可以做深拷貝
      Java代碼 復(fù)制代碼
      1. package com.test3;   
      2.   
      3. import java.io.ByteArrayInputStream;   
      4. import java.io.ByteArrayOutputStream;   
      5. import java.io.ObjectInputStream;   
      6. import java.io.ObjectOutputStream;   
      7. import java.io.Serializable;   
      8. //利用序列化來做深復(fù)制   
      9. //深clone   
      10. public class DeepCloneTest {   
      11.   
      12.     public static void main(String[] args) throws Exception{   
      13.         //teacher對象將不被clone出來的Student對象共享.   
      14.         Teacher teacher = new Teacher();   
      15.         teacher.setAge(40);   
      16.         teacher.setName("Teacher zhang");   
      17.            
      18.         Student student1 = new Student();   
      19.         student1.setAge(20);   
      20.         student1.setName("zhangsan");   
      21.         student1.setTeacher(teacher);   
      22.            
      23.         //復(fù)制出來一個對象student2   
      24.         Student student2 = (Student)student1.deepCopy();   
      25.         System.out.println(student2.getAge());   
      26.         System.out.println(student2.getName());   
      27.            
      28.            
      29.         System.out.println("~~~~~~~~~~~~~~~~~~~~~~");   
      30.         System.out.println(student1.getTeacher().getAge());   
      31.         System.out.println(student1.getTeacher().getName());   
      32.            
      33.            
      34.         //修改student2的引用對象   
      35.         student2.getTeacher().setAge(50);   
      36.         student2.getTeacher().setName("Teacher Li");   
      37.            
      38.         System.out.println("~~~~~~~~~~~~~~~~~~~~~~");   
      39.         System.out.println(student1.getTeacher().getAge());   
      40.         System.out.println(student1.getTeacher().getName());   
      41.     }   
      42. }   
      43.   
      44. class Teacher implements Serializable{   
      45.        
      46.     private static final long serialVersionUID = -8834559347461591191L;   
      47.        
      48.     public int age;   
      49.     public String name;   
      50.        
      51.     public int getAge() {   
      52.         return age;   
      53.     }   
      54.     public void setAge(int age) {   
      55.         this.age = age;   
      56.     }   
      57.     public String getName() {   
      58.         return name;   
      59.     }   
      60.     public void setName(String name) {   
      61.         this.name = name;   
      62.     }   
      63.        
      64. }   
      65.   
      66. class Student implements Serializable{   
      67.        
      68.     //serialVersionUID 如果你的對象序列化后存到硬盤上面后,可是后來你卻更改了類的field(增加或減少或改名),當(dāng)你反序列化時,就會出現(xiàn)Exception的,這樣就會造成不兼容性的問題。    
      69.     //但當(dāng)serialVersionUID相同時,它就會將不一樣的field以type的缺省值賦值(如int型的是0,String型的是null等),這個可以避開不兼容性的問題。所以最好給serialVersionUID賦值   
      70.     private static final long serialVersionUID = 7991552226614088458L;   
      71.        
      72.     public int age ;   
      73.     public String name;   
      74.     public Teacher teacher;   
      75.     public int getAge() {   
      76.         return age;   
      77.     }   
      78.     public void setAge(int age) {   
      79.         this.age = age;   
      80.     }   
      81.     public String getName() {   
      82.         return name;   
      83.     }   
      84.     public void setName(String name) {   
      85.         this.name = name;   
      86.     }   
      87.     public Teacher getTeacher() {   
      88.         return teacher;   
      89.     }   
      90.     public void setTeacher(Teacher teacher) {   
      91.         this.teacher = teacher;   
      92.     }   
      93.        
      94.     public Object deepCopy() throws Exception{   
      95.         //將該對象序列化成流,因為寫在流里的是對象的一個拷貝,而原對象仍然存在于JVM里面。所以利用這個特性可以實現(xiàn)對象的深拷貝   
      96.         ByteArrayOutputStream bos = new ByteArrayOutputStream();   
      97.   
      98.         ObjectOutputStream oos = new ObjectOutputStream(bos);   
      99.   
      100.         oos.writeObject(this);   
      101.   
      102.         //將流序列化成對象   
      103.         ByteArrayInputStream bis = new ByteArrayInputStream(bos.toByteArray());   
      104.   
      105.         ObjectInputStream ois = new ObjectInputStream(bis);   
      106.   
      107.         return ois.readObject();   
      108.     }   
      109.        
      110.        
      111. }   
      112. 輸出結(jié)果為:   
      113. 20  
      114. zhangsan   
      115. ~~~~~~~~~~~~~~~~~~~~~~   
      116. 40  
      117. Teacher zhang   
      118. ~~~~~~~~~~~~~~~~~~~~~~   
      119. 40  
      120. Teacher zhang

        本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多