黑马程序员技术交流社区
标题:
Try语句的问题
[打印本页]
作者:
为你而去
时间:
2014-4-8 08:19
标题:
Try语句的问题
try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,在return前还是后?
作者:
xuehuayous
时间:
2014-4-8 08:48
本帖最后由 xuehuayous 于 2014-4-8 08:51 编辑
先结合一个小例子分析一下吧
package cn.itheima;
public class tryFinallyDemo {
public static void main(String[] args) {
System.out.println(test());//step1:调用test()方法
//step7:将返回的i的值(i=5)打印在控制台
}
public static int test() {
int i = 2; //step2:创建i变量并赋值2;
try {
i+=3; //step3:i自加3;即现在i=5;
return i; //step4:执行return语句,将i的值保存在缓冲区;
//step6:将保存在缓冲区的i值返回;
} finally {
i+=3; //step5:i自加3;即现在i=8;
}
}
}
复制代码
总结:
try 和finally的执行顺序问题:
程序会先执行try的语句,如果try遇到exception或者error后,执行catch中的语句,最后执行finally中的语句
程序在try中遇到return语句后,会将return的结果存在一个缓存中,但是并不会直接就输出,而是先储存起来,等到finally执行完毕后才输出return结果,接入finally中也有return语句,那么就会覆盖掉try中的return值
希望对你有帮助!
作者:
jingdou56
时间:
2014-4-8 10:00
finally{} 中的代码是肯定会被执行的代码,无论是异常还是跳出,都会先执行这里面的代码
可以通过下面代码的运行结果看到 你想知道的结果,时先执行 finally 再执行 return后的代码
互相学习!
class TryCatchTest
{
public static void main(String[] args)
{
TryCatch();
System.out.println("Return ...");
}
public static void TryCatch()
{
try
{
if(true)
return;
}
finally
{
System.out.println("Finally ...");
}
}
}
复制代码
作者:
沫然
时间:
2014-4-8 12:39
public class Test {
public static void main(String[] args) {
System.out.println(test());
}
public static int test(){
try{
return testTry();
}
finally{
testFinally();
}
}
private static int testTry() {
System.out.println("testTry执行");
return 1;
}
private static void testFinally() {
System.out.println("testFinally执
行");
}
}
复制代码
执行结果:
try执行
finally执行
1
所以return首先被执行,finally后执行。
return并不是马上返回结果,而是先把结果放在函数中,
然后等待finally结果出来后才真正的返回。
作者:
﹊佑雨时杰↘
时间:
2014-4-8 13:32
finally 里面的语句肯定会执行的 。 不管 try 里面return 还是 出现异常。 都会执行的
return首先被执行,finally后执行。
return并不是马上返回结果,而是先把结果放在函数中,
然后等待finally结果出来后才真正的返回。
作者:
杨殿生
时间:
2014-4-8 17:28
无论try里有一个return语句,还是catch里有return都是会执行finally里的语句的,如果是没有抛出异常那就是执行完try里的return以后执行finally里的语句,如果抛出了异常那就执行完catch中的return语句执行finally里的语句
作者:
为梦想而活着
时间:
2014-4-8 19:36
try catch 成对出现的,一个try就一定要有catch,被try包裹的代码说明,如果这些代码中只要抛出异常的话,就会停止当前的代码运行,而跳到catch中,对于异常进行处理。
而finally呢,他是一个比较特殊的东西,finally中的代码无论出现说明状况都会运行到。即使出现异常。所以finally一般都是处理对资源的释放等操作。
try{
go(); //假设在调用go方法的时候发生的异常
return “hello”; //这个return语句都是无法执行到的。
}catch(Exception e){
System.out.println("发生的异常了!");
}finally{
System.out.println("这里一定回执行!");
}
希望能帮到你~
作者:
虎牛龙马
时间:
2014-4-8 20:15
......
try {
return "csdn";
}
finally {
System.out.println("close!!!");
}
这个finally里面的输出语句是必须执行的,只有当下面的情况finally里面的代码执行不了:
try {
.......
return "csdn";
System.exit(0);//直接将jvm关了!!!
}
finally
{
System.out.println("close!!!");//这里执行不到!!!
}
作者:
清风夜独醉
时间:
2014-4-8 23:44
首先,finally里的语句无论try-catch语句是否会发生异常,一定会执行的,除非语句中用了System.exit(0)。如果try语句中有return语句,那么finally语句会是什么时候执行,我们可以编写一段代码进行验证,如下
public class Test {
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println(test());
}
public static boolean test(){
try{
return result1();
}finally{
result2();
}
}
public static boolean result1(){
System.out.println("It's reuturn");
return true;
}
public static void result2(){
System.out.println("It's finally");
}
}
复制代码
执行结果如下
"It's reuturn"
"It's finally"
true
以上结果说明,return首先被执行,finally后被执行,return并不是让结果马上返回,而是先把结果放到函数中,然后必须等待finally结果出来后再返回
作者:
四川男人
时间:
2014-4-8 23:53
try()里面有return语句,程序执行try()的时候,如果运行到有异常的代码,先执行catch(),在catch()中处理异常。当执行到return的时候,跳出try()代码块儿,然后执行finally中的代码,最后程序停止运行。finally代码块儿中的代码一定会运行。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2