【发布时间】:2011-05-04 02:20:00
【问题描述】:
我正在编写一个使用java.net.URLDecoder.decode(String value, String encoding) 的程序。显然,这个方法可能会抛出一个UnsupportedEncodingException,我得到了。但我只是将“UTF-8”作为编码传递。它不会抛出异常。
我可以用一个什么都不做的 catch 块来包围这个该死的东西,但是在任何异常情况下 确实 导致异常被抛出,我不会发现它。我也不想在我的程序顶部创建一个 throws UnsupportedEncodingException 的大链。
我可以在这里做什么?为什么我必须处理一些异常,而其他(例如IllegalArgumentException、NullPointerException)我可以忽略?
【问题讨论】:
-
附带说明,您可以忽略的异常通常是您应该忽略的异常,直到您用于日志记录和优雅终止的全部处理程序。 IllegalArgumentException 和 NullPointerException 等使用异常表示错误和不稳定的程序状态。另一方面,受检异常类型不一定是致命的,因此受检异常背后的哲学要求您明确阐明您希望如何处理它(即使这意味着断言失败),或者您是否将该责任留给调用者。
-
@DanBryant:这是经典案例之一。 99.99% 的调用者在这里传递一个常量。异常真的不可能发生。