tôi đã chạy một số thí nghiệm đơn giản như thế này:Việc ném một ngoại lệ có thay đổi trạng thái của nó không?
public static void main(String[] args) {
try {
NullPointerException n = new NullPointerException();
System.out.println(Lists.newArrayList(n.getStackTrace()));
n.printStackTrace();
System.out.println(Lists.newArrayList(n.getStackTrace()));
throw n;
} catch (NullPointerException e) {
e.printStackTrace();
System.out.println(Lists.newArrayList(e.getStackTrace()));
}
}
và nhận được kết quả như thế này:
java.lang.NullPointerException
at MyTest.main(MyTest.java:231)
java.lang.NullPointerException
at MyTest.main(MyTest.java:231)
[MyTest.main(AbstractScannerTest.java:231)]
[MyTest.main(AbstractScannerTest.java:231)]
[MyTest.main(AbstractScannerTest.java:231)]
Nhưng tôi tự hỏi, nếu bất cứ điều gì được thực hiện với một ngoại lệ khi nó được ném. Đây là một câu hỏi chủ yếu về mặt học thuật, mặc dù nó có thể có liên quan trong một số trường hợp nhất định nếu một ngoại lệ là một phần của một API và có thể hoặc có thể không bị ném khi được cung cấp cho việc triển khai.
Để có một dấu vết ngăn xếp đầy đủ và có thể thêm một chút thông tin khi in lỗi, bạn chỉ có thể thực hiện 'System.out.println (e);' hoặc 'System.out.println (" báo cáo lỗi ", e); 'và nó sẽ in toàn bộ stacktrace. Chỉ cần một đầu lên. – sparks
'printStackTrace' sử dụng' System.err' không phải 'System.out'. Để làm cho kết quả của bạn trông như mong đợi, sử dụng 'printStacktrace (System.out)'. –
Lưu ý rằng, trong Java, dấu vết ngăn xếp ngoại lệ được thực hiện khi ngoại lệ được tạo ra, không phải khi nó được tạo ra. –