正确的初始化与清理是保证计算机程序健康运行的根本,在Java程序中使用构造器来确保初始化,使用垃圾回收器来清理无用内存。本章主要讨论初始化和清理的相关问题,以及Java对它们提供的支持。
1. 构造器
通过提供构造器,类的设计者可以确保每个对象都会得到初始化。
构造器采用与类名相同的名字,在对象创建时由编译器负责其调用。
构造器是一种特殊类型的方法,无返回值。
2.方法重载
方法名称相同但参数列表不同叫做方法重载。
每个重载的方法必须有一个独一无二的参数类型列表:参数类型不同,参数数量不同,参数顺序不同。
基本类型自动转换的重载:隐式转换时,将调用最接近传入参数类型的方法;窄化转换时,需要明确指定转换的类型。
在某些情况下可以使用返回值来区分重载方法,但如果调用方法只是为了使用方法调用的副作用而忽略其返回值时,便无法根据返回值来区分重载。
3.默认构造器
若类中没有构造器,则编译器会自动创建一个默认构造器;若已明确定义,则不会创建。
4.this关键字
this可表示当前对象的引用。
this()用来在构造器中调用其他构造器。
static修饰的成员属于类所有。
5.清理
在Java中,1.对象可能不被垃圾回收2.垃圾回收并不等于析构3.垃圾回收只与内存有关。
若JVM并未面临内存耗尽的情况,它是不会浪费时间去执行垃圾回收的。
finalize()方法可以执行对象终结条件(当一个对象需要清理时,它应处于某种状态)的验证。
Java虚拟机会监控堆空间中内存碎片数量,碎片少时使用标记-清扫方式处理,碎片多时使用停止-复制方式清理。
6.初始化
在定义成员变量时为其赋值,若未赋值,则将使用相应数据类型的默认值为其初始化。
7.构造器初始化
自动初始化的进行在构造器被调用之前。
在类的内部,定义变量的顺序决定了初始化的顺序,即使变量定义散布于方法定义之间。
初始化的顺序是先静态对象(如果它们尚未因前面的对象创建过程而被初始化),而后是”非静态”对象。
static代码块仅执行一次,即在首次生成这个类的一个对象时,或者首次访问属于这个类的静态数据成员时。
8.数组初始化
数组创建时,数组元素中的基本数据类型会自动初始化成空值。
Java SE5增加了对可变参数列表的支持。
9.枚举类型
Java SE5中添加了enum关键字。
enum本质上也是类。
enum 可以在switch语句中使用。
在定义枚举类型时,编译器会自动为其添加一些有用的特性。
10.总结
本章可以延伸的很深,例如类加载机制,变量初始化顺序、垃圾回收机制等,但目前仅做一些浅显的记录。