try-catch-finally 中那个部分可以省略?

catch 和 finally可以省略其中一个,但必须保留其中一个。try 只适合处理运行时异常,try+catch 适合处理运行时异常+普通异常。也就是说,如果你只用 try 去处理普通异常却不加以 catch 处理,编译是通不过的,因为编译器硬性规定,普通异常如果选择捕获,则必须用 catch 显示声明以便进一步处理。而运行时异常在编译时没有如此规定,所以 catch 可以省略,你加上 catch 编译器也觉得无可厚非。

tomorrow进行回复 取消回复

后才能评论

评论(5)

  • 一蓑烟雨 普通 2022-09-28 2:09 下午

    结论:catch 和 finally可以省略其中一个;
    运行时异常是非受检异常,普通异常是受检异常;
    运行时异常:try+catch/finally
    普通异常:try+catch(+finally),因为普通异常必须用catch显示声明进一步处理,否则编译器不通过。

  • A你还不傻 普通 2022-04-28 11:14 上午

    懵了。看到评论

  • mpweixin用户 普通 2022-03-21 11:05 上午

    受检异常和非受检异常也就是运行时异常和普通异常

    • mpweixin用户 普通 @ mpweixin用户 2022-08-13 9:35 下午

      对应错了,非受检异常是运行时异常,受检异常是普通异常,运行时异常默认是可以将异常throws的,因此对非受检异常catch可以省略

  • tomorrow 2021-07-02 4:49 下午

    不管受检异常还是非受检异常,finally 才是可以省略的;非受检异常,catch可以省略