LoginSignup
2
2

More than 5 years have passed since last update.

Java ローカルクラス

Posted at

ローカルクラス

ローカルクラスとは、あるクラスのメソッド内に定義したクラスのこと。

ルール

アクセス修飾子使用不可(private, protected,public)
static修飾子使用不可
abstract, final修飾子は使用可
外側クラスのメンバにアクセス可

※ローカルクラスから外側クラスのメソッドの引数およびローカル変数にアクセスする際には各変数が定数(final修飾子付き)でなければならない。(ただし、SE8からはローカルクラスからよびだされた時点でfinal修飾子が暗黙的に付与される。)

以下のコードで外側クラスのメソッドの引数、ローカル変数が定数でないとアクセスできない様子、自動的に定数にされている様子が確認できる。
また、外側クラスのインスタンス変数は定数でなくてもローカルクラスからアクセスできていることがわかる。

class OuterA{ //外側クラス
    private static int a = 1;
    private int b =2;

    void methodOuter(final int c, int d) {
        final int e =5; int f =6;
        //c=10; //cはfinalがついているから定数。再代入不可。
        //d=10; //この時点では、定数ではないから代入できる。
        //しかし、これをするとdが変数であることが確定するので、ローカルクラスからの呼び出しができなくなる

        //d++; //変数宣言時点でfinalがつくので、この変更をするとローカルクラスから呼べなくなる
        //f++;
        class A{ //ローカルクラス
            void method() {
                System.out.print(a+" ");
                System.out.print(b+" ");
                System.out.print(c+" ");
                System.out.print(d+" ");
                System.out.print(e+" ");
                System.out.print(f+" \n"); //「\n」は改行
                a++;
                b++;
                //c++;
                //d++;
                //e++;
                //f++;
                //c,d,e,fは定数になっているが、a,bは定数じゃない
                System.out.print(a+" "+b);
            }
        }
        new A().method();
    }
}



public class Test3 {

    public static void main(String[] args) {
        OuterA o = new OuterA();
        o.methodOuter(3,4);
    }
}

出力結果

1 2 3 4 5 6 
2 3 

ポイント

①インスタンス変数は定数でなくてもローカルクラスから呼び出すことができる。

②メソッドの引数とローカル変数をローカルクラスから呼び出すときは定数(final修飾子付き)でなくてはいけない。(付いていないときは暗黙的に付与される)

③暗黙的にfinal修飾子が付与されるときは、変数の宣言時点で行われるので、その変数をローカルクラスから呼び出すときは、ローカルクラスから変数を呼び出す(ローカルクラスで変数を使用する)以前であっても値の再代入してはいけない。

④変数宣言後に値を変更(代入やインクリメントなど)をした時点で変数であることが確定し、ローカルクラスからの呼び出しはできなくなる。

参考文献

山本道子『Javaプログラマ Gold SE8』翔泳社.

2
2
0

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
2
2