Types of Constructor
Constructor 有三种:
- Default constructor:你不写 constructor 时,Java 编译器默认给你加了,
.class
文件中有;它的行为是什么成员变量都初始化成零值或者 null - No-arg constructor:没有参数的 constructor
- Parameterized constructor:带参数的
public class Hello {
string name;
// No-arg constructor
Hello() { this.name = "World"; }
// Parameteraized constructor
Hello(string name) { this.name = name; }
}
你也可以只实现没有参数的构造函数,或者只实现带参数的。
Constructor Chaining
public class Hello {
string name;
Hello() { this("World"); } // 调用下面那个构造函数
Hello(string name) { this.name = name; }
}
this
and super
keywords
this
在类的定义体内经常出现:
this.name = "World"
时,this
表示运行时的这个类实例(object)本身this("World")
时,调用的是构造函数this.func()
时,调用的是实例的方法
super
跟 this
类似,但它是指向你的父类的东西。
Private constructor
构造函数可以是 private 的,主要用来实现单例(Singleton):
public class Singleton {
private static Singleton obj = null;
private Singleton() {} // 这样外部代码无法实例化一个 Singleton object
public static Singleton getInstance() {
if(obj == null) {
obj = new SingleTonClass();
}
return obj;
}
}