Điều đó có nghĩa là trình biên dịch sẽ kiểm tra xem liệu trình biên dịch có thể biên dịch cho tất cả các chi nhánh/dòng mã không?
Điều đó có nghĩa là trình biên dịch kiểm tra mọi câu lệnh có thể truy cập được.
Từ section 14.21 of the JLS:
Đó là một lỗi thời gian biên dịch nếu một tuyên bố không thể được thực hiện bởi vì nó là không thể truy cập.
Phần này được dành để giải thích chính xác từ "có thể truy cập". Ý tưởng là phải có một số đường dẫn thực hiện có thể từ đầu constructor, phương thức, initializer instance, hoặc initializer tĩnh có chứa câu lệnh cho chính câu lệnh đó. Phân tích tính đến cấu trúc của các câu lệnh.
Phần này sau đó ghi lại cách xác định khả năng hiển thị.
Đặc biệt, những điểm có liên quan trong trường hợp của bạn là:
Mỗi tuyên bố S khác trong một khối không có sản phẩm nào đó không phải là một khối chuyển đổi có thể truy cập khi và chỉ khi báo cáo kết quả trước S có thể hoàn thành bình thường.
A break
, continue
, return
hoặc throw
tuyên bố không thể hoàn thành bình thường.
Vì vậy, bạn "dòng 1" tuyên bố được đi trước bởi một tuyên bố (break;
) mà không thể hoàn toàn bình thường, và do đó nó không thể truy cập.
Nguồn
2013-08-19 07:08:19
Hãy xem tại địa chỉ: http://stackoverflow.com/questions/3795585/why-does-java-have-an- unreachable-statement-compiler-error – BobTheBuilder