Javaの変数のスコープとは?使える範囲をメソッドとブロックで理解する

本記事は、Schooの「Java入門 初級【2026年版】」第6回「メソッド」を学ぶ前後に、Javaの変数のスコープを整理したい方向けのステップアップ学習記事です。
ただし、Schooを受講していない方でも、メソッド、引数、ローカル変数の基本を学んだあとに読み進められる内容にしています。
Schoo コースページ:Java入門 初級【2026年版】
スコープとは、変数を使える範囲のことです。Javaでは、変数をどこで宣言したかによって、その変数を使える場所が決まります。
スコープは変数を使える範囲
次の例では、calculateDiscount メソッドの中で discount を宣言しています。この変数は、calculateDiscount メソッドの中では使えますが、別のメソッドからは直接使えません。
public static int calculateDiscount(int total) {
int discount = 0;
return discount;
}
public static void printResult() {
System.out.println(discount); // エラー
}
printResult メソッドの中には discount が宣言されていないため、Javaはその変数を見つけられません。メソッドが違えば、同じクラスの中に書いていても、ローカル変数をそのまま共有できるわけではありません。
discount を宣言した calculateDiscount メソッドの中です。この中では discount を使えます。discount は宣言されていないため、直接使えません。ブロックの中で宣言した変数は外で使えない
if や for の { } の中で宣言した変数は、そのブロックの中だけで使えます。
public static void printJudge(int score) {
if (score >= 80) {
String result = "合格";
System.out.println(result);
}
System.out.println(result); // エラー
}
result は if の中で宣言されています。そのため、if の } を出たあとでは使えません。
result は if の { } の中で宣言されています。そのため、} を出たあとでは使えません。
{ } で囲まれた範囲をブロックと呼びます。ブロックの中で宣言した変数は、そのブロックの外からは見えません。外でも使いたい値は外側で宣言する
if の中で決めた値を、if の後でも使いたい場合は、変数を if の外側で宣言します。
public static void printJudge(int score) {
String result;
if (score >= 80) {
result = "合格";
} else {
result = "再提出";
}
System.out.println(result);
}
この例では、result を if より外側で宣言しています。そのため、if の中で値を入れたあと、最後の System.out.println(result); でも使えます。
result を if より外側で宣言しているため、if の後でも使えます。
for文の変数にもスコープがある
for 文で宣言したカウンタ変数も、基本的には for 文の中だけで使います。
for (int i = 0; i < 3; i++) {
System.out.println(i);
}
System.out.println(i); // エラー
int i = 0 は for 文の中で宣言されています。そのため、for 文が終わったあとに i を使うことはできません。
引数、ローカル変数、フィールドの使える範囲
メソッドの引数は、そのメソッドの中で使えます。ローカル変数は、宣言したメソッドやブロックの中で使えます。フィールドは、オブジェクトが持つ値なので、同じオブジェクトのメソッドから参照できます。
public class Student {
String name; // フィールド
public void printMessage(int score) { // score は引数
String result = "点数:" + score; // result はローカル変数
System.out.println(name + "さんの" + result);
}
}
name、score、result はすべて変数ですが、使える範囲が違います。コードを読むときは、「この変数はどこで宣言されたか」を見ると、使える範囲を判断しやすくなります。
確認問題
calculateDiscountメソッドの中で宣言したdiscountは、別のメソッドから直接使えますか。ifの{ }の中で宣言したresultを、ifの外で使うとどうなりますか。ifの中で決めた値をifの後でも使いたい場合、変数はどこで宣言するとよいですか。
演習後の確認:こちらのページを使って、自分で考えた内容を見直せます。
あわせて読みたい関連記事
まとめ
スコープは、変数を使える範囲のことです。メソッドの中で宣言した変数はそのメソッドの中だけ、if や for のブロック内で宣言した変数はそのブロックの中だけで使えます。変数をどこで宣言するかを意識すると、エラーの原因を見つけやすくなり、読みやすいコードを書きやすくなります。