try,catch,finally的简单问题

2024-12-21 22:52:42
推荐回答(4个)
回答1:

不管怎样,在try后面的finally是一定会执行的,当然是执行完try后再执行的,但是如果try里面有return的话,它执行的还是try里面的那个return.自己做个示例就明白了,甚至可以加个断点加以调试。
1、如果try里面放了return,如果try里面的语句不报错的话,将返回try里面的内容.
2、如果try里面放了return,如果try里面的语句报错的话,将返回finally里面的内容.
3、如果try里面没有return,那么不管try里面报不报错,都返回finally里面的内容。

public class t1 {
public int test()
{
String str="1s";
//String str="1";
int result=0;
try
{
result=Integer.parseInt(str);
return result;
}
catch(Exception ex)
{
result=2;
//ex.printStackTrace();
}
finally
{
result=3;
}
return result;
}
public static void main(String[] args) {
t1 t=new t1();
System.out.println(t.test());
}
}

回答2:

会执行的,finally中的内容是肯定会执行的,执行在运行了try或者catch中的内容之后,即return后

回答3:

根据java规范:在try-catch-finally中,如果try-finally或者catch-finally中都有return,则两个return语句都执行并且最终
返回到调用者那里的是finally中return的值;而如果finally中没有return,则理所当然的返回的是try或者catch中return的值,但是
finally中的代码是必须要执行的,而且是在return前执行,除非碰到exit()。
例子:
public class Test {
public static void main(String[] args) {
System.out.println(new Test().test());
}

static int test()
{
int x = 1;
try
{
return x;
}
finally
{
++x;
}
}

}
---------执行结果 ---------
1

public class Test {
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println(new Test().test());;
}

int test()
{
try
{
return func1();
}
finally
{
return func2();
}
}

int func1()
{
System.out.println("func1");
return 1;
}
int func2()
{
System.out.println("func2");
return 2;
}
}
-----------执行结果-----------------

func1
func2
2

回答4:

会被执行,在return之前执行。