public class UsingExceptions {
public static void main ( String[] args ){
try {
throwException();
}
catch ( Exception e ){
System.err.println("Exception handled in main_4");
}
doesNotThrowException();
} public static void throwException() throws Exception {
try {
System.out.println("Method throwException_1");
throw new Exception();
}
catch ( Exception e ){
System.err.println("Exception handled in Method throwException_2");
throw e;
}
finally {
System.err.println("Finally executed in Method throwException_3.....");
}
} public static void doesNotThrowException(){
try {
System.out.println("Method doesNotThrowException_5");
}
catch ( Exception e ){
System.err.println( e );
}
finally {
System.err.println("Finally executed in Method doesNotThrowException_6");
}
System.out.println("End of method doesNotThrowException_7......");
}
}
有时顺序如下:
Method throwException_1
Exception handled in Method throwException_2
Finally executed in Method throwException_3.....
Exception handled in main_4
Method doesNotThrowException_5
End of method doesNotThrowException_7......
Finally executed in Method doesNotThrowException_6有时顺序如下:
Method throwException_1
Exception handled in Method throwException_2
Finally executed in Method throwException_3.....
Exception handled in main_4
Method doesNotThrowException_5
Finally executed in Method doesNotThrowException_6
End of method doesNotThrowException_7......有时顺序如下:
Method throwException_1
Exception handled in Method throwException_2
Finally executed in Method throwException_3.....
Exception handled in main_4
Finally executed in Method doesNotThrowException_6
Method doesNotThrowException_5
End of method doesNotThrowException_7......

解决方案 »

  1.   

    第一次执行结果是第三个
    Method throwException_1
    Exception handled in Method throwException_2
    Finally executed in Method throwException_3.....
    Exception handled in main_4
    Finally executed in Method doesNotThrowException_6
    Method doesNotThrowException_5
    End of method doesNotThrowException_7......
      

  2.   

    我在自己上都是一个顺序
    Method throwException_1
    Exception handled in Method throwException_2
    Finally executed in Method throwException_3.....
    Exception handled in main_4
    Method doesNotThrowException_5
    Finally executed in Method doesNotThrowException_6
    End of method doesNotThrowException_7......
      

  3.   

    我在Ultraedit上运行javac后连续多次运行Java,得到不同的结果,搞不明白
      

  4.   

    看代码,感觉应该一直是:
    Method throwException_1
    Exception handled in Method throwException_2
    Finally executed in Method throwException_3.....
    Exception handled in main_4
    Method doesNotThrowException_5
    Finally executed in Method doesNotThrowException_6
    End of method doesNotThrowException_7......
      

  5.   

    我觉得应该是你工具的问题,跟程序没关系。你再dos里运行试试
      

  6.   

    在DOS中运行了不下10次,结果都一样,是从1到7看来问题是由于使用Ultraedit的造成;
    我在其中工具栏中配置了 java %n 语句快捷键用来测试程序。有谁能再讲透彻一点吗?
      

  7.   

    问题是由于 system.out 和 system.err 引起的。这个两个不是一个‘文件设备’,显示在屏幕上是用不同的内部通道,可以理解成类似不同速度的线程。 所以,虽然程序执行的顺序始终是一样的,但是打印出来的结果却不同。观察程序,用 err 打印出来的,顺序每次都是 2,3,4,6
    用 out 打印出来的,顺序每次都是 1,5,7
    所谓每次不同的顺序,只是这两个序列的依次混合。如果程序全部用 out ,或者全部用 err, 那么打印出来的顺序就每次都一样了。至于有的机器每次程序输出一致,是因为有的机器 out 和 err 实际上是同一个文件设备。这个和JVM的本地代码有关。 
      

  8.   

    我将程序中全部err按照9楼的方法更换为out,测试后所有的顺序确实是一致为1-7但为何原程序(同时包含err与out)在DOS多次执行的顺序亦是一致为1-7 ????同一台机器中的JVM应该是一致的问题是在JVM,还是在工具Ultraedit??
      

  9.   

    这个就不好说了,说不定Ultraedit 和在DOS调用的JVM不一样。 可以试试把JVM的环境参数打印出来看看;你也够强的,4点了还在。 我是加班没办法