美文网首页
返回值与异常

返回值与异常

作者: supremecsp | 来源:发表于2021-01-07 00:23 被阅读0次

程序运行时异常可分为受检异常和非受检异常;

非受检异常可捕获也可以不捕获,一般用于就算捕获了也于事无补的情况,此时使得程序出错而结束。比如解析一段外部服务传递消息,此时消息格式出错,直接出现异常结束就行,无需使用try/catch和throws
受检异常为要捕获的异常。用于捕获这个异常后,在接下的某个阶段操作中能处理这个异常,或上层调用方需要感知这个异常

对于方法/函数抛出的异常有三种处理方案
1,吞掉,即为直接try/catch处理,用于调用方(上层)并不关心此异常
2,将 抛出的异常re-throw,调用方关心此异常,有一定的业务关联
3,将 抛出的异常重新包装后再re-throw,调用方关心这个异常但直接re-throw的话缺少背景,不能直接理解这个异常
总之,是否往上继续抛出,要看上层代码是否关心这个异常。关心就将它抛出,否则就直接吞掉。是否需要包装成新的异常抛出,看上层代码是否能理解这个异常、是否业务相关。

受检异常的缺点:
1,受检异常需要显式地在函数定义中声明。那函数的定义就会非常冗长,这就会影响代码的可读性,
2,编译器强制我们必须显示地捕获所有的受检异常,代码实现会比较繁琐。
3,受检异常的使用违反开闭原则。如果我们给某个函数新增一个受检异常,这个函数所在的函数调用链上的所有位于其之上的函数都需要做相应的代码修改,直到调用链中的某个函数将这个新增的异常 try-catch 处理掉为止。而新增非受检异常可以不改动调用链上的代码。我们可以灵活地选择在某个函数中集中处理,比如在 Spring 中的 AOP 切面中集中处理异常。

非受检异常的缺点:
1,非受检异常不需要显式地在函数定义中声明,那我们在使用函数的时候,就需要查看代码才能知道具体会抛出哪些异常。
2,非受检异常不需要强制捕获处理,那程序员就有可能漏掉一些本应该捕获处理的异常。
3,非受检异常对业务没受检异常那么贴切

函数出错选择返回null,返回空对象还是异常?
1,这个数据为null/空对象正不正常,不正常时抛出异常
例如:对于以 get、find、select、search、query 等单词开头的查找函数来说,数据不存在,并非一种异常情况,这是一种正常行为。所以,返回代表不存在语义的 NULL 值比返回异常更加合理。
2,若是明确表明没有数据可用则返回null,调用方若出现空指针异常属于非受检异常
3,返回值是null还是空对象取决于数据不存在时在业务上对下一步骤的影响,没有绝对孰优孰略之分
4,当返回值为0,-1,空对象的时候,最好在方法的注释给予返回值说明

相关文章

  • 返回值与异常

    程序运行时异常可分为受检异常和非受检异常; 非受检异常可捕获也可以不捕获,一般用于就算捕获了也于事无补的情况,此时...

  • Java异常淹没、返回值栈

    返回值栈,异常淹没 当Java程序的方法中有异常处理块的时候,执行引擎可能需要处理多了返回值,这时候,执行引擎会将...

  • Java设计RestCodeEnum枚举,实现接口统一格式返回

    1.接口返回值枚举定义 2.异常信息抛出返回值定义 3.接口统一返回参数定义 4.增加全局异常 5.实例

  • 异常

    BatchUpdateException批量更新时抛出。该异常保存了异常发生前每条更新命令的返回值。抛出该异常后,...

  • 记一个接口的切面及异常处理

    切面主要记录传参和返回值,代码如下: 异常处理:

  • 03.异常的抛出

    throws方式处理异常 A:throws使用:权限修饰符 返回值类型 方法名(形参列表) throws 异常类...

  • 15/4

    异常: 1.调用abort()函数:程序退出 2.使用返回值,当出现异常时返回false,主动终止程序 3.异常机...

  • 如何全局管理异常ExceptionHandler、Handler

    首先讲一下使用全局异常的好处,不需要定义很多的返回值,当业务出错的时候直接通过异常的返回值方式来返回给前端或者AP...

  • 2.5 为Expectation录制结果

    对于返回值非空的函数(包括构造器),可以通过result设置返回值或抛出异常,该值在replay阶段生效。 可以r...

  • Feature Callable

    Runnable缺陷 不能抛出异常,无返回值不能抛出异常,因为调用者thread类不是我们自己的类,抛出也无法处理...

网友评论

      本文标题:返回值与异常

      本文链接:https://www.haomeiwen.com/subject/koraoktx.html