[Java][Tips] Javaにおけるスコープ(変数の有効範囲)の判断

新社会人シーズンということで、Javaの基本文法なんかのTipsも載せてみたいと思います。

Javaに限らず変数を扱うプログラミングにおいて初学者が迷いやすいもののひとつが、変数のスコープ(有効範囲)ではないかと思います。

Javaの場合は、おおむね次のような法則で判断すれば大丈夫です。

「スコープはブロック({~}で囲まれた範囲)の内側である」
(逆に言うと「ブロックの外側はスコープではない」 )

例えば、メソッド内のローカル変数のスコープはメソッド内のみで、メソッド外はスコープではありませんが、これはメソッドを囲むブロックが境界線になっていると見ることができます。


public void sample() {

int a = 100;
a = 150; // スコープ内は有効

}


public void foobar() {

a = 200;
// ↑ブロックの外はスコープ外なので無効

}

try~catch節におけるtryブロック内で定義した変数は、tryブロックの外はスコープではありませんし、if文、for文、while文などのブロック内で定義した変数もまた同様です。


public void demo() {

int b = 100;
if (b > 100) {

    int c = 100;

}
c = 200;
// ↑ブロックの外はスコープ外なので無効

}


public void trycatch() {

try {
     int d = 100;
} catch(Exception ex) {
     System.out.println(d);
     // ↑ブロックの外はスコープ外なので無効
}

}