《JAVA编程思想》读书笔记之对象的传递和返回

java有指针吗?
对这个问题比较精确的回答是:java有指针。是的,java之中除了基本类型,每个对象的标识符都是指针。但它们的作用是受限的,不仅受编译器的保护,也受执行期系统(runtime system)的保护。换句话说,Java有指针,但没有“指针运算”。这些我们称之为“references”的东西,我们可以将其想象为“安全的指针”(因为Java的垃圾回收机制会替我们管理这些指针,无需我们自己去跟踪这些指针。)

  • 对象的克隆(Cloning Objects)
             为了不让我们所写的每个class缺省都有克隆能力,clone()在base class Object 中被声明为protected。这不仅意味着单纯使用(而非继承)该class 的客户端程序在缺省情况下无法使用它,也意味着我们无法通过base class reference 来调用clone()。

  • Cloneable接口实现
             Cloneable interface 的存在有两个理由。
             第一,我们可能会得到一个“cast至基础类型的”reference,而不知道能否对它进行克隆,这种情况下可以使用关键字instanceof ,来判断某个reference是否指向可被克隆的对象:
             if(myReference instanceof Cloneable) //。。。
             第二,克隆能力已被混入整个设计中,然而你也许不希望所有类型的对象都能被克隆,Object.clone()会检验某个class是否实现出Cloneable,如果没有,便会抛出CloneNotSupportedException异常。所有一般而言,提供克隆能力的同时,我们一定得实现Cloneable。(也有人将这种“ 内容为空,用来标示具有某种性质”的interface称为 Maker Interface设计模式。Cloneable和Java.io.serializable皆属此类。)

             进行克隆时要注意两点:
             1)几乎总是要调用super.clone()
             2)将derived class 中的clone()声明为pulic。

            通常我们会在“具备克隆能力的class”的某个derived class中调用super.clone(),用以确保所有base class的行为(含Object.clone)都会发生。这和调用构造函数的方式是一样的:先调用base class 的构造函数,然后是下一个派生类的构造函数,依此类推,直到最后一层派生类。差别只在于clone()并非构造函数,所以编译器没有为它提供一个自动进行机制,我们得设法自行完成。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值