一番かんたんなJava入門

これからJavaを始めようという人の為の超入門サイトです。丁寧、簡単にこだわった解説なので初心者にぴったりです

Home » 一番かんたんなJava入門 » 【Java】 メンバ変数って何?

【Java】 メンバ変数って何?

time 2013/06/22

sponsored link

メンバ変数とは?

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

Human.java

public class Human{
	String name;
        int birthday;
}

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

 オブジェクトが持つパラメータのことを、このクラスのメンバ変数と言います。Humanクラスはnameとbirthdayという2つのメンバ変数を持っているわけです。

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

 それでは 前回、newして作った名前不明・生年月日不明という気持ち悪い人間オブジェクトの名前と生年月日を設定する為に、これらのメンバ変数にアクセスします。と、その前にオブジェクトを作るところをおさらい。

HumanTest.java

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

 ↑Human型の変数humanを宣言して、その変数humanにnewして作ったHumanオブジェクトを代入しました。これで変数humanをHumanオブジェクトとして扱うことができます。

 では変数humanのメンバ変数にアクセスして、それぞれの値を入れていきましょう。

オブジェクトが入った変数.メンバ変数

 この形でそのインスタンスが持つパラメータにアクセスすることができます。

 ・・おっとさりげなく出してしまいました。「インスタンス」という言葉。これはオブジェクトとほぼ同じ意味です。ただ微妙にニュアンスが違います。

 オブジェクトというのが概念的な言葉であるのに対して、インスタンスというのは具体的かつ個別のオブジェクトを指す場合に使います。

 個人的には「元素」と「原子」みたいなニュアンスの違いかな?と思っています。まあ、双方とも指しているものは同じだし、どっちがどうと明確に定義されているものでもないみたいなので、違いはニュアンス的な違いだけです。

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

 ちょっと脱線してしまいました。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日生まれのノブオという名前の人間を表すインスタンスになりました。

 eclipseを実際使って書いてみた人はお分かりだと思いますが、「human.」と打った時点で勝手にウィンドウが立ち上がりますね。

human3

 このようにそのウィンドウに、次に続けて書ける候補(humanオブジェクトのメンバ)がズラッと出てくれます。その中に「name」「birthday」もありますよね。

 つまり、eclipseは変数humanがHumanオブジェクトだということを既に認識してくれているわけです。賢いですねeclipse。

 ちなみにObjectクラスのメンバメソッドも出てきているのは、Javaでは全てのクラスはObjectクラスを継承しているからです。
※メンバメソッドや継承についても理解できれば、この入力アシスト機能を益々便利に使いこなせるようになるので、頑張りましょう。

 ついでにもう一人作ってみましょう。2011年1月1日生まれのアヤネちゃんです。

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つ作ってそれぞれが持つパラメータを出力しています。

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

 
 画面上部のツールバーの中にあるRunボタンをクリックするだけで実行できまます。コンパイルは自動的にやってくれているので楽ちんです。

human4

 出ました。eclipseで実行した場合、出力結果はコンソールという欄に出ます。

 本当はint型のbirthdayの値(19770101等)をごにょごにょして”1977年1月1日”とかっていうStringにしてから出力した方が格好いいですが、ここでは省略させてください。。そもそもbirthdayをString型で宣言して”1977年1月1日”という値で保持してもいいのですが、それではもし複数のインスタンスから一番歳上の人を探したり、年齢順にソートしたりという作業をする時に面倒ですよね。

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

オブジェクトが入った変数.メンバ変数

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

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

今だけ→転職できなければ全額返金の「エンジニア転職保証コース」
絶対エンジニアになる!→テックエキスパート

フリーランスエンジニアの収入例を見てみる→レバテックフリーランス

全くの初心者がWordPressでブログを始める方法

全くの初心者がWordPressでブログを始める方法

sponsored link

Androidアプリを作ろう

コメント

  • メンバ変数とフィールドの違いはなんでしょうか。
    どちらもクラスブロック内で宣言された変数ということで変わりはないのでしょうか?
    よろしくお願いいたします。

    by 匿名 €2015/06/01 15:34

  • おっしゃる通りです。
    なんとなくニュアンスが違うけど、指してるのは同じものです。

    by Nobuo@管理人 €2015/06/02 00:44

  • 申し訳ありません、最後のHumanTest.javaのコードについての質問があります。
    それを参照してコードを書いたのですが、コマンドプロンプトでコンパイル時

    「HumanTest2.java:3: エラー: シンボルを見つけられません
    Human human = new Human();
            ^                    」
    「HumanTest2.java:3: エラー: シンボルを見つけられません
    Human human = new Human();
             ^ 」

    といった感じのエラーが出てしまいました。
    その後、そちらのをコピペして試したのですが、同じエラーが出ました。
    自分ではこれ以上分かりそうにありません、どうすれば改善しますでしょうか?
    eclipseの使用の有無は関係ありませんよね?

    by 匿名 €2015/08/02 16:26

  • 上のコメントをした者ですが訂正です。

    「HumanTest2.java:3: エラー: シンボルを見つけられません
    Human human = new Human();
    ^                    」
    「HumanTest2.java:3: エラー: シンボルを見つけられません
    Human human = new Human();
             ^ 」

    「^」マークがずれていました。「Human human」の先頭のHの部分と、「new Human」のHでエラーが出ます。
    何度も申し訳ありません、よろしければご教示願います。

    by 匿名 €2015/08/02 16:29

  • 上で質問した者です。
    解決いたしました。

    一人で何度もコメント欄を汚してしまい申し訳ありませんでした。
    これからも運営等頑張ってください。

    by 匿名 €2015/08/02 17:58

  • by 匿名 €2015/08/03 13:39

  • […] メンバ変数 […]

    by 数か月分の参考サイト – コピペプログラマー雑記 €2018/09/22 11:02

down

コメントする



一番かんたんなJava入門

Androidアプリの作り方

忘備録

私の作ったAndroidアプリ

おすすめプログラミングスクール

プログラミングスクール検索

受講スタイル

習得したいスキル

習得したい言語・フレームワーク

オプション

料金

 この本は全く何も分からない初心者の方にお勧めです。プログラミングをするには覚えなければならない事が無茶苦茶いっぱいありますが、この本は教えてくれる順番、その構成が素晴らしいです。RPGのゲームを作るというストーリーにのっとってちょっとずつ難しいことを教えてもらえます。
 無機質で膨大なデータが載っているような本は読む気にならないという方は、こういうストーリー仕立ての本でチャレンジしてみてはいかがでしょうか?(注:RPGを作る為の本ではありません。)

 ある程度、Javaを読み書きできるようになったら、オブジェクト指向について学ぶべきです。本書は、抽象的で分かったような分からんようなオブジェクト指向という考え方について、非常に分かりやすい例を出して説明してくれています。オブジェクト指向とは何なのか?という本質を掴むのにこれほど適した本はないと思います。
 オブジェクト志向の理念を理解できれば、より効率のいいコードをより楽に書けるようになるはずです。Java上級者を目指すなら必読の一冊![詳細]

管理人

Nobuo_CREATE

Nobuo_CREATE

WordPressテーマPrinciple、マテリアルを作ったり、Androidアプリを作ったり、Java入門サイトを作ったり、本を書いたりしています。大阪の北野田駅近くのマイスタイルという学習塾を経営しています。どうぞよろしく。 [詳細]



sponsored link

オススメ書籍

 この本は全く何も分からない初心者の方にお勧めです。プログラミングをするには覚えなければならない事が無茶苦茶いっぱいありますが、この本は教えてくれる順番、その構成が素晴らしいです。RPGのゲームを作るというストーリーにのっとってちょっとずつ難しいことを教えてもらえます。
 無機質で膨大なデータが載っているような本は読む気にならないという方は、こういうストーリー仕立ての本でチャレンジしてみてはいかがでしょうか?(注:RPGを作る為の本ではありません。)

 ある程度、Javaを読み書きできるようになったら、オブジェクト指向について学ぶべきです。本書は、抽象的で分かったような分からんようなオブジェクト指向という考え方について、非常に分かりやすい例を出して説明してくれています。オブジェクト指向とは何なのか?という本質を掴むのにこれほど適した本はないと思います。
 オブジェクト志向の理念を理解できれば、より効率のいいコードをより楽に書けるようになるはずです。Java上級者を目指すなら必読の一冊![詳細]

只今、急拡大中

JavaからのRuby on Rails入門

JavaからのRuby on Rails入門