質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

3回答

22876閲覧

ローカル変数とフィールド変数の使い分け

Tutti

総合スコア83

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

0クリップ

投稿2016/07/11 06:52

ローカル変数とフィールド変数の使い分けなんですけど、どのようにして使い分けたらいいのか。どういったものをローカル変数として、または、フィールド変数として使えばいいか分かりません。

私は、
ローカル変数はメソッドの中でしか使えないもの。
フィールド変数はクラス内で使えるものと理解しています。

どなたか教えていただけませんか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

ローカル変数はメソッドの中でしかつかえないもの。
これは合っています。

フィールドはクラス内でも使えますし、パブリックフィールドであれば他のクラスからも使えます。

基本的に、最も狭いスコープにあわせて宣言してください。
メソッド内でしか使わない変数はローカル変数で、メソッド外では使うけれどもクラス内でしか使わないものはプライベートフィールドで、クラス外から使うものはパブリックフィールドで。

また、クラス外から使うものはなるべくプロパティにしてください。
なぜなら、後日仕様変更があり、フィールドに代入した時点で何等かの処理を行いたくなった場合でも、プロパティなら簡単に対応できるからです。

投稿2016/07/11 06:58

Zuishin

総合スコア28656

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Tutti

2016/07/11 07:14

なるほどです!そのような使い分けをしたほうがいいのですね!ありがとうございます。 すみません。お手数をおかけしますが、例文なども教えていただけませんか? どういった作業をするときにどのようなものをフィールド変数、ローカル変数に入れたらいいかかイメージがつかないのです。
Zuishin

2016/07/11 07:36 編集

例えば、文字列オブジェクトについて考えます。 String s = "abc"; とした時、s にアクセスした際にはいつでも中身は "abc" でなければなりません。これが勝手に "Hello World!" に変わっては都合が悪いと思います。 このように、オブジェクトが保持される間は保持されなければならないデータはフィールドに保存します。 また String には getBytes() というメソッドがあります。このメソッドを呼び出した時、おそらく内部ではループを使って文字列の中の一文字一文字を取り出しているでしょう。最初の文字を取り出した次には二番目の文字を取り出す、というループを実現するには、今取り出しているのが何番目の文字なのかを知っておかなければなりません。 しかし、今何番目の文字なのかという情報は、メソッドの実行が終わってしまえば必要なくなります。次はまた一番目から始めればいいからです。 このようなメソッドの中だけで使う情報はローカル変数に保存します。
Tutti

2016/07/11 07:59

なるほど!!!理解が出来ました!!!そのときにしか必要としない変数をローカル変数として宣言して使えばいいんですね!!イメージがつきました!分かりやすい説明をしていただき、ありがとうございます!!
guest

0

ローカル変数、フィールド変数についてはその認識でOKです。
フィールド変数はそのインスタンスが持つ性質のようなものです。人で言うところの身長や体重などがわかりやすいでしょうか。
一方、ローカル変数はそのメソッドの処理をする上で一時的に保管しておく値になります。先ほどの人の例で行くなら、BMIを計算するために身長の2乗を保管しておくようなイメージです。

投稿2016/07/11 07:06

swordone

総合スコア20649

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Tutti

2016/07/11 07:34

ということは、フィールド変数はほかのクラスでもリサイクルできるようなものにして、 ローカル変数は使い捨ての変数という認識で合ってますでしょうか?
guest

0

メソッド内のブロック内部で定義された場合は、そのブロック内から制御が外れると
メモリ上からドロップされて永遠に失われます。
ローカル変数は、制御がそのスコープから外れるとメモリ上からドロップされる変数。

フィールド変数の場合は、そのクラスのオブジェクトへの参照が存在する限り、メモリ上に保持されます。
フィールド変数は、オブジェクトとともに持続し続ける変数。

という認識です。

投稿2016/07/11 07:01

tomo.ina

総合スコア357

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問