java什么情况下需要捕获runtimeException

java运行时异常比如:
Java.lang.ClassCastException
Java.lang.IndexOutOfBoundsException
Java.lang.NullPointerException

都是可以避免的,比如针对上面3个:class做类型判断,数组长度判断,做非空判断。

那么问题来了:什么情况下需要捕获runtimeException

阅读 9.6k
3 个回答

从规范上来说,运行时异常是未检查异常,意味着这类异常意味着越界情况。这在框架或者工具库提供接口时有一个有效的方式去提醒使用者在调用接口前检查参数的合法性。

另外是个人用法:

运行时异常是很宽松的,因为不用在方法签名里声明,那么有时候不想一层一层全都 catch 或者层层 throws 时,你可以抛运行时异常,然后在你觉得合适的地方去捕获并处理它。

同样你也可以把一个 ExceptionRuntimeException 包一层把它隐式得向上传递,这样你又可以让代码不会看起来太多 try-catch了。

当然这种做法不推荐,因为没有方法签名这种异常如果没被捕获可能过段时间你都忘了它是写在哪里的了,这是不安全的。

另外有时候你不得不抛一个运行时异常来结束流程,比如 Runnable.run() 这种已经声明好的接口,不允许你抛异常,但你有时候又想放开这个限制,那就用运行时异常包裹异常抛出来,然后给线程设置监听器(UncaughtExceptionHandler)去处理它。

这里有一些很好的答案

https://stackoverflow.com/que...

简单地说就是

  1. 能处理就拦截;
  2. 不能处理也要优雅地通知用户和开发者;
  3. 拦截并忽略是最差劲的做法。

java 的异常分两大类,RuntimeException 及其子类不要求捕捉,而其它的异常要求捕捉随便举几个 RuntimeException 子异常,有:数组越界异常、空指针异常、0作除数异常非RuntimeException 异常有:Socket异常、IO异常等对比一下我们就会发现,RuntimeException 是在程序中可以完全避免的,比如数组越界异常,只要我在程序里作个判断,如果要访问的数组元素下标和数组的长度作一下比较就知道会不会越界,再比如空指针异常,如果在访问对象时判断一下对象的变量是否为空就可以了。而非RuntimeException 则是程序无法避免的,比如IO异常,你的程序正在读一个文件,而这个文件所在磁盘出现了坏道,这就必然会引发IOException,这是不是靠编程高手编写完美的程序就可以法避免得了的,程序所能做的只有出现异常之后怎么处理的问题。

所以,什么情况下需要捕获runtimeException?

1.正式运行之前先去调试,检查。发现问题及时找出问题并做相关处理

2.如果事先知道可能会出现什么情况,就可以去事先处理


3.如果不能处理,或者不能出现这么那么的操作,那么你可以去通知用户

总之,

有些错误可能一开始你也没有发现,在用户使用一段时间后,发现问题,那么你需要做相应的处理







撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题