2007年8月10日星期五

Core Java2 6th 摘要(4)

方法参数共有两种:
基本类型(数字、布尔值)
对象引用:方法得到对对象引用的一个拷贝,原来的对象和这个拷贝所指向的是同一个对象。
方法不能改变基本类型的参数,但对于对象参数来说,情况有所不同。

Java程序设计语言中利用方法参数可以做到和做不到的几种情况:
方法不能修改基本类型的参数;
方法可以修改对象参数的状态;
方法不能让对象参数指向新的对象。

如果一个类声明为final,只有它的方法(而不包括字段)会被自动设为final。

在类型转换时,Java在运行时,系统会检查类型转换能否进行。若不能,则抛出异常。如果没有捕捉这个异常,程序就会终止。因此,要养成在类型转换之前先判断它是否能成功的编程习惯,这个判断只需要简单地使用instanceof操作符。

具有一个或多个抽象方法的类本身也必须声明为abstract的。

抽象类不能被实例化,即如果一个类被声明为abstract,就不能构建这个类的任何对象。但仍然可以创建抽象类的对象变量,只是这个变量必须指向它的非抽象之类的对象。
在C++中,抽象方法称为纯虚函数,而且在结尾处标记上“=0”,只要定义了一个纯虚函数,那么C++类就是抽象的,在C++中,没有专门的关键字来定义纯虚函数。

Object类中的equals方法用于测试某个对象是否同另一个对象相等。它在Object类中的实现是判断两个对象是否指向同一块内存区域。这种测试没有太大用处。如果想测试对象是否相等,就需要覆盖equals方法,进行更有意义的比较。

编写完美equals方法的建议:
1. 显示参数命名为otherObject
2. 测试this同otherObject是否是同一个对象:
if(this == otherObject) return ture;
3. 测试otherObject是否为null。如果是,就返回false。这个测试是必需的:if(otherObject == null) return false;
4. 测试this和otherObject是否属于同一个类。这项测试是“对称性规则”所要求的。 if(getClass() != otherObject.getClass()) return false;
5. 把otherObject的类型转换为你的类型所属的类型。
ClassName other = (ClassName)otherObject;
6. 最后比较所有字段。使用==比较基本类型字段,使用equals比较对象字段。

包装器内包含的信息不可更改。

没有评论: