try,catch,finally的简单问题
try{}里有一个return语句,那么紧跟在这个try后的finally{}里的code会不会被执行,什么时候被执行,在return前还是后?...
try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,在return前还是后?
展开
4个回答
展开全部
不管怎样,在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());
}
}
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());
}
}
展开全部
会执行的,finally中的内容是肯定会执行的,执行在运行了try或者catch中的内容之后,即return后
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
根据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
返回到调用者那里的是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
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
会被执行,在return之前执行。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询