看过了一本Java入门的教材后再来看Thinking in Java感觉真好
初始化与清理
1. 涉及进本类型的重载
如果某个方法f1有参数为char, byte, short, int, long, float, double的重载方法(注意类型是从小到大排列的),调用时自左往右套用。如f1(5)调用了f1(int),f1((long)5)调用了f1(long)
2. 一个对象,如果没有写任何构造方法,编译器会自动创建一个无参构造器。但是如果已经定义了一个构造器(无论是否含参),编译器不会自动创建缺省的无参构造器。
3. Banana a = new Banana();
a.f(1);
编译器执行a.f(1)时其实相当于执行了Banana.f(a,1);
把a的引用传递给了f,当然并不能这样书写代码,在f中要访问a就使用this关键字。
4. 同一个类中,方法f2调用方法f2时可以写this.f2(),但为了更直观和易读,通常写成f2()
5. static关键字,有人认为它具有全局函数的语义,并不是“面向对象”的。如果代码中出现了大量的static方法,就的确该重新考虑自己的设计了。
6. finalize()并不是析构函数。
三点重要概念:
1)对象可能不被垃圾回收。
2)垃圾回收并不等于“析构”
3)垃圾回收只与内存有关。
无论对象是如何创建的,垃圾回收器都会负责释放对象占据的所有内存。因此之所以要有finalize(),是由于在分配内存时可能采用了类此C语言中的做法,即native方法。
由此可见,垃圾回收器并不能完全代替析构函数,而且绝对不能直接调用finalize()。
finalize()的另一价值在于发现清理对象时一些隐晦的错误。如
class Book {
boolean checkedOut = false;
Book(boolean checkOut) {
checkedOut = checkOut;
}
void checkIn() {
checkedOut = false;
}
public void finalize() {
if (checkedOut)
System.out.println("Error: checked out");
}
}
在Book对象终结时检查是否已被签入,如果发生未被签入的错误,则在回收时报错。
System.gc()用于强制进行终结动作,在写程序时可以加速调试过程。
7. 垃圾回收器的工作方式
1)引用计数
2)自适应

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

2.14 Java notes - Thinking in Java - 初始化与清理

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


网站导航: