java异常处理原则有哪些?

阳光 2021-03-25 20:51:21 java常见问答 9037

Java异常代码中我们使用异常的目的是异常提示信息来提示即出问题的原因,遇到异常代码,我们也是要尽快的处理,保证代码的正常运行,那java异常处理原则有哪些?下面我们就来给大家讲解一下java异常处理原则。

1.具体明确

具体明确指的是在抛出异常时需要针对具体问题来抛出异常,抛出的异常要足够具体详细;在捕获异常时需要对捕获的异常进行细分,这时会有多个catch语句块,这几个catch块中间泛化程度越低的异常需要越放在前面捕获,泛化程度高的异常捕获放在后面,这样的好处是如果出现异常可以近可能得明确异常的具体类型是什么。

例如 FileInputStream 的一个构造方法如下, 对file对象做检查后判断file是否有效,如果无效直接抛出FileNotFoundException,而不是IOException或者其他更宽泛的Exception。

public FileInputStream(File file) throws FileNotFoundException
{
    String name = (file != null ? file.getPath() : null);
    SecurityManager security = System.getSecurityManager();
    if (security != null)
    {
        security.checkRead(name);
    }
    if (name == null)
    {
        throw new NullPointerException();
    }
    if (file.isInvalid())
    {
        throw new FileNotFoundException("Invalid file path");
    }
    fd = new FileDescriptor();
    fd.attach(this);
    path = name;
    open(name);
}

2.提早抛出

提早抛出的基本目的还是为了防止问题扩散,这样出现异常的话排查起来会比较耗时,比较典型的一种情况是 NPE(NullPointerException),当某个参数对象为null时,如果不提早判断并抛出异常的话,这个null可能会藏的比较深,等到出现NPE时就需要往回追溯代码了。这样就给排查问题增加了难度。所以我们的处理原则是出现问题就及早抛出异常。

例如 上面FileInputStream 的构造方法,在使用前就对File 的path做了判断,如果为null 就及早的抛出NullPointerException,防止在后面open方法中传入一个null,从而简化了出现异常的情况,方便定位问题。

3.延迟捕获

延迟捕获说的是对异常的捕获和处理需要根据当前代码的能力来做,如果当前方法内无法对异常做处理,即使出现了检查异常也应该考虑将异常抛出给调用者做处理,如果调用者也无法处理理论上他也应该继续上抛,这样异常最终会在一个适当的位置被catch下来,而比起异常出现的位置,异常的捕获和处理是延迟了很多。但是也避免了不恰当的处理。

java异常处理原则就是具体明确、提早抛出以及延迟捕获这几种,对于异常的处理,大家可以遵守这三种原则,找出问题的所在及早解决问题,最后大家如果想要了解更多java入门知识,敬请关注奇Q工具网。

推荐阅读:

java和python先学哪个好?有什么区别?

java有哪些循环语句?java主要循环语句

ultraedit如何替换回车换行?如何使用正则表达式替换?