`
凌紫冥
  • 浏览: 24531 次
  • 性别: 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关键字对于将当前对象传递给其他方法很有用。
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics