`
javawebsoa
  • 浏览: 417803 次
社区版块
存档分类
最新评论

Java学习笔记:(11)谨慎地覆盖clone

 
阅读更多
1、clone方法的通用约定是非常弱的
x.clone()!=x
x.clone().getClass()==x.getClass()
x.clone().equals(x)
都不是绝对的要求

2、Clone方法就是另一个构造器,你必须保证它不会伤害到原始的对象,并确保正确地创建被克隆对象中的约束条件。

3、clone架构与应用可变对象的final域的正常用法是不兼容的。

4、深度clone,典型例子HashTable

5、线程安全的类实现Cloneable接口,clone方法必须实现好同步:HashTable。

总结:

(1)默认实现方式
实现了Cloneable接口的类都应该有一个公用的方法覆盖clone:

@Override public PhoneNumber clone() {
super.clone();
}
此公有方法首先调用super.clone(),然后修正任何需要修正的域(浅克隆、深度克隆)。
(2)最佳实践
实现对象的拷贝的好办法是提供一个拷贝构造器(copy constructor)或者拷贝工厂(copy factory)
相比Cloneable/clone优点:
不依赖于某一种很有风险的,语言之外的对象创建机制;
不要求遵守尚未制定好的文档规范;
不会与final域的正常使用发生冲突;
不会抛出不必要的受检查异常CloneNotSupportedException;
不需要强制进行类型转换;
建议使用最佳实践





分享到:
评论

相关推荐

    effective java 读书笔记

    - Item11:谨慎覆盖clone方法,因为它涉及到对象的深拷贝,可能需要实现`Cloneable`接口并处理异常。 - Item12:实现Comparable接口使对象能够自我比较,这对于排序和集合操作非常有用。 5. **类和接口的设计** ...

    java clone

    总结来说,Java中的`clone`方法是一种快速创建对象副本的手段,但它需要谨慎使用,特别是在处理包含复杂数据结构的对象时。理解其工作原理,以及何时和如何正确地使用`clone`,对于提升代码质量和效率至关重要。在...

    java_clone用法

    1. **Java的类型**:Java中的数据类型主要分为两大类——原始类型(如`int`)和引用类型(如`String`, `Object`等)。 2. **引用类型的存储**:所有引用类型的实例都存储在堆内存中。例如,对于下面的`B`类实例,其...

    java Clone

    Java中的`clone`方法是Java语言提供的一种复制对象的方式,它允许创建一个对象的副本,这个副本与原对象具有相同的属性值,但它们是两个独立的对象,修改副本不会影响原对象。`clone`方法存在于Java的`java.lang....

    java clone的小例子

    首先,`clone()`方法是Java Object类的一个成员方法,这意味着所有Java类都隐式地继承了这个方法。它的主要作用是创建并返回当前对象的一个副本,也就是浅拷贝。浅拷贝意味着新创建的对象拥有原始对象的属性值,但...

    Java深浅clone

    在Java编程语言中,`Cloneable`接口和`clone()`方法是两个重要的概念,它们用于对象复制。在本文中,我们将深入探讨Java中的浅克隆(shallow clone)和深克隆(deep clone),并结合测试代码进行分析。 首先,让...

    JAVA入门1.2.3:一个老鸟的JAVA学习心得 PART1(共3个)

    1.4.1 类(Class):Java世界中一类物体 14 1.4.2 方法(Method):物体的功能 15 1.4.3 main()方法:所有Java程序执行的起点 15 .1.5 名词解释 16 1.5.1 JDK和Java平台 16 1.5.2 Java编译器(Java Compiler)...

    Java-JDK、数据库系统开发、Web开发学习笔记

    Java-JDK、数据库系统开发、Web开发学习笔记 Java-JDK部分: 1. Object类的所有方法及功能:Object类是Java中的顶层类,所有类实际上都继承了Object类的所有方法。Object类提供了以下方法: * protected Object ...

    Java clone方法使用

    详细的描述了Java中 clone方法使用

    Java中的clone方法详解_动力节点Java学院

    Java中的clone方法详解_动力节点Java学院,动力节点口口相传的Java黄埔军校

    Java中的克隆(Clone)机制

    在Java编程语言中,克隆(Clone)机制是一种创建对象副本的方法,它允许开发者创建一个已有对象的新实例,这个新实例与原对象具有相同的属性值,但却是两个独立的对象,彼此的操作不会互相影响。克隆机制在某些情况...

    Effective-Java读书笔记

    9. **谨慎地覆盖clone()**:Java的clone()方法有其复杂性,除非有特殊需求,否则通常建议使用拷贝构造器或工厂方法来复制对象。 10. **使用泛型**:泛型提供编译时类型检查,减少类型转换错误,使代码更易读,更...

    java中的指针,引用及对象的clone

    Java中的对象克隆可以通过实现`Cloneable`接口并覆盖`clone()`方法来完成。对象的克隆分为浅拷贝和深拷贝两种形式。 **1. 浅拷贝** 浅拷贝是指创建一个新的对象,然后将原对象的所有非引用类型的成员变量复制到新...

    openwrt,Lede深入学习笔记v2.0.pdf

    ### OpenWRT与LEDE深入学习笔记v2.0概览 #### 一、基础知识介绍 根据提供的部分内容,本文档主要介绍了如何安装OpenWRT与LEDE系统的编译环境,并详细记录了从GitHub下载源码的过程及后续的操作步骤。下面我们将...

    java2核心技术学习笔记

    11. **日期与时间**:Java中的`Date`类表示时间点,以距1970年1月1日00:00:00 UTC的毫秒数表示。`GregorianCalendar`类提供了更复杂的日期和时间处理。 12. **访问方法与更改方法**:`set`方法是更改方法(mutator...

    Java中clone方法共6页.pdf.zip

    在Java编程语言中,`clone()`方法是一个非常重要的概念,特别是在对象复制和克隆方面。这个方法来源于`java.lang.Object`类,所有Java类都默认继承了这个方法。本资料"Java中clone方法共6页.pdf.zip"可能包含了关于...

    学习笔记java\CoreJava笔记\CoreJava_day08

    在Core Java的学习中,理解并熟练掌握访问权限对于编写安全、健壮的代码至关重要。以下是对不同访问权限的详细解释: 1. **public**: - 公共访问权限允许任何包内外的类访问。如果一个成员(如方法或字段)被声明...

    core java I 笔记

    在Java编程语言中,"Core Java I"涵盖了...以上内容概括了"Core Java I"笔记中的关键点,涵盖了变量、继承、接口、枚举、类设计模式、内存管理等多个方面。理解并熟练掌握这些概念是成为一名合格的Java开发者的基础。

Global site tag (gtag.js) - Google Analytics