初学java,求教try catch后使用finally的作用是关闭对象
答案:6 悬赏:0
解决时间 2021-03-07 13:06
- 提问者网友:醉归
- 2021-03-06 18:25
但是如果finally语句之前我使用了跳转语句,跳转到其他页面,finally还会执行吗?
最佳答案
- 二级知识专家网友:冷眼_看世界
- 2021-03-06 19:52
try{
}catch(){
}finally{
}
该结构是用来捕捉异常信息的 ,异常来源于try块中, 在catch中进行处理 finally可以对资源进行释放或其他操作
1. 假如 在try中没有异常产生,并return finally 仍然会执行, 将return 的结果保存,执行完finally在return
2 , 在1的基础上,如果 finally中最后也return 那个,try中的return会失效 ,执行finally中return
3. 如果try 或者catch(有异常的情况下)中不是return 而是写的是 System.exit(0); 那么finally此时不执行,直接关闭虚拟机。
4 .在2的基础上,如果finally中嵌套 try finally结构的话 ,执行完 finally里面的try 在执行 finally中的finally
5 . 在4的基础上 如下代码会产生错误
try{
}catch(){
}finally{
try{
}catch(){
}finally{
return 1;
}
return 0;
}
因为finally要求代码必须被执行,虚拟机此时不知道 return1必须被执行,还是return 0 必须被执行,因为 他么都在finally中 ,希望对你有所帮助
}catch(){
}finally{
}
该结构是用来捕捉异常信息的 ,异常来源于try块中, 在catch中进行处理 finally可以对资源进行释放或其他操作
1. 假如 在try中没有异常产生,并return finally 仍然会执行, 将return 的结果保存,执行完finally在return
2 , 在1的基础上,如果 finally中最后也return 那个,try中的return会失效 ,执行finally中return
3. 如果try 或者catch(有异常的情况下)中不是return 而是写的是 System.exit(0); 那么finally此时不执行,直接关闭虚拟机。
4 .在2的基础上,如果finally中嵌套 try finally结构的话 ,执行完 finally里面的try 在执行 finally中的finally
5 . 在4的基础上 如下代码会产生错误
try{
}catch(){
}finally{
try{
}catch(){
}finally{
return 1;
}
return 0;
}
因为finally要求代码必须被执行,虚拟机此时不知道 return1必须被执行,还是return 0 必须被执行,因为 他么都在finally中 ,希望对你有所帮助
全部回答
- 1楼网友:為→妳鎖鈊
- 2021-03-06 22:12
finally语句就算跳转到其他页面,还是会执行的
- 2楼网友:邪性洒脱
- 2021-03-06 21:58
public static void main(string[] args) {
int i = 1;
int j = 0;
try {
system.out.println("hello");
system.out.println(i/j);
system.out.println("bye");
} catch (exception e) {
// todo auto-generated catch block
system.out.println("出现异常了");
e.printstacktrace();
} finally{
system.out.println("计算完毕");
}
}
意思是:程序正常执行t里面的代码,当t里面的代码执行出现异常,从出现异常那里开始不执行t中出现异常之后的代码,而执行c中的代码。如果在执行t中的代码没有出现异常,就不执行c中的代码,f中的代码不管是否有异常都会执行,当你需要执行一些不管是否有异常出现都要执行的代码时,可以加上f,f可以不写,一般情况下都不会用到f
此例中1除以0肯定有异常,0不能做除数
- 3楼网友:承载所有颓废
- 2021-03-06 21:53
finally中的语句暂时不会执行。如果你跳转到其他的代码段,这个try中的代码可看做主调方法,跳转到的代码可看做被调方法。程序的大方向是由上到下进行,如果读到这一引起跳转的语句跳转到其他代码后,必然先开始执行其他的代码,然后其他的代码执行完了,也就是被调方法一行行都执行完了,那么返回主调方法,继续try下面的语句的执行。如果这时候恰巧try中的语句也都执行完了,那么系统这个时候才会自动执行finally中的语句。
finally里面的语句是为了对资源统一进行管理。设想引起跳转的那一句代码要跳转到其他的代码去执行,这一段代码实则可以看做try里面一个完成程序目的一段分支分支,不会一跳转就自动执行finally。
你可以做一个测试,引起跳转的这句话这样写:new A(构造实参).launch(),新new一个A对象并执行launch方法。可能构造方法还需要try里面的参数,如果finally一下子关了肯定不符合逻辑。你可以在launch中写一句输出的话,finally中写一句输出的话,看看那个先执行。
- 4楼网友:青春如此荒謬
- 2021-03-06 21:46
finally是无论如何都会执行的,只是执行的顺序不同罢了。
- 5楼网友:努力只為明天
- 2021-03-06 20:58
当然会执行,finally的意思就是你前面所有的语句都执行完了才会执行。
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯