Developer

【はじめてのJava】イニシャライザ【オブジェクトとクラス編】
2021.08.31
Lv1

【はじめてのJava】イニシャライザ【オブジェクトとクラス編】

はじめてのJava

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


オブジェクトとクラス編

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

前回は「初期化処理のまとめ方」について扱いました。

今回は「イニシャライザ」について扱います。


目次


イニシャライザ

 

 イニシャライザ とはインスタンス化の際に必ず実行する処理を定義する箇所です。

詳しく見ていきましょう。


イニシャライザとは

Javaには イニシャライザ と呼ばれるものがあります。

イニシャライザにはインスタンス化の際に必ず行いたい処理を記載します

例えば以下ような、コンストラクタがオーバーロードされたCarクラスがあったとします。

class Car{
  double speed;
  String color;
  
  //引数のないコンストラクタ
  Car(){
    this.speed = 0;
    this.color = "red"; //colorの初期値がredになるように設定
  }
 
  //↓引数付きのコンストラクタ
  Car(String color){
    this.speed = 0;
    this.color = color;
  }
   
}

このCarクラスを使ってインスタンス化をすると以下の図のようになります。

ここで、インスタンス化された後の2台のCarオブジェクトをよく見てみると、どちらもspeedが0で初期化されていることが分かります。

上記のCarクラスでは、それぞれのコンストラクタで「speed = 0;」と定義していました。イニシャライザを使うと、この処理を1か所でまとめることができます。


イニシャライザの書き方

イニシャライザの書き方を見てみましょう。
イニシャライザは以下のようにクラスの直下に{ }を直接書きます。

イニシャライザの書き方

class Sample{
  //イニシャライザ
  {
    //ここにイニシャライザで行いたい処理を書く
  }
}

例えば、先ほどのCarクラスを、イニシャライザを用いて書き換えると次のようになります。

class Car{
  double speed;
  String color;

  //イニシャライザ
  {
    this.speed = 0;
  }

  //引数のないコンストラクタ
  Car(){
    //this.speed = 0; //イニシャライザに移動
    this.color = "red"; //colorの初期値がredになるように設定
  }
  
  //↓引数付きのコンストラクタ
  Car(String color){
    //this.speed = 0; //イニシャライザに移動
    this.color = color;
  }    
}

イニシャライザの動作

イニシャライザの動作を見てみましょう。

イニシャライザはインスタンス化の際に実行されます。この時 コンストラクタよりも先に動作します 
インスタンス化の際の動作の順番は「1.イニシャライザによる処理」→「2.コンストラクタによる処理」の順番になります。

例えば下の図のようなクラスがあったとします。

この時動作の順番は「1.イニシャライザによりthis.speed = 0;が実行される」→「2.コンストラクタによりthis.color = “red”;が実行される」の順になります。


ソースコード

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

Carクラス

class Car{
  double speed;
  String color;

  //イニシャライザ
  {
    this.speed = 0;
  }

  //引数のないコンストラクタ
  Car(){
    //this.speed = 0; //イニシャライザに移動
    this.color = "red"; //colorの初期値がredになるように設定
  }
  
  //↓引数付きのコンストラクタ
  Car(String color){
    //this.speed = 0; //イニシャライザに移動
    this.color = color;
  }    
}

まとめ

インスタンス化の際の初期化処理の共通部分はイニシャライザにまとめることができる
イニシャライザを定義するときはクラスの直下に{ }で囲んだブロックを直接記述する
インスタンス化の際には「イニシャライザ」→「コンストラクタ」の順に動作する


次回

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


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


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