Developer

【はじめてのJava】thisを使ったコンストラクタの呼び出し(その2)【オブジェクトとクラス編】
2021.09.30
Lv1

【はじめてのJava】thisを使ったコンストラクタの呼び出し(その2)【オブジェクトとクラス編】

はじめてのJava

このシリーズでは、初めてJavaやプログラミングを勉強する方向けに、Javaによるプログラミングの基礎を説明していきます。
目標レベルは、Javaの資格試験の一つである「Oracle Certified Java Programmer, Silver」(通称Java Silver)に合格できる程度の知識の習得です。
はじめてJavaやプログラムに触れる方にもできるだけわかりやすい解説を心がけていきます。


オブジェクトとクラス編

オブジェクトとクラス編では、Javaを扱う上で非常によく出てくる「オブジェクト」や「クラス」について扱っていきます。

前回は「thisを使ったコンストラクタの呼び出し」について扱いました。

今回は「thisを使ったコンストラクタの呼び出し(その2)」について扱います。


目次


thisを使った別のコンストラクタの呼び出しその2

 

前回はthisを使ってコンストラクタから別のコンストラクタを呼びなおす方法をご紹介しました。

その際、呼び出し元(先に呼ばれた方)のコンストラクタには、thisを使った処理以外は記載されていませんでした。

今回は、thisを使ったコンストラクタの呼びなおしの後に処理が続いている場合の例を見ていきましょう。


thisを使った呼びなおしの後に処理が残っている場合

thisを使った呼びなおしの後に処理が残っている場合、呼び出されたコンストラクタの処理が終わった後に、呼び出し元の処理が続けて実行されます。

具体的に見てみましょう。

今回説明で使用するCarクラスは以下の通りです。

Car.java

class Car{
  double speed;
  String color;
   
  //引数のないコンストラクタ
  Car(){
    this.speed = 0;
    this.color = "red";
  }
 
  //↓引数付きのコンストラクタ
  Car(String color){
    this();
    this.color = color; //★
  }
}

★の行が、thisによるコンストラクタの呼びなおしの後にあります。

このCarクラスをインスタンス化した際の動き方を確認してみましょう。


インスタンス化の際の動き方

先ほどのクラスを図示すると以下のようになります。

ここでnew Car("bule");でインスタンス化すると以下のようにコンストラクタ2が動きます。

コンストラクタ2では最初の処理としてthis();が入っています。

ここが動くと、引数のないコンストラクタ(コンストラクタ1)が実行され、speedが0に、colorがredに設定されます。

その後、コンストラクタ1の動作は終了します。この時、処理は先ほどthis();を呼び出したコンストラクタ2に移ります。
(this();の直後の行に移る)

そしてthis.color = color;が実行されます。この時引数には"blue"が指定されているため、生成されたインスタンスのcolorはblueになります。

これで、インスタンス化が完了となります。


ソースコード

今回使用したソースコードをまとめて記載します。

Carクラス

class Car{
  double speed;
  String color;
   
  //引数のないコンストラクタ
  Car(){
    this.speed = 0;
    this.color = "red";
  }
 
  //↓引数付きのコンストラクタ
  Car(String color){
    this();
    this.color = color; //★
  }
}

まとめ

thisを使ったコンストラクタの呼び出しの後に処理が残っている場合(サンプルコードの★の箇所に処理がある場合)、thisによるコンストラクタの呼びなおしが終わった後に続けて処理が実行される


次回

次回も引き続きクラスやオブジェクトに関する内容を扱います。


はじめてのJavaシリーズの目次はこちら
オブジェクトとクラス編はこちら


java 11 の練習問題一覧はこちら
はじめてのJavaシリーズの練習問題一覧はこちら