你真的懂finally了吗?

366 阅读2分钟

finally

finally太强大了,不管发生什么错,有没有被捕获,它都会无条件执行。24岁的我,对男朋友的要求,只有一个,就是像finally就行。

用法

finally一定是和try一起用的,即使没有必须要捕获的异常,要是有无条件最终都需要执行的东西的时候,也建议用try{}finally{},把必须要执行的东西放finally里,即便程序发生不可被捕获的error(其实error也是可被throwable捕获的,只是捕获了也没办法解决,一般不捕获,只捕获Exception异常),finally也会执行,即便try里面有return代码,finally还是会执行。

finally就是打不还手,骂不还口的出气筒。它真的可以做到,任时间匆匆流去,我依然等你。finally可以作为最终归宿。

案列

像多线程里使用countdownlatch来使程序做暂时的等待,countdownlatch.countdown()就为了避免各种情况导致的程序卡死,应该放在finally执行;还有各种资源,流的释放,也必须放finally执行。

来说说异常!

异常的父类是throwable,它的子类有error,exception;

图片.png

error

如:StackOverflowError

Exception

其他Exception,受检查异常。

可以理解为错误,必须要开发者解决以后才能编译通过,解决的方法有两种,1:throw到上层,2,try-catch处理。

RunTimeException:运行时异常,又称不受检查异常,不受检查!不受检查!!不受检查!!!

重要的事情说三遍,因为不受检查,所以在代码中可能会有RunTimeException时Java编译检查时不会告诉你有这个异常,但是在实际运行代码时则会暴露出来,比如经典的1/0,空指针等。如果不处理也会被Java自己处理。