try....catch...finally 题目:try{}里有一个return 语句,那么紧跟在这个try后的finally{}里的code会不会被执行,什么时候执行,在return前还是return后?多谢各位! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 额,会执行 ,在return前执行 无论如何,Finally{}都会被执行,神奇吧当然是在return前了,不然不就不执行了吗主要是来接分的,要记得把分给我啊 楼主把产生疑问的这段代码执行一下就知道了,加几个控制台输出。finally里的代码在try里出不出异常的情况下都会执行,并且在return前。 会执行,在return前貌似是个笔试题。 异常处理的运行过程:(1) finally语句唯一不被执行的情况是先执行用于终止程序的System.exit()方法。java.lang.System类的静态方法exit()用于终止当前的java虚拟机进程,java虚拟机所执行的java程序也随之终止(2) return语句用于退出本方法。在执行try或catch中的return语句时,假如有finally代码块,会先执行finally代码块。(3) finally代码块虽然在return语句之前被执行,但finally代码块不能用重新给变量赋值的方式来改变return语句的返回值(4) 建议不要在finally代码块中使用return语句,因为它会导致两种潜在的错误:第一种错误是覆盖try或者catch代码块中的return语句第二种错误时丢失异常 好像把return换成system.exit(int)的话,finally就不会被执行了。 finally 里面的代码不管怎么样都是会被执行的。 Java codepublic static void main(String[] args) { System.out.println(test()); } public static int test() { try { System.out.println(2/1); return 0; } catch (Exception e) { e.printStackTrace(); }finally { System.out.println("2/0"); } return 0; }结果:22/00先执行 try里面的输出 然后执行 finally里面的输出 最后才返回的 楼主的表达有点歧义。finally代码块如果在return语句前都会被执行。反之如果执行了return语句,就不会执行finally代码块 如果 有 System.exist() 就不会执行finally 一般废材,先自己测试再说不行吗?误人子弟~!哦~~!非常赞同6L的说话up一下~ finally 里面的代码是一定会执行的, 但是会在return之前执行. package com.gjhohj.test;import java.util.ArrayList;import java.util.List;public class TestMain01 { public static void main(String args[]) { System.out.println(noticeFinally()); } public static String noticeFinally(){ try{ return "1"; }finally{ System.out.println("abc") ; } }}结果是abc1package com.gjhohj.test;import java.util.ArrayList;import java.util.List;public class TestMain01 { public static void main(String args[]) { System.out.println(noticeFinally()); } public static boolean noticeFinally(){ try{ return true; }finally{ return false ; } }}结果就是false 会,在return之前执行,面试题总考这个。 截取字符串问题!!请大家踊跃帮忙哈~~ 值传递,引用传递,作用域 混淆了 一个计算矩形面积的程序,怎么会出错? 请帮帮忙,各位高手 初学者的一道题,请指教 小弟刚学Java 面试题?? 关于用URLConnection下载文件的问题,请各位帮忙。 请教一个关于throws的问题 请问有关过载和重载的问题? html简单问题 XML解析的设计模式的问题
当然是在return前了,不然不就不执行了吗
主要是来接分的,要记得把分给我啊
finally里的代码在try里出不出异常的情况下都会执行,并且在return前。
貌似是个笔试题。
(1) finally语句唯一不被执行的情况是先执行用于终止程序的System.exit()方法。java.lang.System类的静态方法
exit()用于终止当前的java虚拟机进程,java虚拟机所执行的java程序也随之终止
(2) return语句用于退出本方法。在执行try或catch中的return语句时,假如有finally代码块,会先执行finally代码块。
(3) finally代码块虽然在return语句之前被执行,但finally代码块不能用重新给变量赋值的方式
来改变return语句的返回值
(4) 建议不要在finally代码块中使用return语句,因为它会导致两种潜在的错误:
第一种错误是覆盖try或者catch代码块中的return语句
第二种错误时丢失异常
Java codepublic static void main(String[] args)
{
System.out.println(test());
}
public static int test()
{
try
{
System.out.println(2/1);
return 0;
} catch (Exception e)
{
e.printStackTrace();
}finally
{
System.out.println("2/0");
}
return 0;
}
结果:
2
2/0
0先执行 try里面的输出
然后执行 finally里面的输出
最后才返回的
哦~~!非常赞同6L的说话up一下~
package com.gjhohj.test;import java.util.ArrayList;
import java.util.List;public class TestMain01 { public static void main(String args[]) {
System.out.println(noticeFinally());
}
public static String noticeFinally(){
try{
return "1";
}finally{
System.out.println("abc") ;
}
}}结果是
abc
1package com.gjhohj.test;import java.util.ArrayList;
import java.util.List;public class TestMain01 { public static void main(String args[]) {
System.out.println(noticeFinally());
}
public static boolean noticeFinally(){
try{
return true;
}finally{
return false ;
}
}}结果就是false