Geekroid-ギークロイド(仮)|ITエンジニアの日常をささいな情報で彩るコラム

ITエンジニアの転職

コンストラクターを定義する

コンストラクターを定義する
[modifier] name(type args,…) {
statements
}
modifier:修飾子
rtype:戻り値の型
name:メソッド名
type:引数の型
args:引数
statements:メソッドの本体

コンストラクターとは、クラスをインスタンス化する際に初期化処理を行うための特別なブロックです。主に、必須のフィールドを初期化するなどの用途で利用します。コンストラクターは、ほぼメソッドと同じ構文で表せますが、以下の点で異なります。
・戻り値を持たないこと(戻り値の型も書かない)
・クラスと同じ名前であること
たとえば以下は、Animalクラスのname/colorフィールドをコンストラクターで初期化する例です。

Animal.java

class Animal {
  String name;
  String color;
  
  public Animal() {
  }

  public Animal(String name, String color) {
    this.name = name;
    this.color = color;
  }
  ...中略...
  public String getInfo(String format) {
    return String.format(format, this.name, this.color);
  }
  
}

このAnimalクラスは、以下のように利用できます。

ClassConstructor.java

package com.example.mynavi.object;

public class ClassConstructor {
  public static void main(String[] args) {
    Animal a = new Animal("トクジロウ", "ネズミ");
    System.out.println(a.getInfo("%sは%s色のハムスターです。"));
  } // 結果:トクジロウはネズミ色のハムスターです。
}
note

デフォルトコンストラクター
コンストラクターが明示的に定義されなかった場合、Javaは引数なしの空のコンストラクターを暗黙的に生成します。これをデフォルトコンストラクターと言います。

初期化ブロック

コンストラクターによく似たしくみとして、初期化ブロックがあります。初期化ブロックは、classブロック直下で名前なしのブロック({…})として表します。
例えば、以下のように

Animal.java

public class Animal {
  String name;
  String color;

  {
    this.name = 'ニンザブロウ';
    this.color = 'White';
  }
}

ひとつのクラスに複数の初期化ブロックを配置することも可能で、その場合は記述順に実行されます。
記法そのものはシンプルですが、コンストラクターに比べると、引数を渡すことすらできませんので、自由度もあまりありません。一般的には、オブジェクトの初期化にはコンストラクターを利用し、コンストラクターを複数定義(オーバーロード)した場合に、重複してしまった処理だけを初期化ブロックとして切り出す、という使い方になるでしょう。

オブジェクト指向構文
class命令
new演算子
フィールドを定義する
static final修飾子
メソッドを定義する
コンストラクターを定義する
package宣言
import命令
import static命令
ネストしたクラスを定義する

Geekroid-ギークロイド(仮)|ITエンジニアの日常をささいな情報で彩るコラム

ITエンジニアの転職