class ThrowNull {
public static void main(String[] args) {
throw null;
}
}
Chúng tôi biết rằng quy tắc để ném là throw ThrowableInstance;
, trong đó ThrowableInstance
phải là một đối tượng thuộc loại Có thể ném hoặc một lớp con của Throwable.Tại sao "ném null" không tạo ra lỗi biên dịch trong Java?
Các loại đơn giản, chẳng hạn như int hoặc char, cũng như các lớp không thể ném, chẳng hạn như String và Object, không thể được sử dụng làm ngoại lệ. null
là một chữ Java đặc biệt đại diện cho một giá trị null.
Vậy tại sao throw null;
sẽ biên dịch mã này?
Tại sao nó dẫn đến lỗi biên dịch? – BoltClock
Mặc dù điều này không được đánh dấu là một vấn đề của Java Compiler tại thời điểm hiện tại (trừ khi đặc tả ngôn ngữ thay đổi tại một thời điểm nào đó trong tương lai), rõ ràng là một ứng cử viên cho các trình kiểm tra tĩnh như "Sonar" để root và chỉ ra nhà phát triển. Có lẽ nhà phát triển muốn viết "return null" ... –
Chúng ta biết rằng quy tắc là kết quả của việc gọi 'String a() {return null}' phải là một đối tượng của lớp (sub) hoặc String. Các lớp đơn giản, như Throwable hoặc BigInteger không thể được sử dụng như Strings. Null là một chữ Java đặc biệt đại diện cho một giá trị null.Vậy tại sao 'return null' lại không tạo ra bất kỳ lỗi thời gian biên dịch nào ????? !!!! Tôi đang vạch trần các tiêu chuẩn kép của bạn ở đây. Tại sao bạn phàn nàn về 'ném null' nhưng không phải về' trả về null'? Tôi không thể upvote câu hỏi của bạn do đó. Nó quá địa phương hóa bằng các tiêu chuẩn kép. – Val