2019/02/06
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.」と打った時点で勝手にウィンドウが立ち上がりますね。
このようにそのウィンドウに、次に続けて書ける候補(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ボタンをクリックするだけで実行できまます。コンパイルは自動的にやってくれているので楽ちんです。
出ました。eclipseで実行した場合、出力結果はコンソールという欄に出ます。
本当はint型のbirthdayの値(19770101等)をごにょごにょして”1977年1月1日”とかっていうStringにしてから出力した方が格好いいですが、ここでは省略させてください。。そもそもbirthdayをString型で宣言して”1977年1月1日”という値で保持してもいいのですが、それではもし複数のインスタンスから一番歳上の人を探したり、年齢順にソートしたりという作業をする時に面倒ですよね。
まあ、そんな枝葉の話は横へ置いといて、オブジェクトのメンバ変数にアクセスする
オブジェクトが入った変数.メンバ変数
という基本的な部分を抑えておきましょう。
次回は、メンバメソッドついてやります。メンバメソッドというのは言わば”オブジェクトの振舞い”です。そのオブジェクトの持つ「パラメータ」を定義するのがメンバ変数、「振舞い」を定義するのがメンバメソッドです。
今だけ→転職できなければ全額返金の「エンジニア転職保証コース」
絶対エンジニアになる!→テックエキスパート
フリーランスエンジニアの収入例を見てみる→レバテックフリーランス
コメント
メンバ変数とフィールドの違いはなんでしょうか。
どちらもクラスブロック内で宣言された変数ということで変わりはないのでしょうか?
よろしくお願いいたします。
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
http://nobuo-create.net/java-beginner-18/
by 匿名 2015/08/03 13:39
[…] メンバ変数 […]
by 数か月分の参考サイト – コピペプログラマー雑記 2018/09/22 11:02