コンストラクターを定義する
[modifier] name(type args,…) {
statements
}
modifier:修飾子
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) {
- var 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';
- }
- }
ひとつのクラスに複数の初期化ブロックを配置することも可能で、その場合は記述順に実行されます。
記法そのものはシンプルですが、コンストラクターに比べると、引数を渡すことすらできませんので、自由度もあまりありません。一般的には、オブジェクトの初期化にはコンストラクターを利用し、コンストラクターを複数定義(オーバーロード)した場合に、重複してしまった処理だけを初期化ブロックとして切り出す、という使い方になるでしょう。
- オブジェクト指向構文_目次
- class命令
- new演算子
- フィールドを定義する
- static final修飾子
- メソッドを定義する
- コンストラクターを定義する
- レコード
- package宣言
- import命令
- import static命令
- ネストしたクラスを定義する
- モジュール
監修