第15講・STEP 03

メンバ変数って何?

前回はHumanオブジェクトを作りました。今回は、そのオブジェクトに名前と生年月日を設定してみましょう。メンバ変数への値の代入と読み出しを学び、2人分のインスタンスがそれぞれ別のデータを持つ様子を確認します。

メンバ変数とは?

 前回、Humanクラスを書いて、それをnewすることでHumanオブジェクトを作りました。Humanクラスはこんなのでした。

Human.java

public class Human{
    String name;
    int birthday;
}

 このHumanクラスが、Humanオブジェクトの設計図・テンプレートです。Humanオブジェクトはnameとbirthdayというデータを持っています。

 クラスの中で宣言するこうした変数をメンバ変数(フィールド)と言います。今回のnameとbirthdayはstaticを付けていないので、インスタンスごとに値を持つインスタンス変数です。Humanクラスはnameとbirthdayという2つのメンバ変数を持っているわけです。

 ・・おっとさりげなく出してしまいました。「インスタンス」という言葉。これはオブジェクトと同じものを指す言葉と思ってもらって問題ないです。より具体的なニュアンスで、あるクラスを基に作ったオブジェクトを指して言います。

 とりあえず今後は「インスタンス」という言葉も使いますので、あまり難しく考えず、具現化したオブジェクトのことだと思っていて下さい。

インスタンスのメンバ変数にアクセスする

 それでは 前回、newして作ったまだ名前と生年月日を設定していないHumanオブジェクトの名前と生年月日を設定する為に、これらのメンバ変数にアクセスします。と、その前にオブジェクトを作るところをおさらい。

HumanTest.java

public class HumanTest{
    public static void main(String[] args){
        Human human;
        human = new Human();
    }
}

 ↑Human型の変数humanを宣言して、newして作ったHumanオブジェクトへの参照を、その変数humanに代入しました。これでhumanを通して、そのオブジェクトを使えます。

 ではhumanが参照しているオブジェクトのメンバ変数にアクセスして、それぞれの値を入れていきましょう。

オブジェクトを参照する変数.メンバ変数

 この形でそのインスタンスが持つデータにアクセスすることができます。左辺に書けば値を代入でき、右辺やprintlnの引数に書けば値を読み出せます。

 humanが参照するHumanクラスのインスタンスの名前と生年月日を設定してみましょう。

HumanTest.java

public class HumanTest{
    public static void main(String[] args){
        Human human = new Human();
        human.name = "ノブオ";
        human.birthday = 19770101;
    }
}

 これでhumanが参照するインスタンスに、ノブオという名前と1977年1月1日という生年月日を設定できました。

 IntelliJ IDEAでは、humanの後ろに半角の「.」を入力すると、続けて書けるメンバの候補が表示されます。

 入力候補の中からnameやbirthdayを選べば、つづりを全部入力せずに書けます。

 IDEは変数humanの宣言された型がHumanであることから、使えるメンバを候補として示してくれるわけです。

 ちなみにObjectクラスのメンバメソッドも出てきているのは、JavaではObject以外のクラスは直接または間接的にObjectクラスを継承しているからなのですが継承についてはまたの機会に。

HumanTest.java

public class HumanTest{
    public static void main(String[] args){
        Human human = new Human();
        human.name = "ノブオ";
        human.birthday = 19770101;

        Human human2 = new Human();
        human2.name = "アヤネ";
        human2.birthday = 20110101;
    }
}

 このように、先ほど書いたHumanクラスを元にいくつでもインスタンスを作ることができます。もちろんデータの値はそれぞれのインスタンスごとに個別に持つことができます。

 では、今作った二つのインスタンスの中身を出力してみましょう。

HumanTest.java

public class HumanTest{
    public static void main(String[] args){
        Human human = new Human();
        human.name = "ノブオ";
        human.birthday = 19770101;

        Human human2 = new Human();
        human2.name = "アヤネ";
        human2.birthday = 20110101;

        System.out.println("1人目");
        System.out.println("名前:" + human.name);
        System.out.println("生年月日:" + human.birthday);

        System.out.println("");

        System.out.println("2人目");
        System.out.println("名前:" + human2.name);
        System.out.println("生年月日:" + human2.birthday);
    }
}

 Humanオブジェクトを2つ作ってそれぞれが持つデータを出力しています。

 ではこのプログラムを実行してみましょう。

HumanTestのmainメソッド横にある実行ボタンから実行します。Human.javaとHumanTest.javaは、前回と同じsrcの直下(パッケージを指定する場合は同じパッケージ)に置いてください。

実行結果
1人目
名前:ノブオ
生年月日:19770101

2人目
名前:アヤネ
生年月日:20110101

 出ました。実行結果はIntelliJ IDEAのコンソールに表示されます。

 生年月日は、前回と同じく19770101のように年月日を並べた整数で扱っています。この形なら、有効な日付を同じ桁数で表した値どうしを比較して順序を調べられます。ただし、日付の妥当性を確認したり年齢を計算したりする仕組みはありません。ここではメンバ変数の使い方に集中しましょう。

 まあ、そんな枝葉の話は横へ置いといて、オブジェクトのメンバ変数にアクセスする

オブジェクトを参照する変数.メンバ変数

という基本的な部分を抑えておきましょう。

次回は、メンバメソッドについてやります。メンバメソッドというのは言わば”オブジェクトの振舞い”です。そのオブジェクトの持つ「データ」を定義するのがメンバ変数、「振舞い」を定義するのがメンバメソッドです。

目次へ

質問・コメント

読み込み中

この記事についての質問や、学習して気づいたことをお寄せください。

コメントを書く

投稿フォームを準備しています。

コメントと一緒に公開される名前です。
3,000文字以内。パスワードなどの個人情報は書き込まないでください。

コメントは送信後すぐに公開されます。

この記事のコメント

旧サイトに寄せられたコメントも当時の投稿内容のまま掲載しています。現在の記事では変更している内容や、旧環境についてのやり取りも含まれます。

コメントを読み込んでいます。