try+catch+finally
try+catch
如果在try语句中捕获到异常,那么进入catch语句块,最后执行catch语句块后面的代码;如果没有捕获到异常,那么catch语句块中的代码将不执行。直接执行catch语句块后的代码
try+catch+finally
如果在try语句块中捕获到了异常后,那么异常后面的代码将不再执行,而是转入到了catch语句块中,然后再执行finally的语句块中,然后最后执行finally后面的代码。如果没有捕获到异常,那么程序将不进入到catch语句块中.在执行完try语句块后就进入到了finally语句块,然后再执行finally后面的代码。
try+finally
程序的流程是:运行到try块中,如果有异常抛出的话,程序转向执行finally块的代码。那末finally块后面的代码还会被执行吗?不会!因为你没有处理异常,所以遇到异常后,执行完finally后,方法就已抛出异常的方式退出了。
这种方式中要注意的是,由于你没有捕获异常,所以要在方法后面声明抛出异常
共同点:
1.在catch块和finally块中仍然可以再抛出新的异常
例如 throw new Exception("illegal invoked");
如果对于新抛出的异常没有写try的话,则要在方法后面声明抛出异常
反之,如果给catch块或finally块里的异常再套上一层try,catch的话,方法后面就不必声明异常了。