JLS 8.1.3 fornisce la regola relativa alle variabili che non sono dichiarate in una classe interna ma utilizzate nella classe.Utilizzo di una variabile locale non finale all'interno di una classe interna
Qualsiasi variabile locale, parametro formale, o il parametro eccezioni utilizzato ma non dichiarate in una classe interna devono essere dichiarati finale o essere efficacemente finale (§4.12.4), o di un errore di compilazione si verifica quando si tenta l'uso di .
Un esempio:
class A{
void baz(){
int i = 0;
class Bar{ int j = i; }
}
public static void main(String[] args){
}
}
Perché il codice compilato? Abbiamo usato la variabile locale non finale nella classe interna che non è stata dichiarata lì.