Tôi có câu hỏi về thứ tự thực hiện các câu lệnh trong khối catch trong Java. khi tôi chạy lớp Test1 sau (xem bên dưới), tôi mong đợi có đầu ra là Hi !, sau đó là kết quả của e.printStackTrace(); tuyên bố, và sau đó Bye !. Tuy nhiên, tôi không bao giờ nhận được đơn đặt hàng này. Vui lòng xem các kết quả đầu ra mà tôi đã dán bên dưới.khối try-catch trong Java - câu lệnh thực hiện trong mã bắt
public class Test1 {
public static void calculate() {
try {
int h = 5/0;
} catch (ArithmeticException e) {
System.out.println("Hi!");
e.printStackTrace();
}
System.out.println("Bye!");
}
public static void main(String[] args) {
calculate();
}
}
Output1:
Hi! Bye! java.lang.ArithmeticException:/by zero at Test1.calculate(Test1.java:6) at Test1.main(Test1.java:15)
Output2:
java.lang.ArithmeticException:/by zero at Test1.calculate(Test1.java:6) at Test1.main(Test1.java:15) Hi! Bye!
Tôi có hai câu hỏi:
1.) Câu hỏi quan trọng hơn: Tại sao tôi luôn luôn có Hi! và tạm biệt! in luôn luôn sau cái khác, mặc dù mye.printStackTrace() trong mã là giữa chúng?
2.) Tại sao đôi khi tôi có đầu ra của câu lệnh e.printStackTrace() trước Hi !, và đôi khi sau khi tạm biệt! ? Tôi đã chạy chương trình nhiều lần và tôi không thể hiểu được trong hoàn cảnh nào tôi nhận được một bản in hoặc bản in khác.
Cảm ơn bạn.
Tôi đang sử dụng Java 6 và Eclipse (Ganymed).
Lưu ý rằng bạn có thể chỉ định luồng cho Throwable # printStackTrace(), ví dụ: e.printStackTrace (System.out) –