Akira's Blog

神奈川在住のITエンジニアの雑記です。主にプログラミング(Perl, Java など)やネットワーク技術についての小ネタを、ちょっとずつ書いていきます。

メソッド間で変数をやり取りする方法

Javaでメソッド間で変数をやり取りする方法について書く。まずは一覧。 

  • 引数で渡す
  • メンバ変数に格納して渡す
  • static変数に格納して渡す
  • シングルトンなクラスのオブジェクトに格納して渡す

以下、それぞれの使いどころと注意点について、少し詳しく説明する。

 

引数で渡す

 メソッドが呼び出しの階層関係にある場合は、これがシンプルで使いやすい。ただ、何でもかんでも引数で渡すようにすると、メソッドの引数の数が多くなってしまうので注意。

 

メンバ変数に格納して渡す

クラス内の多数のメソッドから使用される変数の場合、いちいち引数で渡すのは面倒なので、メンバ変数に格納してそこから使うのが良いと思う。メンバ変数はクラス内のグローバル変数だと考えれば良い。なので、マルチスレッドプログラムで、そのメンバ変数を変更する処理が複数同時に走る可能性がある場合は、排他処理を実装しないといけない。

 

static変数に格納して渡す

static変数はオブジェクトではなくクラス側が持っている変数であり、プロセス内で一意のものである。つまり(C言語における)グローバル変数である。ただ、static変数はfinal指定子を付けて定数として扱われることがほとんどなので、メソッド間の変数のやり取りという観点では、使われることはまあないだろう。

 

シングルトンなクラスのオブジェクトに格納して渡す

staticな変数と同様、プロセス内で一意のもので、グローバル変数(オブジェクト)である。こちらもstaticな変数と同様、メソッド間の変数の受け渡しという観点ではあまり使われない。これはJavaでは基本的にはグローバル変数を使わない方針であることによるだろう。ただ、離れたクラスのメソッド間で変数をやり取りしたい場合は、これを使うことになるだろう。(本来はこのようなクラス設定をすべきではないが)

 

他にもあるかもしれないが、とりあえず自分が知っているものを挙げてみた。