zoukankan      html  css  js  c++  java
  • java 克隆

    1. About

         Java中, 对于基本数据类型可以使用"=" 来克隆,此时两个对象除了相等是没有任何关系的;

     而对于引用类型, 却不能简单地使用"="来克隆,这与java内存空间使用有关。

     java将内存空间分为两块, 即堆和栈。

      在栈中保存基本类型和引用变量,在堆中保存对象。

     对于引用变量而言,使用"="将修改引用, 而不是赋值堆中的对象,此时两个引用变量将指向同一个对象。

    因此,修改一个引用变量将改变另一个引用变量。

    2. 浅克隆

        如果对象的成员变量都是基本类型, 可以实现浅克隆完成。

        对象实现Cloneable接口, 并复写clone()方法

    public class A implements Cloneable{
      //.............
       public A clone(){
           A a = null;
           try{
              a = (A)super.clone();
           }catch(CloneNotSupportedException e {
                  //...... 
           }
           return a;
    
       }
    
    }

    3. 深克隆

    如果对象中包含引用类型变量,需要深克隆

    即对象本身实现Cloneable,复写clone()方法;同时可变成员变量也实现Cloneable, 并复写clone()

     public class A implements Cloneable{
       private C c;
       //get set
      //.............
       public A clone(){
           A a = null;
           try{
              a = (A)super.clone();
              a.c = c.clone();
           }catch(CloneNotSupportedException e {
                  //...... 
           }
           return a;
    
       }
    
    }
    
    public class C implements Cloneable{
      //.............
       public C clone(){
           C c = null;
           try{
              c = (C)super.clone();
           }catch(CloneNotSupportedException e {
                  //...... 
           }
           return c;
    
       }
    
    }
  • 相关阅读:
    JS自定义功能函数实现动态添加网址参数修改网址参数值
    伍、ajax
    类的静态方法(函数)中为什么不能调用非静态成员(属性)?
    android 数据存储 SharePreferences 简单使用
    实现多线程的方式
    线程、进程概念与Android系统组件的关系
    通知—Notifications
    活动栏—Action Bar
    Android菜单—Menu
    对话框控件—Dialog
  • 原文地址:https://www.cnblogs.com/rocky-fang/p/5897233.html
Copyright © 2011-2022 走看看