JLS 8.1.3は、内部クラスでは宣言されていないがクラスで使用されている変数に関するルールを提供します。内部クラス内で最終的ではないローカル変数を使用する
任意のローカル変数、仮パラメータ、または使用される例外パラメータが、 が内部クラス内で宣言されていないが、最終的な宣言または有効最終 (§4.12.4)、またはコンパイル時エラーがどこに発生しなければならないのいずれかで 使用が試みられます。
例:
class A{
void baz(){
int i = 0;
class Bar{ int j = i; }
}
public static void main(String[] args){
}
}
はなぜコードがコンパイルされたのですか?私たちはそこで宣言されていない内部クラスの非最終ローカル変数を使用しました。