• ベストアンサー

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

Javaを勉強し始めて半年くらいの者です。最近、プログラムを作成する際に変数とフィールドの使い分けがあいまいになってきました。フィールドとして定義すれば、そのクラス全体で使う事が出来ますよね?しかし、これは変数として最初に適用範囲が全体になるように(要はメソッドの中とかではないところに)定義すればそのクラス全体で使う事が出来ますよね?そうすると、何を変数にして、何をフィールドにすれば良いかがこんがらがってしまうのです。極端な話。。そのクラスで使う変数を全てフィールドで定義してしまえば、変数なんていらないのではないでしょうか?逆に、フィールドをなくして、全て変数で定義することもできるのではないか等と考えてしまうのです。この2つの明確な違いはなんなのでしょうか?みなさんはどういう風に使い分けていますか?

質問者が選んだベストアンサー

  • ベストアンサー
  • akira-h
  • ベストアンサー率80% (4/5)
回答No.1

私が使い分けているのは、データを残すか残さないかでフィールドにするか、変数にするかを使い分けています。 オブジェクトがメモリ上に残っている間はそのフィールドの値もメモリ上に残ります。変数はメソッドが呼ばれている間は残りますが、メソッドが終了するとクリアされます。 メモリの管理は自分たちが気にすることなくJavaの特徴でもあるガーベジコレクション機能により管理されていますよね。 もし仮にフィールドだけを使っていたら、ガーベジコレクションが大忙しになり、システム全体が重くなってしまいますよね。 と言う事から、私はちゃんと用途を考えてフィールド、変数を使い分けています。 (※メソッドが終了すると変数がクリアされるはちょっと自信がありませんが…)

noname#9262
質問者

お礼

回答ありがとうございました。なるほど。。なにか実用的なプログラムを作る時にはメモリなどのことも考えなくてはいけないのですね。。参考になりました。

その他の回答 (1)

  • sasadora
  • ベストアンサー率68% (59/86)
回答No.2

そのクラス自体がもつべき属性を、フィールドとするべきだと思います。 クラスで使う変数をすべてフィールドで用意してしまったら、 メソッド内で、その変数を使用するときに、いつ値がセットされたか、 はたまたセットされていないのか、さっぱり分からなくなってしまいます。 そのクラスが持つべき属性(インスタンスが存在する間ずっと保持している値)→フィールド そうではない一時的なもの→ローカル変数

noname#9262
質問者

お礼

回答ありがとうございました。意外にこの辺は明確な定義がないのですねぇ。まぁ。そうだからこそ、みなさんの様に自分なりの使い分け方を持っているか、持っていないかで、プログラムが読みやすくなったり、またその逆もあるのかもしれません。