🦍

【Java】コンストラクタからコンストラクタを呼び出す(備忘録)

に公開

1.はじめに

コンストラクタとは

2.文法と処理の流れについて

this を使用して、同じクラスの他のコンストラクタを呼び出します。

呼び出し元のコンストラクタから呼び出し先のコンストラクタへ処理が移ります。
 不適切な this の使い方を使用すると無限ループが発生するので、注意してください。

3.サンプルプログラム

〇例1:正しい書き方

Sample1.java
package lesson.java;

public class Sample1 {
    // メンバ変数(フィールド)
    String lastName;

    // 呼び出し元コンストラクタ
    public Sample1() {
        // 引数ありコンストラクタを呼び出す
        this("山田");    
    }

    // 呼び出し先コンストラクタ
    public Sample1(String name) {
        // メンバ変数に引数の値を入れる
        this.lastName = name;
    }
}
Sample2.java
package lesson.java;

public class Sample2 {
    public static void main(String args[]) {
        // Sample1クラスからインスタンス作成
        Sample1 showName1 = new Sample1();
        Sample1 showName2 = new Sample1("山本");
        Sample1 showName3 = new Sample1("田中");

        System.out.println(showName1.lastName);
        System.out.println(showName2.lastName);
        System.out.println(showName3.lastName);        
    }
}
実行結果
山田
山本
田中

〇例2:無限ループが起きる不適切な書き方

Sample1.java
package lesson.java;

public class Sample1 {
    // メンバ変数(フィールド)
    String lastName;

    // 呼び出し先コンストラクタ
    public Sample1(){
        lastName = "山田";	
    }
		
    // 呼び出し元コンストラクタ
    public Sample1(String Name){
        // 引数なしコンストラクタを呼び出す
        this();
        // メンバ変数に引数の値を入れる
        this.lastName = Name;
    }
}
Sample2.java
package lesson.java;

public class Sample2 {
    public static void main(String args[]) {
        // Sample1クラスからインスタンス作成
        Sample1 ShowName_1 = new Sample1();
        Sample1 ShowName_2 = new Sample1("山本");
        Sample1 ShowName_3 = new Sample1("田中");

        System.out.println(ShowName_1.lastName);
        System.out.println(ShowName_2.lastName);
        System.out.println(ShowName_3.lastName);        
    }
}

4.参考

5.2 コンストラクタから別のコンストラクタを呼ぶ

Discussion