java 是否有类似于.net中的unhandledexception机制。当有未预料异常发生的时候,允许开发人员定制应用程序报告错误的行为。

解决方案 »

  1.   

    比如:一个方法f()可能会抛出IOException,SQLException还有可能抛出其它的异常,那么在声明这个方法的时候就可以这样:public void f() throws IOException, SQLException, Exception {
      // 实际抛出异常的代码
    }调用这个方法时,先用try来建立异常侦测区域:try {
      f();
    }再用catch来分别给出任何一种异常被抛出时要进行的处理:catch(IOException ioe) {
      // IO异常被抛出时要进行的处理
    }
    catch(SQLException sqle) {
      // SQL异常被抛出时要进行的处理
    }
    catch(Exception e) {
      // 其它异常被抛出时要进行的处理
    }
      

  2.   

    我是说的应用程序级别的。比如说在.net中就是如果程序中有某个异常未被客户代码也就是我们写的代码捕获。。那么cls就会抛出一个unhandledexception .然后windows就会弹出一个窗口要求是否发送错误报告给micosoft.当然这个报告方式是可以定制的,你可以在你的程序中把这个未预料的异常写入日志。或则发送到你自己的错误日志服务器等等。。需要说明的是这个异常并不是我们在程序的最顶端包扩一个catch everything.当然这样可以解决部份问题,我想了解的是java是否内部提供了一个相应的机制去处理这个问题。就好比.net中你可以去检查appDomain的unhandledexception事件就可以截获所有该应用程序域中的未处理异常。java的classloader是否也有同样的机制了?
      

  3.   

    不好意思,误解楼主的意思了。对.Net不太了解,不过我猜想JAVA中大概不需要这样的机制。因为JAVA中不存在“unhandled exception”,所有的异常都要处理的,如果不处理,那么要么不能编译(对于checked exception来说),要么将在运行时导致程序终止(对于runtime exception来说)。
      

  4.   

    对java 来说所有异常似乎都必须被捕获。不然就不能够编译(checked  exception? 是否就是 类似于void fun() throw somethingexception)虽然这对严格实施方法约束是有好处的,但是这似乎不符合异常的本质含义。。很多时候。。有些异常调用方是无法准确判断产生原因的。这样的异常捕获是否有意义了?在catch块中怎样去处理失败情况了?是让程序继续还是中断程序。。?
      

  5.   

    似乎JAVA没有。
    如果出现楼主说的那种情况 JAVA运行时会弹出崩溃的错误信息 , 但程序无法控制。
      

  6.   

    似乎JAVA没有。
    如果出现楼主说的那种情况 JAVA运行时会弹出崩溃的错误信息 , 但程序无法控制。