本文へスキップ
BecomeCoder

Javaオブジェクト指向コース · 第1章 クラスとインスタンス ― オブジェクト指向のはじまり · レッスン2

コンストラクタ ― 生成と同時に初期化する

ブラウザで完結

導入

前のレッスンでは、インスタンスを作ったあとに pochi.name = "ポチ" と名前を設定しました。でも「名前のない犬」が一瞬でも存在してしまいます。生成と同時に初期化する コンストラクタ を使いましょう。

説明

コンストラクタ は、new したときに自動で呼ばれる特別なメソッドです。クラス名と同じ名前 で、戻り値の型を書きません。

public class Main {
    public static void main(String[] args) {
        Dog pochi = new Dog("ポチ", 3);
        pochi.introduce();

        Dog taro = new Dog("タロー", 5);
        taro.introduce();
    }
}

class Dog {
    String name;
    int age;

    Dog(String name, int age) {   // コンストラクタ(クラス名と同じ・戻り値なし)
        this.name = name;
        this.age = age;
    }

    void introduce() {
        System.out.println(name + "(" + age + "歳)");
    }
}
  • Dog(String name, int age) { ... } … コンストラクタ。new Dog("ポチ", 3) としたとき、"ポチ"3 が引数として渡されます。
  • this.name = name;this は「今まさに作られているこのインスタンス自身」を指します。this.name(フィールド)に、引数の name を代入しています。フィールドと引数が同じ名前のときに区別するため、this. をつけるのが定番です。

コンストラクタのおかげで、new Dog("ポチ", 3) の一行で「名前と年齢を持った犬」が確実に作られます。「未初期化の状態」を作らせないことが、安全なプログラムにつながります。

やってみよう

下のエディタを実行し、コンストラクタで名前と年齢がまとめて設定されることを確かめましょう。this. を外すとどうなるか(フィールドに代入されない)も試してみてください。

演習

Book クラスに String titleint price を持たせ、コンストラクタで両方を受け取って初期化してください。show() メソッドで タイトル: 800円 の形で表示し、main から new Book("Java入門", 800) を作って表示してください。

ヒント1を見る

Book(String title, int price) { this.title = title; this.price = price; }

ヒント2を見る

show() の中で System.out.println(title + ": " + price + "円");

実際に動かしてみよう

下のエディタにJavaを書いて「実行」を押すと、学習用シミュレータが System.out.println の出力を表示します(本物のJVMではなく、教材の範囲を再現した軽量エンジンです)。クラス・継承・コレクションなども動きます。Scanner で入力を読む例は「標準入力」欄に値を入れてください。本文の例を書き換えて動かしてみましょう(Stream・ラムダ・スレッド・ファイル入出力など一部の機能は対象外です)。

Java — ブラウザ内で実行(学習用シミュレータ)

Javaの教材サブセットを動かす学習用シミュレータを読み込みます(本物のJVMではなく、動きを再現した軽量な自作エンジンです)。
スクロールして表示された時点でも自動で読み込まれます。