关于Java的异常处理,请高手赐教!
Java程序在运行时,如果catch到异常,就执行catch语句块,然后跳到final语句块执行,之后立刻退出,是不是这个样呢?但是,如果catch语句块是空的呢?这个情...
Java程序在运行时,如果catch到异常,就执行catch语句块,然后跳到final语句块执行,之后立刻退出,是不是这个样呢?
但是,如果catch语句块是空的呢?这个情况好像不会退出程序。请高手赐教!
谢谢各位朋友!真没想到会得到这么多朋友的帮助!特别要提出的是,“beckham1917772”和“我今天上课了”两位朋友的回答给了我很多体会。
其实我有这个疑问还是看视频教程的时候产生的,就是数据库连接用完后,关闭一定要在finally中关闭,那个老师说因为catch到异常程序会退出,有可能造成连接没有关闭……不知道是他没讲明白,还是我理解错误。
经过各位的解答,我明白了,应该是try语句块发生异常,立刻跳去执行相应catch和finally,这样,会造成try语句块里发生异常代码之后的语句无法得到执行;当然,如果catch到致命错误,程序会立刻退出(这时会不会执行finally呢?我自己试试)。 展开
但是,如果catch语句块是空的呢?这个情况好像不会退出程序。请高手赐教!
谢谢各位朋友!真没想到会得到这么多朋友的帮助!特别要提出的是,“beckham1917772”和“我今天上课了”两位朋友的回答给了我很多体会。
其实我有这个疑问还是看视频教程的时候产生的,就是数据库连接用完后,关闭一定要在finally中关闭,那个老师说因为catch到异常程序会退出,有可能造成连接没有关闭……不知道是他没讲明白,还是我理解错误。
经过各位的解答,我明白了,应该是try语句块发生异常,立刻跳去执行相应catch和finally,这样,会造成try语句块里发生异常代码之后的语句无法得到执行;当然,如果catch到致命错误,程序会立刻退出(这时会不会执行finally呢?我自己试试)。 展开
6个回答
展开全部
try
{
//执行的代码,其中可能有异常。一旦发现异常,则立即跳到catch执行。否则不会执行catch里面的内容
}
catch
{
//除非try里面执行代码发生了异常,否则这里的代码不会执行,如果catch是空的,就继续执行finally中的代码}
finally
{
//不管什么情况都会执行,包括try catch 里面用了return ,可以理解为只要执行了try或者catch,就一定会执行 finally
}
程序会不会退出与catch是不是空的没什么必要的关联。只要不是致命错误,仍然可以继续运行,否则如果是致命错误无法继续运行则会跳出。
补充:可能是老师说的不够详细。试想,如果没有finally这个块,那么你的关闭流的代码写在哪里?写在try中呢,那么一旦有异常了没有执行到关闭的代码,那么流是不会关闭的。写在catch中呢,如果没有异常,关闭流代码依然不会执行。所以最好的方法就是写在finally中,这样无论是否有异常,只要程序执行过了我们想要的部分,就要关闭流以达到节省资源,提高效率的目的。
{
//执行的代码,其中可能有异常。一旦发现异常,则立即跳到catch执行。否则不会执行catch里面的内容
}
catch
{
//除非try里面执行代码发生了异常,否则这里的代码不会执行,如果catch是空的,就继续执行finally中的代码}
finally
{
//不管什么情况都会执行,包括try catch 里面用了return ,可以理解为只要执行了try或者catch,就一定会执行 finally
}
程序会不会退出与catch是不是空的没什么必要的关联。只要不是致命错误,仍然可以继续运行,否则如果是致命错误无法继续运行则会跳出。
补充:可能是老师说的不够详细。试想,如果没有finally这个块,那么你的关闭流的代码写在哪里?写在try中呢,那么一旦有异常了没有执行到关闭的代码,那么流是不会关闭的。写在catch中呢,如果没有异常,关闭流代码依然不会执行。所以最好的方法就是写在finally中,这样无论是否有异常,只要程序执行过了我们想要的部分,就要关闭流以达到节省资源,提高效率的目的。
展开全部
会的,catch 空的没关系:
而且你要知道,try语句的结构,try块肯定是要有的,catch块和finally块至少有一个,就是说catch块都可以没有的
可以试试
还有是不是退出程序的问题:
try catch就是防止异常的,catch里是抓到这个异常后的处理语句,一般
e.printStrackTrace(); 这时候异常就已经被你处理了,是打出错误信息,程序会继续运行,finally后的代码照常执行
处理异常另一种方法就是在catch里继续向后抛 throw e ,这时候程序继续向后,一直到把e处理掉(不是向后抛) 或者最后抛给JVM就结束了
而且你要知道,try语句的结构,try块肯定是要有的,catch块和finally块至少有一个,就是说catch块都可以没有的
可以试试
还有是不是退出程序的问题:
try catch就是防止异常的,catch里是抓到这个异常后的处理语句,一般
e.printStrackTrace(); 这时候异常就已经被你处理了,是打出错误信息,程序会继续运行,finally后的代码照常执行
处理异常另一种方法就是在catch里继续向后抛 throw e ,这时候程序继续向后,一直到把e处理掉(不是向后抛) 或者最后抛给JVM就结束了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
并非如此:
如果在try块中遇到异常,
如果有catch,会跳到catch
catch执行完之后,如果有finally,执行finally。
然后跳出整个 try块。
而不是跳出程序。
如果在try块中遇到异常,
如果有catch,会跳到catch
catch执行完之后,如果有finally,执行finally。
然后跳出整个 try块。
而不是跳出程序。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
“Java程序在运行时,如果catch到异常,就执行catch语句块,然后跳到final语句块执行”这句没错。
但是即使catch里面什么都不写程序一样会结束的,不应该是你说的“这个情况好像不会退出程序”的这个现象。
只不过catch块为空是恶习,如果catch块为空的话你的catch语句还有啥意义呢?
一般情况下是这样:
try
{
常规程序
}catch(Exception1 e)
{
对Exception1的异常处理,比如记录出错日志,打印栈等等
}
//后面还可以针对不同的异常写多个catch,如:
catch(Exception2 e)
{
.........
}
......
//final块中的语句是不管是否发生异常都会执行的,也就是说就算出现异常也要执行。
finally
{
final语句(常见的是关闭数据库连接或IO资源)
}
但是即使catch里面什么都不写程序一样会结束的,不应该是你说的“这个情况好像不会退出程序”的这个现象。
只不过catch块为空是恶习,如果catch块为空的话你的catch语句还有啥意义呢?
一般情况下是这样:
try
{
常规程序
}catch(Exception1 e)
{
对Exception1的异常处理,比如记录出错日志,打印栈等等
}
//后面还可以针对不同的异常写多个catch,如:
catch(Exception2 e)
{
.........
}
......
//final块中的语句是不管是否发生异常都会执行的,也就是说就算出现异常也要执行。
finally
{
final语句(常见的是关闭数据库连接或IO资源)
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
如果不是致命错误,它还会向下执行的。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
既然catch里面空的,你try catch它做什么。
finally不管是否捕获都会执行。
finally不管是否捕获都会执行。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询