Java构造器(constructor)
初始化和清除
“初始化”和“清除”是这些安全问题的其中两个。C++为我们引入了“构造器”(构造函数)的概念。这是一种特殊的方法,在一个对象创建之后自动调用。Java 也沿用了这个概念,但新增了自己的“垃圾收集器”,能在资源不再需要的时候自动释放它们。
用构造器初始化
在 Java 中,由于提供了名为“构造器”的一种特殊方法,所以类的设计者可担保每个对象都会得到正确的初始化。若某个类有一个构造器,那么在创建对象时,Java 会自动调用那个构造器——甚至在用户毫不知觉的情况下。
接着的一个问题是如何命名这个方法。存在两方面的问题。第一个是我们使用的任何名字都可能与打算为某 个类成员使用的名字冲突。第二是由于编译器的责任是调用构造器,所以它必须知道要调用是哪个方法。C++采取的方案看来是最简单的,且更有逻辑性,所以也在Java 里得到了应用:构造器的名字与类名相同。这样一来,可保证象这样的一个方法会在初始化期间自动调用。
package com.xu.javaoop;
public class Rock {
//这是个构造器
Rock() {
System.out.println("构造Rock");
}
}
package com.xu.javaoop;
/**
* 简单的构造器示例
*/
public class SimpleConstructor {
public static void main(String[] args) {
for (int i = 0; i < 10; i++) {
new Rock();
}
}
}
输出:

构造器方法过载
构造器也能使用自变量,也能方法重载(过载):
package com.xu.javaoop;
public class Rock {
//这是个构造器
Rock() {
System.out.println("无参数构造");
}
Rock(int i) {
System.out.println("构造Rock" + i);
}
}
package com.xu.javaoop;
/**
* 带参数构造器示例以及方法过载
*/
public class SimpleConstructor {
public static void main(String[] args) {
//i为奇数调用含参构造器否则调用无参构造器
for (int i = 0; i < 10; i++) {
if ((i % 2) == 0) {
new Rock();
} else {
new Rock(i);
}
}
}
}

默认构造器规则
对于下面这一行:
new Bird();
它的作用是新建一个对象,并调用默认构造器——即使尚未明确定义一个象这样的构造器。若没有它,就没
有方法可以调用,无法构造我们的对象。然而,如果已经定义了一个构造器(无论是否有自变量),编译程
序都不会帮我们自动合成一个:
class Bush {
Bush(int i) {}
Bush(double d) {}
}
现在,假若使用下述代码:
new Bush();
编译程序就会报告自己找不到一个相符的构造器。就好象我们没有设置任何构造器,编译程序会说:“你看
来似乎需要一个构造器,所以让我们给你制造一个吧。”但假如我们写了一个构造器,编译程序就会说:
“啊,你已写了一个构造器,所以我知道你想干什么;如果你不放置一个默认的,是由于你打算省略它。”

浙公网安备 33010602011771号