`
凌紫冥
  • 浏览: 25626 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Java编程思想第四版——第十三天

    博客分类:
  • Java
 
阅读更多
2012-04-18
108-118/913

Java编程思想第四版——第十三天

第5章 初始化与清理

不安全的编程方式成为编程代价高昂的主因之一。
初始化和清理(cleanup)是涉及安全的两个问题。很多C程序的错误都源于程序员忘记初始化变量。清理也是一个特殊问题,使用一个元素时,容易把它忘记,这个元素占用的资源一直得不到释放,导致资源用尽(尤其是内存)。

5.1 用构造器确保初始化
Java中,通过构造器,类的设计者可确保每个对象都会得到初始化。调用构造器是编译器的责任,初始化期间自动调用构造器。
Java沿用C++的解决方案,构造器采用与类相同的名称。
new Rock()创建对象时,为对象分配存储空间,并调用相应的构造器。确保在能操作对象之前,它已经被恰当的初始化了。
由于构造器的名称必须与类名完全相同,所以每个方法首字母小写的编码风格并不适用于构造器。
不接受任何参数的构造器叫做默认构造器,java文档中通常使用术语无参构造器。构造器也能带有形式参数,以便指定如何创建对象。
如果Tree(int)是Tree类中唯一的构造器,那么编译器将不允许以其他任何方式创建Tree对象。
构造器有助于减少错误,使代码更易于阅读。概念上讲,初始化与创建史彼此独立的,在java中,初始化和创建捆绑在一起,两者不能分离。
构造器是一种特殊类型的方法,没有返回值。这与返回值为空(void)明显不同,对于空返回值,尽管方法本身不会自动返回什么,但仍可选择让它返回别的东西。构造器不会返回任何东西。(new表达式返回了对新建对象的引用,但构造器本身并没有任何返回值。)
如果构造器有返回值,允许自行选择返回类型,那么势必得让编译器知道该如何处理此返回值。

5.2 方法重载
任何程序设计语言都具备的一项重要特性就是对名字的运用。创建对象,给此对象分配到的存储空间取一个名字。方法则是给某个动作取得名字。通过使用名字,可以引用所有的对象和方法。名字起得好可以使系统更易于理解和修改。

方法名相同而形式参数不同的构造器同时存在,必须用到方法重载。
方法重载是构造器所必须的,也可以应用于其他方法,且用法同样方便。

5.2 区分重载方法
每个重载的方法都必须有一个独一无二的参数类型列表。参数顺序的不同也可以区分两个方法,不过,一般情况下别这么做,因为这会使代码难以维护。

5.2.2 设计基本类型的重载
基本类型能从一个较小的类型自动提升至一个较大的类型,此过程一旦牵涉到重载,可能会造成一些混淆。
方法接受较小的基本类型作为参数,如果传入的实际参数较大,就得通过类型转换,来执行窄化转换,如果不这样做,编译器就会报错。

5.2.3 以返回值区分重载方法
根据方法的返回值来区分重载方法是行不通的。

5.3 默认构造器
默认构造器(又名“无参”构造器)是没有形式参数的,它的作用是创建一个默认对象,如果类中没有构造器,编译器会自动创建一个默认构造器。如果已经定义了一个构造器(无论是否有参数),编译器都不会再自动创建默认构造器了。

5.4 this关键字
为了能用简便、面向对象的语法来编写代码,即发送消息给对象,编译器做了一些幕后工作。它暗自把“所操做对象的引用”作为第一个参数传递给方法。
例:Banana a = new Banana(); b = new Banana();
a.peel(1); b.peel(2);
两个方法的调用实际上是:Banana.peel(a, 1); Banana.peel(b, 2);
这是内部的表示形式,不能这样书写代码,并试图通过编译,但这种写法能帮助了解实际所发生的事情。
如果想在方法的内部获得对当前对象的引用,由于这个引用是由编译器偷偷传入的,所以没有标识符可用。但是,为此有个专门的关键字:this。This关键字只能在方法内部使用,表示对“调用方法的那个对象”的引用。This的用法和其他对象引用并无不同,但要注意,如果在方法内部调用同一个类的另一个方法,就不必使用this,直接调用即可。当前方法中的this引用会自动应用于同一类中的其他方法。
可以加上this,但没有必要,编译器能自动添加。只有当需要明确指出对当前对象的引用时,才需要使用this关键字。例如,当需要返回对当前对象的引用时,就常常在return语句里这样写:return this;
This关键字对于将当前对象传递给其他方法很有用。
分享到:
评论

相关推荐

    数据结构与算法分析_java语言描述课后答案(英文)

    - **第四章:树** —— 深入讨论了树的各种类型(如二叉树、平衡树等)及其操作,如遍历、插入和删除。 - **第五章:散列** —— 介绍了散列表的工作原理、散列函数的设计以及处理冲突的方法。 - **第六章:优先队列...

    电子书《面向对象程序设计与Java语言》(第0.1版)

    3. **数据库编程**:第十三章教授如何利用Java连接数据库并执行查询,这对于开发需要存储和检索大量数据的应用程序非常重要。 4. **多线程编程**:第十四章介绍了Java中的多线程编程,使读者能够编写并发程序以提高...

    第十五届蓝桥杯Java A组参赛总结

    ### 第十五届蓝桥杯Java A组参赛总结 #### 知识点一:比赛规则与流程 - **考试流程**:参赛者需首先下载题目,使用官方提供的解压密码解压试题包。整个考试时长为4小时。 - **提交方式**: - 在考试过程中,参赛...

    《Java面向对象程序设计(第2版)》例子源代码

    《Java面向对象程序设计(第2版)》是一本深入探讨Java编程的教材,尤其注重面向对象编程思想的讲解。本书通过丰富的实例代码,帮助读者理解并掌握Java语言的核心概念和面向对象编程的关键要素。在提供的压缩包文件...

    像计算机科学家一样思考 java

    该书的第四版于2003年3月发布。作者编写本书的初衷是在教学过程中发现市场上现有的Java编程入门教材普遍存在两个问题: 1. **篇幅过长**:大多数教材内容过于冗长且密集,导致学生很难阅读并消化大量的技术细节。 2...

    Springer.Object-Oriented Programming and Java.2Ed.2011

    - **书名**:面向对象编程与Java(第二版) - **作者**:Danny Poo、Derek Kiong 和 Swarnalatha Ashok - **出版机构**:Springer - **出版年份**:2011年 - **ISBN-13**:978-1-84628-962-0 - **电子版ISBN-13**:...

    JNI编程指南书

    3. **第十一章至第十三章——JNI技术规范**:这部分内容作为技术规范,为开发者提供了详细的指引,既可以作为参考手册,也适用于那些需要自行实现JNI标准的高级用户。 #### 四、JNI的角色与限制 - **角色**:JNI...

    Java版数据结构与算法分析

    第十三章介绍了图的基本概念以及图的表示方法。 2. **加权图**:第十四章重点讨论了加权图的特性以及基于加权图的最短路径算法,如迪杰斯特拉算法、弗洛伊德算法等。 #### 六、综合运用 1. **何时使用何种数据...

    面向对象程序设计及jave

    #### Java实验指导书第二版——实验知识点解析 **一、面向对象程序设计基础** 面向对象程序设计(Object-Oriented Programming, OOP)是一种程序设计思想,它强调将数据和处理数据的方法定义为相互独立、尽可能不...

    计算机科学与技术学院毕业设计(论文)开题报告

    Java 编程思想. 2005 年 3 月第 1 版. 机械工业出版社. [3] James Keogh 著.潘颖 王磊译.J2ME 开发大全. 2004 年 2 月第 1 版. 清华大学出版社. [4] Ian Sommerville 著. 程成等译. 软件工程. 2003 年 1 月第 1 ...

    JSP源代码(CH09~CH15)

    《JSP源代码详解(CH09~CH15)——构建网上购物系统》 JSP(JavaServer Pages)是一种动态网页技术,它允许开发者在HTML页面中嵌入Java代码,实现服务器端的动态处理。本资料包包含了从CH09到CH15的JSP源代码,这些...

    数据结构与算法分析_java语言描述

    根据提供的文件信息,我们可以归纳出该书《数据结构与算法分析_java语言描述》的主要知识点及其相关内容。本书由Mark Allen Weiss撰写,是计算机科学领域内学习数据结构与算法的经典教材之一。接下来,我们将按照各...

    Android程序设计基础

     阅读本书唯一的前提条件,是具备对Java编程或类似面向对象语言(比如说C#)的基本理解,不需要拥有为移动设备开发软件的经验。实际上,如果你确实有这方面的经验,反倒应该忘记它们。Android是如此与众不同,因此...

Global site tag (gtag.js) - Google Analytics