什么时候才能最好地利用这种类型的例外,如果陷入这种类型的捕获,它是否正确处理?
catch(Exception e)
Run Code Online (Sandbox Code Playgroud)
还是需要明确捕获?
catch(IllegalArgumentException e)
Run Code Online (Sandbox Code Playgroud)
Jon*_*eet 13
它会被第一个捕获 - 但是其他一些异常也会被捕获.你不应该抓到比你真正想要的更多.
第二个是更好的,如果你真的必须抓住它...但通常这表明调用代码中的错误.有时这是另一种方法,更高层次没有验证它的参数等.在一个理想的世界中,任何IllegalArgumentException
抛出的时间应该有一种方式让调用者在传入之前验证该值,或者调用一个版本,以非特殊方式失败(例如TryParse
.NET中的模式,在没有out
参数的情况下,Java中的模式更难实现).情况并非总是如此,但每当你得到一个IllegalArgumentException
值得检查的时候,你是否可以通过在调用方法之前检查值来避免它.
您不应该处理IllegalArgumentException.它的目的是通知开发人员,他已经使用错误的参数调用了一个方法.解决方案是,使用其他参数调用该方法.
如果你必须抓住它,你应该使用
catch(IllegalArgumentException e)
Run Code Online (Sandbox Code Playgroud)
您应该远离,catch (Exception)
因为这样您就会捕获所有可能的异常。如果你真的只期望并IllegalArgumentException
处理这种情况,你就不应该扩大这个范围;那么,最好为其他类型的异常添加更多的 catch 块。