如何在Java中表示try-catch的输出顺序?
我发现一个有趣的例子:如何在Java中表示try-catch的输出顺序?,java,try-catch,Java,Try Catch,我发现一个有趣的例子: public static void main(String[] args) { int a =0; int b = 2; int c = 10; int d = 0; int e = 0; try { d=c/b; e=b/a; }catch (ArithmeticException ex){
public static void main(String[] args) {
int a =0;
int b = 2;
int c = 10;
int d = 0;
int e = 0;
try {
d=c/b;
e=b/a;
}catch (ArithmeticException ex){
System.out.println("TEST");
ex.printStackTrace();
}
System.out.println(d);
}
将有两种打印顺序:
一,
二,
但是当我注释行System.out.println(“TEST”)代码>,将只有一个订单:
5
java.lang.ArithmeticException: / by zero
at Chapter10.Test2.main(Test2.java:14)
我想问一下try-catch块的执行顺序是什么?为什么System.out.println(d)当异常发生时,在catch
块之前执行的代码>默认情况下,exception.printStackTrace()
使用System.err
作为PrintStream
,这与System.out
不同。因此,代码执行的顺序是:
System.out.println("TEST");
ex.printStackTrace();
System.out.println(d);
可能与实际输出不一致。当然,5
将在测试后打印。可能会打印异常消息:
测试前
- 在
测试
和5之间
- 在
5之后
printStackTrace
写入System.err
,这是一个与System.out
不同的流。将代码更改为ex.printStackTrace(System.out)
以获得一致的输出
public static void main(String[] args) {
int a =0;
int b = 2;
int c = 10;
int d = 0;
int e = 0;
try {
d=c/b;
e=b/a;
}catch (ArithmeticException ex){
System.out.println("TEST");
ex.printStackTrace(System.out);
}
System.out.println(d);
}
将屈服
试验
java.lang.arithmetricException:/by零
在第10章Test2.main(Test2.java:18)
五,
正如所料。您需要使用“System.out”而不是“printStackTrace()”别忘了System.out
和System.err
是不同的输出,可能在不同的时间刷新。@down选民请告诉我哪里出错:)
System.out.println("TEST");
ex.printStackTrace();
System.out.println(d);
public static void main(String[] args) {
int a =0;
int b = 2;
int c = 10;
int d = 0;
int e = 0;
try {
d=c/b;
e=b/a;
}catch (ArithmeticException ex){
System.out.println("TEST");
ex.printStackTrace(System.out);
}
System.out.println(d);
}