コンストラクターを定義する
コンストラクターを定義する- [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色のハムスターです。")); } // 結果:トクジロウはネズミ色のハムスターです。 }
デフォルトコンストラクター
コンストラクターが明示的に定義されなかった場合、Javaは引数なしの空のコンストラクターを暗黙的に生成します。これをデフォルトコンストラクターと言います。
コンストラクターによく似たしくみとして、初期化ブロックがあります。初期化ブロックは、classブロック直下で名前なしのブロック({…})として表します。
例えば、以下のように
Animal.java
public class Animal { String name; String color; { this.name = 'ニンザブロウ'; this.color = 'White'; } }
ひとつのクラスに複数の初期化ブロックを配置することも可能で、その場合は記述順に実行されます。
記法そのものはシンプルですが、コンストラクターに比べると、引数を渡すことすらできませんので、自由度もあまりありません。一般的には、オブジェクトの初期化にはコンストラクターを利用し、コンストラクターを複数定義(オーバーロード)した場合に、重複してしまった処理だけを初期化ブロックとして切り出す、という使い方になるでしょう。