关于Java的异常处理,请高手赐教!
Java程序在运行时,如果catch到异常,就执行catch语句块,然后跳到final语句块执行,之后立刻退出,是不是这个样呢? 但是,如果catch语句块是空的呢?这个情况好像不会退出程序。请高手赐教! 谢谢各位朋友!真没想到会得到这么多朋友的帮助!特别要提出的是,“beckham1917772”和“我今天上课了”两位朋友的回答给了我很多体会。 其实我有这个疑问还是看视频教程的时候产生的,就是数据库连接用完后,关闭一定要在finally中关闭,那个老师说因为catch到异常程序会退出,有可能造成连接没有关闭……不知道是他没讲明白,还是我理解错误。 经过各位的解答,我明白了,应该是try语句块发生异常,立刻跳去执行相应catch和finally,这样,会造成try语句块里发生异常代码之后的语句无法得到执行;当然,如果catch到致命错误,程序会立刻退出(这时会不会执行finally呢?我自己试试)。
最满意答案
try { //执行的代码,其中可能有异常。一旦发现异常,则立即跳到catch执行。否则不会执行catch里面的内容 } catch { //除非try里面执行代码发生了异常,否则这里的代码不会执行,如果catch是空的,就继续执行finally中的代码} finally { //不管什么情况都会执行,包括try catch 里面用了return ,可以理解为只要执行了try或者catch,就一定会执行 finally } 程序会不会退出与catch是不是空的没什么必要的关联。只要不是致命错误,仍然可以继续运行,否则如果是致命错误无法继续运行则会跳出。 补充:可能是老师说的不够详细。试想,如果没有finally这个块,那么你的关闭流的代码写在哪里?写在try中呢,那么一旦有异常了没有执行到关闭的代码,那么流是不会关闭的。写在catch中呢,如果没有异常,关闭流代码依然不会执行。所以最好的方法就是写在finally中,这样无论是否有异常,只要程序执行过了我们想要的部分,就要关闭流以达到节省资源,提高效率的目的。更多推荐
发布评论