5.2 方法重载
重载:对于同一操作的不同操作对象的抽象,将方法名保留而更改参数列表的操作,使代码结构更为便捷。
相同方法名,相同参数列表而参数顺序不同的方法也为重载。(一般不这么做)。
以返回值区分重载方法是行不通的。 编译器是无法知道具体是哪个方法被调用。以下代码通不过编译。
class C{
public void f(){
System.out.println("f void");
//Duplicate method f() in type C
}
public int f() {
System.out.println("f int");
}
}
5.4 this关键字
作用:
- 指代对象本身。
- 调用类中的其他构造方法。
5.5 清洁:终结处理和垃圾回收
finalize方法
finalize():用于回收对于一些占用特殊内存区域的对象(如调用本地方法,可在finalize中调用对应的方法释放内存)。
finalize与析构函数的区别:
析构函数在对象被清除时调用(一般对象在不再需要时,须被销毁),可以完成收尾工作。
finalize虽然也是在对象销毁时使用,但finalize可能不被调用。因为在内存充足的情况下,垃圾回收机制可能并不启动,也从而也不会调用finalize方法,所以其作为收尾并不可靠,它的作用只是为了回收内存。
垃圾回收器如何工作
如何找到需要回收的对象:
1.为每个对象设置一个计数器,当有引用连接至对象是加一,当引用离开作用域或不指向该对象时减一。问题:循环引用。
2.遍历所有引用,可到达的对象为‘活’的对象,不可达的为需要清除的对象。类似探究图的可达性。
如何回收对象:
jvm采用一种自适应的垃圾回收机制。
停止-复制:将存活对象从当前堆复制到另一个堆并整理。
标记-清扫:将存活对象标记,将没标记的对象清除。
jvm根据当前堆的情况在两种模式之间切换,例如堆中碎片多时切换至停止-复制方式。
5.7 构造器初始化
static成员只有在必要的时刻(类对象被创建,static成员被直接调用)调用(一次)。
静态代码块和非静态代码块在类加载(同上条件)时调用一次。
5.9 枚举类型
enum关键字:
public enum Color{RED, GREEN, BLUE}
Color.values()可以获取所有的枚举,某个枚举对象的ordinal可以返回该对象在枚举类中的位置。