JAVA编程思想第四版中文版.pdf

  1. 1、本文档共49页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Thinking in Java Fourth Edition Bruce Eckel 初始化和清理 随着计算机革命的演进,不安全的程序设计方式已经是程序昂贵的罪魁祸 首。 初始化和清理问题便是这类不安全问题中的两个。 许多C语言程序的bugs就是因为程序员忘记 了初始化一个变量。 当使用library component的用户不知道该如何初始化或者他们必须初始化 library component时,初始化的问题表现的尤为明显。 清理工作之所以是一个特别的问题就是因 为当你用完某个代码元素后,它就不再引起你的注意了,你就容易忘记使用过它。 结果是代码元素 占用的资源未被清理,你就容易耗尽资源,最明显的就是内存。 C++引入了constructor的概念,它是一类当对象创建时自动被调用的方法。 Java也采用了 constructor,而且Java拥有garbage collector,garbage collector在内存资源不再被使用时自动 释放那些资源。 这一章阐述了初始化和清理问题以及Java如何配合他们的。 使用constructor保证初始化 想象一下你为每一个你写的类都创建了一个称为initialize( )的方法。 这个方法的名字暗示 着在使用类的对象前都应该调用此方法。 不幸的是,这就意味着类的使用者必须记住要调用那个方 法。 而在Java里,类的设计者能够通过提供constructor确保每个创建的对象都初始化。 如果一个 类定义拥有一个constructor,那么在类的使用者进一步操纵类之前,Java就会在该类的对象被创建 的时候调用那个constructor。 因此初始化得到了保证。 接下来的难题是该为constructor方法起个什么样的名字。 有两个问题需要解决。 第一个问题 是你使用的任何名称都有可能与类成员的名称冲突。 第二个问题是编译器必须一直知道哪一个方法 被用做constructor来调用,因为编译器负责调用constructor。 C++的解决方案似乎最简单也最富 逻辑性,因此这种解决方案也在Java里被采用。 也就是constructor的名字和对应类的名字保持相 同。 采用这样的解决方案很有意义,因为它使得初始化的时候constructor将被自动调用。 以下是一个含有constructor的简单的类: //: initialization/SimpleConstructor.java // Demonstration of a simple constructor. class Rock { Rock() { // This is the constructor System.out.print("Rock "); } } public class SimpleConstructor { public static void main(String[] args) { for(int i = 0; i < 10; i++) new Rock(); } } /* Output: Rock Rock Rock Rock Rock Rock Rock Rock Rock Rock *///:~ 现在,当对象被创建的时候: new Rock(); 内存被分配给对象,然后constructor被自动调用。 这样就确保了你在进一步操纵对象之前对 象被适当地初始化。 注意,方法名称的第一个字母是小写的代码编写风格并不适用于constructor,因为constructor 的名字必须和类的名字完全匹配。 没有参数的constructor被称为default constructor。 Java文档对default constructor的特 色称呼是 no-arg constructor,但是在Java问世以前,“default constructor”的叫法已经使用 了很多年,所以我倾向于使用后者。 像一般的方法一样,constructor也可以拥有参数,以便允许 你指定对象如何创建。 前面的例子可以容易地改变成constructor采用一个参数的形式: //: initialization/SimpleConstructor2.java // Constructo

文档评论(0)

血玲珑 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档