看到Objects and Classes这一章了,开始系统地接触OOP的思想,而不像以前用Delphi只是凭感觉地写程序。

1. 构造函数(Constructor)前不能有void修饰符。

2. instance variable, instance method, anonymous object 的概念

3. 要测试某个类的代码是否正确时,只要简单地加入一个main方法即可。

4. 类的数据域(data field)中的类型在定义时会被自动赋予一个默认值,但程序中的变量在定义后却并不会被赋初值。
class Student {
String name; //默认赋 null
int age; //默认赋 0
//....
}

class Test {
//...
public static void main(Strings[] args) {
int x; //不赋初值
//...
}
}

5. public private 和 package-private 访问权限
public 修饰语使得类、方法、数据域均能被任何一个类访问
private 保护方法和数据域,使它们只能被该类自身访问
无修饰语则默认为package-private,即类、方法、数据域只能被同一个package的任何类访问。

一般来讲,构造函数应该声名为public,但要阻止用户创建一个类的实例(instance)时,构造函数就应该声名为private,如Math类。

6. client 的概念 (programs that use a specific class)
当修改某个类以后,意味着对这个类的数据域具有直接访问权的client的代码也很有可能需要修改,为了减少这种工作量,引入数据封装的概念(data field encapsulation)。
即将数据域设为private,对于需要访问的数据增加getPropertyName()方法,类似地,对于需要修改的数据增加setPropertyName(dataType propertyValue)方法。这两个方法能够起到一种“过滤”的作用(至少我是这么理解的 =_=)。
getPropertyName 方法称为 accessor,setPropertyName 方法称为 mutator。
当某个类在创建后,它的内容就无法修改,这个类称为 immutable class,类似可以定义 immutable object。
当一个类所有的数据都是private,也不存在 mutator时,并不一定 immutable。
可以通过
propertyType value = objectA.getPropertyType()
由于value所在的那个类可能存在mutator,因此就可以通过value句柄(Delphi里经常看到的术语,觉得用这个词比较形象)修改objectA的内容,感觉有点像 hacking....

7. 静态(static)变量、方法的概念
注意static方法中不能引用instance变量,因为static方法属于整个类,而不仅局限于某个实例。

8. 变量的作用域
和Pascal C 都差不多,内框架的变量覆盖外框架的同名变量。
但是Java多了 this 关键字(不知道C++有没有类似的),可以访问外框架的同名变量。
一个好的编程风格:在实现(implement)构造函数的时候,尽可能多的使用 this(arg-list),增强程序的可读性。注意Java要求在构造函数中this语句出现在其他语句的前面。
public class Circle {
private double radius;

public Circle(double raduis) {
this.radius = radius;
}

pubic Circle() {
this(1.0);
}
}


posts - 403, comments - 310, trackbacks - 0, articles - 7
  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

1.24 Java notes

Posted on 2007-04-22 20:22 ZelluX 阅读(148) 评论(0)  编辑  收藏 所属分类: OOP
2007-01-24 22:12:04
只有注册用户登录后才能发表评论。


网站导航: