本帖最后由 怀念黑海岸 于 2014-8-3 16:05 编辑
有区别的,你首先就得弄明白为什么运行时异常就可以通过编译,而普通异常不行,即使你抛出这个运行时异常出去,调用抛出这个异常的方法的地方都不需要对这个可能出现的异常进行预防处理,看好是可能出现,为什么是可能出现而不是一定出现,原因很简单,举个简单例子:你调用了一个方法,sleep(),并接受一个参数的传入,传入参数就是sleep方法睡的时间,但是如果你传入的是一个负数了,你的sleep方法该怎么办:你们这些调用者还能不能让我快乐的运行了。对了,此时导致问题的发生不是因为你这个sleep方法出错了,而是因为调用者的错误调用导致的,那你能做的就是马上停止程序并修改程序,因为误传参数已经影响到程序功能的正常运行了。而纵观那些运行时异常都是在使用他们的时候因使用不当才导致异常产生,所以能通过编译,而不需要抛出异常进行处理。因为这段功能代码本身就没有错,那虚拟机在对其进行编译时为什么不让它通过呢?但是你处理了这些运行时异常的话程序还能继续执行,你觉得这样子好吗?错误的使用了这些异常产生的地方还导致非预期的运行结果产生,你程序即使运行下去了还有意思吗?
补充一点:当我们在书写自己的异常时,究竟是继承Exception呢还是RuntimeException,就是取决于上面的原因。
|