JLS 8.1.3 cho chúng ta quy tắc về các biến không được khai báo trong lớp bên trong mà được sử dụng trong lớp.Việc sử dụng biến cục bộ không phải cuối cùng trong một lớp bên trong
Bất kỳ biến địa phương, thông số chính thức, hoặc tham số ngoại lệ được sử dụng nhưng không khai báo trong một lớp bên phải hoặc được công bố chính thức hoặc được hiệu quả cuối cùng (§4.12.4), hoặc một lỗi thời gian biên dịch xảy ra ở đâu sử dụng .
Một ví dụ:
class A{
void baz(){
int i = 0;
class Bar{ int j = i; }
}
public static void main(String[] args){
}
}
Tại sao mã biên dịch? Chúng tôi đã sử dụng biến cục bộ không phải cuối cùng trong lớp bên trong mà không được khai báo trong đó.