注目記事

【Javaコード入門】オブジェクト指向構文_⑥コンストラクターを定義する

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

[modifier] name(type args,…) {
statements
}
 modifier:修飾子
 name:メソッド名
 type:引数の型
 args:引数
 statements:コンストラクターの内容

コンストラクターとは、クラスをインスタンス化する際に初期化処理を行うための特別なブロックです。主に、必須のフィールドを初期化するなどの用途で利用します。コンストラクターは、ほぼメソッドと同じ構文で表せますが、以下の点で異なります。

  • 戻り値を持たないこと(戻り値の型も書かない)
  • クラスと同じ名前であること

たとえば以下は、Animalクラスのname/colorフィールドをコンストラクターで初期化する例です。

Animal.java

  1. class Animal {
  2. String name;
  3. String color;
  4.  
  5. public Animal() {
  6. }
  7.  
  8. public Animal(String name, String color) {
  9. this.name = name;
  10. this.color = color;
  11. }
  12. ...中略...
  13. public String getInfo(String format) {
  14. return String.format(format, this.name, this.color);
  15. }
  16.  
  17. }

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

ClassConstructor.java

  1. package com.example.mynavi.object;
  2.  
  3. public class ClassConstructor {
  4. public static void main(String[​] args) {
  5. var a = new Animal("トクジロウ", "ネズミ");
  6. System.out.println(a.getInfo("%sは%s色のハムスターです。"));
  7. } // 結果:トクジロウはネズミ色のハムスターです。
  8. }

 

 

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

初期化ブロック

コンストラクターによく似たしくみとして、初期化ブロックがあります。初期化ブロックは、classブロック直下で名前なしのブロック({…})として表します。インスタンス化のタイミングで、コンストラクターよりも先に実行されます。

Animal.java

  1. public class Animal {
  2. String name;
  3. String color;
  4.  
  5. {
  6. this.name = 'ニンザブロウ';
  7. this.color = 'White';
  8. }
  9. }

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

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

監修

山田祥寛(有限会社 WINGSプロジェクト)
静岡県榛原町生まれ。一橋大学経済学部卒業後、NEC にてシステム企画業務に携わるが、2003年 4 月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト(https://wings.msn.to/)」の代表でもある。主な著書に『改訂 3 版JavaScript 本格入門』(技術評論社)、「独習シリーズ(C#・Python・PHP・Ruby・JSP&サーブレットなど)」(翔泳社)、「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravel など)」(Amazon Kindle)など。売り上げの累計は100万部を超える。