Bạn không thể làm điều này một cách tĩnh bởi vì không có sự phân biệt như vậy.
Bất kỳ ngoại lệ nào được xác định trong thư viện lớp chuẩn Java có thể được ném bởi ứng dụng hoặc mã thư viện của bên thứ ba. Trong một số trường hợp, đó là một ý tưởng xấu (hoặc thậm chí khủng khiếp) để ném một ngoại lệ tiêu chuẩn, nhưng ở những người khác, đó là điều được khuyến khích để làm.
Cách duy nhất để phân biệt giữa ngoại lệ được JVM đưa ra và mã ứng dụng là kiểm tra khung ngăn xếp từ ngoại lệ được ném để tìm ra lớp nào đã loại trừ ngoại lệ. (Nói đúng ra không nói cho bạn biết nơi ngoại lệ được ném ... nhưng nó đủ gần để cho rằng các trường hợp ngoại lệ gần như luôn được khởi tạo và ném vào cùng một tuyên bố.)
Nhưng ngay cả điều này cũng không phải là một điều đặc biệt hữu ích làm. Tôi có nghĩa là, sự khác biệt ngữ nghĩa giữa một ngoại lệ được ném bởi mã ứng dụng và thư viện lớp là gì? Nó chắc chắn không nói bất cứ điều gì về nguyên nhân gốc rễ của vấn đề.
Nguồn
2010-05-29 05:00:40
Ngoại lệ JVM Các trường hợp ngoại lệ hoặc lỗi đó là độc quyền hoặc được JVM ném một cách hợp lý nhất. Ngoại lệ có lập trình Những trường hợp ngoại lệ được ném rõ ràng bởi ứng dụng và/hoặc lập trình viên API. – Haxed
@Haxed: Vấn đề là lập trình viên rất rõ ràng có thể ném bất kỳ ngoại lệ nào (ngoại trừ AssertionError). Vì vậy, bạn không thể làm những gì bạn muốn làm. – NotMe
@Chris: AssertionError là Throwable, tôi chỉ làm rõ rằng nó không phải là một RuntimeException giống như những người khác. –