0
1

More than 3 years have passed since last update.

Java 変数のスコープ

Last updated at Posted at 2020-05-11

本記事の目的

Javaを勉強中で、勉強したことをアウトプットして知識の定着を図るために記事に起こしています。
学んだことを以下のように分けて記載していきます。

Javaの変数宣言・初期化・データ型(キャストとプロモーション)
・型変換
変数のスコープ
・文字列の操作(準備中)
・配列の操作(準備中)
・演算子(準備中)
・条件分岐(準備中)
・繰り返し処理(準備中)
・クラスについて(準備中)
・抽象クラス(準備中)
・インターフェース(準備中)
・カプセル化(準備中)
・モジュールについて(準備中)

変数のスコープ

変数のスコープとは、定義した変数の有効な範囲のことです。

ローカル変数

変数は基本的には宣言された場所の外からはアクセスできません。メソッド内で宣言された変数はそのメソッド内でのみ有効になります。これをローカル変数と言います。

test.java
public class Main {
    public static void main(String[] args) {

        int one = 1;

        {
            int two = 2;
        } 
        System.out.println(one + two);
    } 
}

上記のプログラムはエラーになります。innerのスコープ外でinnerを呼び出しているためです。
下記のようにするとプログラムは動作します。

test.java
public class Main {
    public static void main(String[] args) {

        int one = 1;
        {
            int two = 2;
            System.out.println(one + two);
        } 
    }
}

3

twoの内側でoneが呼び出されているためです。oneはtwoの内側でも使えます。

スコープ内で定義した変数はスコープを外れると使えない
また、下記のようにif文は{}の内側がスコープになるのでそこから外れるとif文内で定義した変数にはアクセスできません。

Main.java
class Main{
  public static void main(String args[]){
    int n = 5;

    if (n == 5) {
      String seikai = "nは5です";
    }
    System.out.println(seikai);
  }
}


実行結果

seikai cannot be resolved to a variable

以下のようにif内でseikaiを呼び出すと実行できます。

Main.java
class Main{
  public static void main(String args[]){
    int n = 5;

    if (n == 5) {
      String seikai = "nは5です";
      System.out.println(seikai);
    }
  }
}

実行結果

nは5です

for文についても同様です。

Main.java
class Main{
  public static void main(String args[]) {

    for (int i = 5; i <= 10; i++) {
      System.out.println(i);  //実行可
    }
    System.out.println(i);  //実行不可
  }
}

実行結果

i cannot be resolved to a variable

以下のようにfor内でiを呼び出すと実行できます。

Main.java
class Main{
  public static void main(String args[]) {

    for (int i = 5; i <= 10; i++) {
      System.out.println(i);
    }
  }
}

実行結果

5
6
7
8
9
10

メンバー変数(フィールド)

上記のようなローカル変数の他に、メンバー変数というものがあります。クラスのメソッド外で宣言された変数はメンバー変数(フィールド)と呼ばれます。メンバー変数はメソッドの外であっても同じクラス内であれば参照できます。
また、Javaは直接外部からデータを操作することを是としないため、別のクラスから変数を参照したい場合は修飾子を使用することによってこれを可能にします。

修飾子:クラスやそのメンバーがどこからアクセス可能であるかを決定するもの。private、protected、public等がある。

こちらの詳しい内容については後日また記載します。

0
1
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1