Nếu chúng ta nhìn vào Java standard §14.7, chúng ta thấy rằng báo cáo chưa có tiền tố nhãn, ví dụ:Java nhãn bất thường (? Có thể bug)
LabeledStatement:
Định danh: Báo cáo
Theo lý thuyết, nhãn có thể gắn nhãn bất kỳ câu lệnh thành công nào. Vì vậy, ví dụ, sau đây biên dịch cho phù hợp:
public class Test {
public static void main(String[] args) {
hello:
return;
}
}
trực giác, điều này cũng biên dịch:
public class Test {
int i;
public static void main(String[] args) {
Test t = new Test();
label:
t.i = 2;
}
}
Nhưng sau không không biên dịch:
public class Test {
public static void main(String[] args) {
oops:
int k = 3;
}
}
Mặc dù đây không (lưu ý các dấu ngoặc nhọn):
public class Test {
public static void main(String[] args) {
oops:
{
int k = 3;
}
}
}
Vì vậy, câu hỏi xoay quanh việc có khai báo hay không. Theo tiêu chuẩn (và online documentation):
Ngoài tuyên bố biểu thức, còn có hai loại câu lệnh khác: tuyên bố khai báo và lưu lượng điều khiển. Một tuyên bố khai báo khai báo một biến.
Tôi đã nhận thấy hành vi này trong Java 7 và 8 trên cả OSX lẫn Windows. Đây có phải là lỗi hay tôi hiểu nhầm tiêu chuẩn?
Thú vị. Trình biên dịch cung cấp thông báo lỗi nào? – Thilo