フィールドとローカル変数
クラスの中には、2種類の変数があります。「フィールド」と「ローカル変数」です。フィールドとはクラスが持っている変数のことです。そのオブジェクトに保存させておきたいデータとして使います。
フィールドは、インスタンスを作成すると同時に発動し、インスタンスがある限り存在します。
一方、ローカル変数とは、「ブロックの中で一時的に使われる変数」です。ブロックとは下記の赤枠のことをいいます。青枠はメソッドのブロックです。ローカル変数はメソッドの中や、for文の中など一時的に使い、ブロックのなかだけで存在し、ブロックが終了すると消えてしまいます。このローカル変数が存在する範囲のことを「スコープ」と呼びます。
なにも消えてしまわなくても、、と思われるかもしれません。でも不要になった変数を消すことは、安全で便利にするため。使い終わった変数を使いまわすのは危険だし、変な値が入っているかもしれないし、、、。不要になった変数が消えてくれれば、同じような処理にまた同じ名前をつけても大丈夫になる。
フィールドがあるクラスの例
これは、このオブジェクトに保存させておきたい変数データとなります。
ローカル変数があるクラスの例
answerはTestメソッドの中だけで使うローカル変数で、赤線にてローカル変数answerの効力は消えます。
for文のブロックの中で作ったローカル変数の場合
for文のブロックの中で作ったときは、そのfor文のなかではずっと存在し続けます。for文は変数としてよく「i」や「count」が使われます。しかし、for文がたくさんあれば、それぞれ違う名前を考えなくてはいけないので面倒ですね。1つの変数を使いまわすのもよくありません。
しかし、ローカル変数だと、for文が終われば消えてしまうので、同じ変数名で新しく使うこともできるようになります。
フィールドとローカル変数を明確に区別する方法(フィールドにthis)
フィールドとローカル変数が混ざっているプログラム例
point.java
a = 1;というフィールドがあり、a = 2;というローカル変数もあります。この場合、どちらが表示されるでしょうか?
Main.java
この場合、ローカル変数のほうが優先されるので「2」が表示されます。
フィールドにthisを付けて区別するやり方
フィールド「a = 1;」の方を優先させたい場合は、「this.a」と指定します。thisとは「このインスタンス」という意味です。なので「このインスタンスの持っているデータ(フィールド)のa」という意味になります。
最初にローカル変数が存在する範囲のことを「スコープ」と呼ぶといいました。そのスコープの範囲を見てみましょう。
青枠の中にローカル変数が含まれています。よって赤枠がスコープとなります、
赤枠の中での「int a = 1」はフィールドaのスコープです。青枠の中での「int a = 2」はローカル変数aのスコープになります。表示もthisを付けないと2とローカル変数が優先されてますが、thisをつけるとフィールドのint a = 1が指定されています。
Java1年生 体験してわかる!会話でまなべる!プログラミングのしくみ / 森巧尚 【本】
この本から引用、参考にして学びました。この本ではキャラクターが対話しながら進み、あきることなく図解などを多用して初心者が始めるにはとても分かりやすい本です。
身に付け消えないスキルが約2,000円ならコスパよく、買っておいてよかったと満足してます。
短期間でのレベルアップにはプロから学ぶのもありです。
就職・転職支援
ぺージの先頭に戻る(Return to top of page)
©2020年9月 Challenge programming