Chapter5_初始化与清理_用构造器初始化

时间:2023-03-08 21:46:01
Chapter5_初始化与清理_用构造器初始化

  接下来进入第五章,java中初始化和清理的问题,这是两个涉及安全的重要命题。初始化的功能主要是为库中的构件(或者说类中的域)初始化一些值,清理的功能主要是清除程序中不再被需要的元素,防止资源过分被垃圾占用的出现,为解决这些问题,java中提供了对构造器和垃圾清理器的支持,首先讨论构造器的问题。

  为了保证程序的安全性,java中采用了构造器的机制来保证初始化。第一个问题就是命名的问题,java中的构造器规定名称必须和类名相同。这主要是出于如下的考虑,第一如果让编程者自行命名,则可能会产生于其他任何方法名称冲突的危险,第二,由于是编译器自动调用的构造器方法,必须要能够让编译器知道去调用哪一个方法。构造器一般分为两类,一种是无参构造器,这种构造器不接受任何参数,另一种是可以接受参数的构造器。下面是定义这两种构造器的例子。

 class tree{
int height;
tree(){
System.out.println("无参数构造器");
} tree(int height){
this.height = height;
System.out.println("带参数构造器 " + height);
}
} public class test {
public static void main(String[] args){
tree t1 = new tree();
tree t2 = new tree(10);
}
}

  输出:

无参数构造器 带参数构造器 10

  这一段代码定义了一个简单的类tree,并且创建了两种同名但参数列表不同的构造器(一个不接受参数),我们可以从代码和输出对构造器的机制进行初步的分析。

  (1)首先很容易看到,一个类是允许定义多个构造器方法的,编译器会根据参数列表的不同决定具体调用哪一种方法,这关系到方法重载的话题。

  (2)另外更加细心的话,可以发现构造器方法是没有返回值的,这显然和普通的方法有区别,普通的方法都是有返回值的,即使是返回值为空的方法(返回void),并且你可以让它具体返回某一类型,但是构造器则不行,它本身没有任何返回值。

  (3)java中新对象的创建和构造器的调用时绑定在一起的,代码中没有对构造器的具体调用,但是用new方法创建对象时,明显可以看到构造器被调用了。

  (4)如果在编写类的时候没有写构造器,编译器会自动提供默认的无参构造器并且调用。但是如果写了其他接受参数的构造器,编译器不会帮你创建默认的无参构造器。