复制和克隆

复制:将某个对象的引用复制给另一个对象,两个对象还是指向同一个应用。
克隆:分为浅复制、深复制。
浅复制:将对象的数据进行复制,但是对象中包含的对象,仍旧只是复制对象的引用。
深复制:不仅复制对象的基本类型属性,对于对象中包含的对象的数据也进行复制。
要实现克隆,需要重写Object的访问权限protected的clone方法。
既然Object是所有类的超类,为什么不能直接调用clone方法?
这是由于protected受访问保护规则是很微妙的。虽然protected域对所有子类都可见。但是有一点很重要,子类只能在自己的作用范围内访问自己继承的那个父类protected,而无法到访问别的子类(同父类的亲兄弟)所继承的protected域和父类对象的protected域。所以需要在子类重写clone方法,并且访问权限设置为public,才能被其他类调用。
注意:重写clone方法,所在类必须实现Cloneable标识接口,作为克隆的标识,否则会出现受检异常ClassNotSupportedException的问题。
class Person2 implements Cloneable{
    private String name;
    private int age;
    private Date birthday = new Date();

    public Person2(){
        super();
    }
    public Person2(String name, int age) {
        super();
        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;
    }

    public Date getBirthday() {
        return birthday;
    }
    public void setBirthday(int year,int month,int day) {
        Date newDay = new GregorianCalendar(year,month-1,day).getTime();
        birthday.setTime(newDay.getTime());
    }
    public Person2 clone() throws CloneNotSupportedException{
        Person2 cl = (Person2)super.clone();
        cl.birthday = (Date)birthday.clone();
        return cl;
    }
    public String toString(){
        return name+":"+age+":"+birthday;
    }

}

public class Test {
    public static void main(String[] args) throws CloneNotSupportedException {
        Person2 p = new Person2("原始",2);
        p.setBirthday(2015, 2, 10);
        Person2 copy = p.clone();
        copy.setAge(3);
        copy.setName("克隆");
        copy.setBirthday(2016, 2, 10);
        System.out.println("前  "+p);
        System.out.println("后  "+copy);
    }
}
浅复制和深复制的不同操作:在clone方法中,需不需要对子对象再次克隆。
浅复制:基本数据类型进行了数据复制,但是子对象仍旧是复制的引用
深复制:不仅基本数据类型进行了数据复制,子对象使用了克隆,进行了数据的复制,已经不再是引用的复制。
### FusionAccess桌面云中完整复制与链接克隆区别 #### 1. **定义** - 完整复制是指在模板基础上生成新的虚拟机,每个虚拟机都有独立的操作系统盘数据盘。它剔除了个性化信息(如网卡、SystemID等),从而确保每次发放的虚拟机都是完全独立的个体[^1]。 - 链接克隆则是基于一个共享的母卷(只读)以及各自的差分卷(可写)构建而成。多个虚拟机共享同一份操作系统盘,而各自的数据变化则存储于单独的差分卷中[^3]。 #### 2. **资源占用** - 完整复制由于每台虚拟机都需要完整的磁盘副本,因此对存储空间的需求较大。适合用于长期运行且需要较高隔离性的场景。 - 链接克隆因为共享母卷,极大地节省了存储资源。然而,在实际使用过程中,随着差分卷的增长,可能会逐渐消耗更多的存储容量。 #### 3. **性能表现** - 完整复制模式下,各虚拟机之间互不干扰,性能稳定不受其他虚拟机的影响。 - 链接克隆依赖于母卷的存在,如果母卷发生损坏或者被删除,则会影响整个链路下的所有虚拟机正常工作。另外,当大量虚拟机同时启动时可能出现“风暴效应”,即I/O负载骤增的情况。 #### 4. **适用场景** - 完整复制适用于专有桌面环境,比如单用户或多用户的专属办公需求。这类环境下强调的是个人隐私保护及较高的安全性要求。 - 链接克隆更适合池化桌面的应用场合,例如呼叫中心、培训教室等场所。这里更注重成本控制与快速部署能力而非高度定制化体验。 #### 5. **维护难度** - 对于完整复制而言,一旦原始模板发生变化就需要重新创建新版本并替换旧版实例,这无疑增加了运维负担。 - 使用链接克隆时可以通过更新单一母镜像实现批量升级,简化了日常管理工作量。不过需要注意定期清理冗余文件防止影响效率。 ```python # 示例代码展示如何区分两种类型的模板 def is_full_copy(template_type): if template_type == 'full copy': return True elif template_type == 'link clone': return False else: raise ValueError('Unsupported template type') print(is_full_copy('full copy')) # 输出True表示这是完整复制类型 print(is_full_copy('link clone')) # 输出False表示这不是完整复制而是链接克隆类型 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值