try-catch-finally 中那个部分可以省略?
catch 和 finally可以省略其中一个,但必须保留其中一个。try 只适合处理运行时异常,try+catch 适合处理运行时异常+普通异常。也就是说,如果你只用 try 去处理普通异常却不加以 catch 处理,编译是通不过的,因为编译器硬性规定,普通异常如果选择捕获,则必须用 catch 显示声明以便进一步处理。而运行时异常在编译时没有如此规定,所以 catch 可以省略,你加上 catch 编译器也觉得无可厚非。
catch 和 finally可以省略其中一个,但必须保留其中一个。try 只适合处理运行时异常,try+catch 适合处理运行时异常+普通异常。也就是说,如果你只用 try 去处理普通异常却不加以 catch 处理,编译是通不过的,因为编译器硬性规定,普通异常如果选择捕获,则必须用 catch 显示声明以便进一步处理。而运行时异常在编译时没有如此规定,所以 catch 可以省略,你加上 catch 编译器也觉得无可厚非。
评论(5)
结论:catch 和 finally可以省略其中一个;
运行时异常是非受检异常,普通异常是受检异常;
运行时异常:try+catch/finally
普通异常:try+catch(+finally),因为普通异常必须用catch显示声明进一步处理,否则编译器不通过。
懵了。看到评论
受检异常和非受检异常也就是运行时异常和普通异常
对应错了,非受检异常是运行时异常,受检异常是普通异常,运行时异常默认是可以将异常throws的,因此对非受检异常catch可以省略
不管受检异常还是非受检异常,finally 才是可以省略的;非受检异常,catch可以省略