Java: OOP: Constructor

 21st January 2021 at 10:43pm

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() 时,调用的是实例的方法

superthis 类似,但它是指向你的父类的东西。

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;
    }
}