问题描述
public class UsingExceptions {
public static void main(String[] args) {
try{
throwException();
}
catch(Exception e){
System.err.println("Exception handled in main");
}
doesNotthrowException();
}
public static void throwException()throws Exception{
try{
System.out.println("Method throwException");
throw new Exception();
}
catch(Exception e){
System.err.println("Exception Handled in Method throwExceptioin ");
throw e;
}
finally{
System.err.println("Finally executed in method throwException");
}
}
public static void doesNotthrowException(){
try{
System.out.println("Method doesNotthrowException");
}
catch(Exception e){
System.err.println("Exception handled in method doesNotthrowException");
}
finally{
System.out.println("finally executed in doesNotthrowException");
}
System.out.println("end of method doesNotthrowException");
}
}
我的 IDE 正在输出:
- 方法throwException
- 方法 throwExceptioin 中处理的异常
- 方法doesNotthrowException
- 最终在方法 throwException 中执行
- main 处理异常
- 最终在doesNotthrowException中执行
- doesNotthrowException 方法结束
但我期待:
- 方法throwException
- 方法 throwException 中处理的异常
- 最终在throwException中执行
- main 处理异常
- 方法doesNotthrowException
- 最终在doesNotthrowException中执行
- 方法结束doesNotthrowException
我的问题在哪里?
解决方法
代码有多个输出。
用eclipse编译:
Exception Handled in Method throwExceptioin
Method throwException
Finally executed in method throwException
Exception handled in main
Method doesNotThrowException
finally executed in doesNotThrowException
end of method doesNotThrowException
通过 Windows cmd.exe 使用标准 javac 编译器进行编译:
Method throwException
Exception Handled in Method throwExceptioin
Finally executed in method throwException
Exception handled in main
Method doesNotThrowException
finally executed in doesNotThrowException
end of method doesNotThrowException
使用 IntelliJ IDEA 编译:
Method throwException
Method doesNotThrowException
finally executed in doesNotThrowException
end of method doesNotThrowException
Exception Handled in Method throwExceptioin
Finally executed in method throwException
Exception handled in main
作为用户 Sorin 状态。 IDE 以不同的方式处理打印到控制台。 IntelliJ IDEA 首先输出所有的 System.out.println()
,然后是所有的 System.err.println()
。标准的 Java 编译器以预期的顺序将它们线程化,并以某种奇怪的顺序进行 Eclipse。
如果您希望在每个 IDE 中使用您所期望的代码,则必须仅使用 System.out.println()
或仅使用 System.err.println()
。你也可以看看this answer