问题描述
搞不明白为什么会有这种exception。如果你写了一个runtime exception,然后在你的方法中throw这么一个exception。那么在方法级别是不会要求你在throws exception的。这样别人在调用你这个方法的时候也编译期是不知道你的方法中会抛出这个异常的,当在运行期抛出这个异常时会造成程序的终止。搞不明白为什么java会定义这种危险的东西。问题补充:两者的区别我也知道但是我说了 如果是调用别人jar包中的方法会抛出一个runtime exception,调用者是并不知道的,但是在运行期就会造成程序的崩溃。如何避免这个问题呢问题补充:前面写错了 应该是别人到代码里面会抛出一个runtime exception。但是我调用它方法的时候是无法知道代码中有非检查的异常抛出的。这个才是最郁闷的。
解决方案
引用如果你写了一个runtime exception,然后在你的方法中throw这么一个exception。 你不应该用RuntimeException的, 就算自己的代码抛了异常, 那抛的也应该是业务级别的异常[比如: 自定义一个异常来表示传递的值空或错误, 而不是一个NullPointerException ], 完全可以自定义一个其他业务级别的异常, 而不是Java底层的RuntimeException.所以: 上面的应该改成: 在代码里面catch了RuntimeException, 方法应该throw 一个 CustomBussinessException.假如在你调用的他人代码里面,别人throws了RuntimeException, 那你所能作的也只能是catch基类的Exception了. 你自己的代码再在finally里面清理现场.
解决方案二:
try{}catch(Exception ex){}你在调用别人的方法时候,可能会抛出RuntimeException,你可以通过try catch来捕捉呀.
解决方案三:
Java 提供了两种Exception 的模式,一种是执行的时候所产生的Exception (Runtime Exception),另外一种则是受控制的Exception (Checked Exception)。所有的Checked Exception 均从java.lang.Exception 继承而来,而Runtime Exception 则继承java.lang.RuntimeException 或java.lang.Error (实际上java.lang.RuntimeException 的上一层也是java.lang.Exception)。Checked Exception 中,并不表示这段程序码一定会收到CException,但它的用意在于提醒呼叫者,执行这个method 可能产生的意外,而使用者也必须要能针对这个意外做出相对应的处理方式。程序在执行的时候,也不见得会真的产生NullPointerException ,这种Exception 叫做runtime exception 也有人称为unchecked exception ,产生Runtime Exception 的method (在这个范例中是method2) 并不需要在宣告method 的时候定义它将会产生哪一种Exception 一般而言,Checked Exception 表示这个Exception 必须要被处理,也就是说程序设计者应该已经知道可能会收到某个Exception(因为要try catch住) ,所以程序设计者应该能针对这些不同的Checked Exception 做出不同的处理。 而Runtime Exception 通常会暗示着程序上的错误,这种错误会导致程序设计者无法处理,而造成程序无法继续执行下去。