4.6.1 重载
要完整的描述一个方法,需要指出方法名以及参数类型,这叫做方法的签名(signature)。返回类型不是方法签名的一部分,也就是说,不能有两个名字相同、参数类型也相同却返回不同类型值的方法。
4.6.2 默认域初始化
如果在构造器中没有显示的给域赋予初值,那么就会被自动地赋为默认值:数值为0、布尔为false、对象引用为null。然而,只有缺少程序设计经验的人才会这样做。
4.6.3 无参构造器
如果在编写一个类时没有编写构造器,那么系统会提供一个无参构造器。这个构造器将所有的实例域设置为默认值。
如果类中至少提供了一个构造器,但是没有提供无参数构造器,则在构造对象时如果没有提供参数就会被视为不合法。
4.6.4 显式域初始化
确保不管怎样调用构造器,每个实例域都可以被设置为一个有意义的初值,这是一种很好的设计习惯。
总结两种初始化方法:
4.6.7 初始化块
在一个类的声明中,可以包含多个代码块,只要构造类的对象,这些块就会被执行。例如,
无论哪个构造器构造对象,id域都在初始化块中被初始化。首先运行初始化块,然后才运行构造器的主体部分。(建议将初始化块放在域定义之后)
下面是调用构造器的具体处理步骤:
(1)所有数据域都被初始化为默认值(0、false、null)
(2)按照在类中声明出现的次序,依次执行所有域初始化语句和初始化块
(3)如果构造器第一行调用了第二个构造器,则执行第二个构造器主体
(4)执行这个构造器的主体
可以通过提供一个初始化值,或者使用一个静态的初始化块来对静态域进行初始化。
第一种:private static int nextID = 1;
第二种:将代码放在一个块中,并标记关键字static。下面一个示例,功能是将雇员ID的起始值赋予一个小于10000的随机整数
在类第一次加载的时候,将会进行静态域的初始化(只有第一次时调用)。
4.6.8 对象析构与finalize方法
由于Java有自动的垃圾回收器,不需要人工回收内存,所以不支持析构器。
当然,某些对象使用了内存之外的其他资源,当资源不再用时,将其回收和再利用就显得十分重要。
可以为任何一个类添加finalize方法。finalize方法将在垃圾回收器清除对象前调用。在实际应用中,不要依赖于使用finalize方法回收任何短缺资源,这是因为很难知道这个方法什么时候会被调用。