java中异常处理顺序问题!!!不同次执行结果不同

liuzenglan1990 2013-06-28 04:49:52
网上看到的一个程序,执行多次结果均不相同。
public class cc{
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 throwException");
throw e;
}
finally{
System.err.println("Finally is always executed");
}
}
public static void doesNotThrowException(){
try{
System.out.println("Method doesNotThrowException");
}
catch (Exception e){
System.err.println(e.toString());
}
finally{
System.err.println("Finally is always executed.");
}
}
}
结果一:
Method throwException
Exception handled in method throwException
Finally is always executed
Exception handled in main
Method doesNotThrowException
Finally is always executed!!!

结果二:
Method throwException
Method doesNotThrowException
Exception handled in method throwException
Finally is always executed
Exception handled in main
Finally is always executed!!!

结果三:

Method throwException
Exception handled in method throwException
Finally is always executed
Exception handled in main
Finally is always executed!!!
Method doesNotThrowException
结果N:
……
多个版本,为什么执行顺序会不同呢,我是在eclipse中编译执行的。
求高手解惑!!!
...全文
157 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
liuzenglan1990 2013-07-14
  • 打赏
  • 举报
回复
引用 5 楼 u011242265 的回复:
System.err.println只能在屏幕上实现打印,即使你重定向了也一样。重定向这个词,,就是其本意,就是本来往一个地方输出,你可以修改他的方向,让他把内容输出到其他地方。System.out 就是一个输出流,默认是往控制台输出。你可以重新设值他的输出方向,比如输出到文件里面。这个行为就叫重定向。 要想输出顺序不变,就把err改成out
标准输出和标准出错的一个区别是,标准输出往往是带缓存的,而标准出错没有缓存(默认设置,可以改)。所以如果你用标准出错打印出来的东西可以马上显示在屏幕,而标准输出打印出来的东西可能要再积累几个字符才能一起打印出来。如果你在应用中混用标准输出和标准出错就可能看到这个问题。 都是缓存的问题了
java小菜鸟s 2013-07-07
  • 打赏
  • 举报
回复
System.err.println只能在屏幕上实现打印,即使你重定向了也一样。重定向这个词,,就是其本意,就是本来往一个地方输出,你可以修改他的方向,让他把内容输出到其他地方。System.out 就是一个输出流,默认是往控制台输出。你可以重新设值他的输出方向,比如输出到文件里面。这个行为就叫重定向。 要想输出顺序不变,就把err改成out
liuzenglan1990 2013-07-04
  • 打赏
  • 举报
回复
使用DOS界面编译运行的话结果也是只有一种。不知道eclipse的内部运行机制如何,怎么会出现这样的结果呢?有大侠知道的没?
齐岳 2013-07-01
  • 打赏
  • 举报
回复
长见识了,接分
oh_Maxy 版主 2013-07-01
  • 打赏
  • 举报
回复
哈哈,挺有意思的。。
StevenLoveMaggie 2013-06-30
  • 打赏
  • 举报
回复
我在Editplus和JCreator里面试了试,结果只有一种;在Eclipse中确实有很多种,这可能跟Eclipse内部处理方式有关吧。

50,549

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧