Java入門 #13 - コンストラクタ

入門 | 10分 で読める | 2026.05.02

公式ドキュメント

今回やること

コンストラクタは、newでオブジェクトを作る時にフィールドを初期化する特別な処理です。商品名と価格を持つProductを、作成直後から使える状態にします。

前提: Java入門 #12 - クラスとオブジェクトで、フィールド、メソッド、newを学んでいること。

new Product("ノート", 300)
        ↓ コンストラクタ
name="ノート", price=300 のオブジェクト

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

コンストラクタはクラス名と同じ名前で、戻り値の型を書きません。

class Product {
    String name;
    int price;

    Product(String name, int price) {
        this.name = name;
        this.price = price;
    }
}

void Product(...)と書くと、コンストラクタではなく戻り値のないメソッドになります。

2. thisでフィールドを示す

this.name = name;

左のthis.nameは作成中のオブジェクトのフィールド、右のnameはコンストラクタが受け取った引数です。

部分
this.nameオブジェクトに保存する商品名
namenewの呼び出し元から受け取った値

引数とフィールドを同じ分かりやすい名前にし、thisで区別する書き方がよく使われます。

3. newで初期化する

Product notebook = new Product("ノート", 300);

newがメモリ上にオブジェクトを作り、続けて引数2個のコンストラクタを呼びます。呼び出しに合うコンストラクタがなければコンパイルエラーです。

4. 初期値違いをオーバーロードする

価格をまだ決めていない商品用に、引数1個のコンストラクタを追加します。

Product(String name) {
    this(name, 0);
}

this(name, 0)は同じクラスの引数2個のコンストラクタを呼びます。初期化処理を重複させず、価格だけ既定値0にします。this(...)はコンストラクタの最初の文に置きます。

完成コードを動かす

ConstructorDemo.javaとして保存します。

class Product {
    String name;
    int price;

    Product(String name, int price) {
        this.name = name;
        this.price = price;
    }

    Product(String name) {
        this(name, 0);
    }

    void showInfo() {
        System.out.println(name + ": " + price + "円");
    }
}

public class ConstructorDemo {
    public static void main(String[] args) {
        Product notebook = new Product("ノート", 300);
        Product undecided = new Product("新商品");

        notebook.showInfo();
        undecided.showInfo();
    }
}
javac ConstructorDemo.java
java ConstructorDemo
呼び出し選ばれるコンストラクタprice
new Product("ノート", 300)引数2個300
new Product("新商品")引数1個から2個へ委譲0

成功確認

ノート: 300円
新商品: 0円

どちらの作り方でも、オブジェクト作成直後にnamepriceが入っていれば成功です。

デフォルトコンストラクタの注意

コンストラクタを1つも書かない時だけ、Javaは引数なしのデフォルトコンストラクタを自動で用意します。引数付きコンストラクタを1つでも書くと、new Product()は自動では使えません。必要なら引数なし版を明示して、どんな初期状態を許すか決めます。

よくあるつまずき

コンストラクタへ戻り値の型を書く

コンストラクタにはvoidintも書きません。クラス名と同じ名前にします。

name = nameと書く

引数へ同じ値を代入するだけです。フィールドへ入れるにはthis.name = nameと書きます。

this()を途中へ書く

別コンストラクタを呼ぶthis(...)は、コンストラクタの最初の文でなければなりません。

練習

本を表すBooktitlepagesを持たせます。引数2個のコンストラクタと、ページ数を100にする引数1個のコンストラクタをthis(...)で作ってください。

次のステップ

Java入門 #14 - Scannerで、利用者が入力した値からオブジェクトを作る準備をします。

参考リソース

← 一覧に戻る
PR
PR
PR
PR