2 - 7 : メソッド内クラスからの変数アクセス

メソッド内のインナークラスからメソッド内の変数にアクセスする場合は final指定された変数しかアクセスできない。その理由としては、インナークラスを宣言したメソッドが終了してからインナークラス内のメソッドが実行されることがある。そのときにインナークラス宣戦メソッドのローカル非final変数は無効になっているため、確実に存在するfinal変数のみアクセス可能9となっている。

[InnerVarAccess.java]
/**
* メソッド内クラスからの変数アクセス テストクラス
*/
public class InnerVarAccess {

public static void main(String[] args) {
InnerVarAccess var = new InnerVarAccess();
var.varCheck(1,2);
}

void varCheck(int nonFinalA, final int finalA) {
int nonFinalB;
final int finalB;

class Inner {
void InnerHoge() {
int a;
a = nonFinalA; // コンパイルエラー(nonFinalAが無効かもしれない)
a = finalA;
a = nonFinalB; // コンパイルエラー(nonFinalBが無効かもしれない)
a = finalB;
}
}
}
}