Java の catch ブロック内のステートメントの実行順序について質問があります。次のクラス Test1 (以下を参照) を実行すると、最初に Hi! が出力され、次に e.printStackTrace(); の結果が出力されると予想されます。ステートメント、そしてさようなら!しかし、私はこの注文を決して受けません。以下に貼り付けた出力を見てください。
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();
}
}
出力 1:
やあ! さよなら! java.lang.ArithmeticException: / by zero Test1.calculate (Test1.java:6) で Test1.main (Test1.java:15) で
出力 2:
java.lang.ArithmeticException: / by zero Test1.calculate (Test1.java:6) で Test1.main (Test1.java:15) で やあ! さよなら!
2 つの質問があります。
1.) より重要な質問: なぜ私はいつもこんにちは! そしてさようなら!コード内の mye.printStackTrace() がそれらの間にあるにもかかわらず、常に次々に印刷されますか?
2.) Hi! の前に e.printStackTrace() ステートメントの出力が表示されることがあるのはなぜですか。? プログラムを何度も実行しましたが、どのような状況でどちらの印刷が行われるのか理解できません。
ありがとうございました。
Java 6 と Eclipse (Ganymed) を使用しています。