【黑马程序员】关于try和fianlly中的return执行问题总结
2013-11-13 14:12
441 查看
----------------------
ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ----------------------
我们都知道finally语句块的作用是无论出现什么情况,finally块中的语句一定会被执行,并且是在return之前执行。既然在finally块中的语句一定会被执行,那么finally中可以改变try中对象的值吗?执行顺序是怎么样的呢?
1.第一种情况请看testTry1();
在控制台输出字符来证明try语句块中return后finally中的代码是否被执行。
控制台输出结果为:
testTry1
testTry1
分析:try语句return后finally中的代码是会被执行的。只是finally中改变try中的值没被返回所以值不变。
2.第二种情况请看testTry2();
在控制台输出字符来证明try语句块中return后finally中的代码是否被执行。finally和try语句块中都有return,那么结果如何呢?
控制台输出结果为:
testTry2testTry2。
分析:当finally和try中都有return的话,则返回值为finally语句块中的返回值。
2.第二种情况请看testTry3();
在控制台输出字符来证明try语句块中return后catch后finally中的代码是否被执行。finally和try和catch语句块中都有return,那么结果究竟返回值返回的是谁的内容呢?
控制台输出结果为:
try
找不到指定文件
finally
testTry3testTry3testTry3
分析结果:try,catch,finally中都有return的情况下,最终返回值为在finally修改后的值.
------- Windows Phone 7手机开发、.Net培训、期待与您交流! -------
ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ----------------------
我们都知道finally语句块的作用是无论出现什么情况,finally块中的语句一定会被执行,并且是在return之前执行。既然在finally块中的语句一定会被执行,那么finally中可以改变try中对象的值吗?执行顺序是怎么样的呢?
1.第一种情况请看testTry1();
在控制台输出字符来证明try语句块中return后finally中的代码是否被执行。
控制台输出结果为:
testTry1
testTry1
分析:try语句return后finally中的代码是会被执行的。只是finally中改变try中的值没被返回所以值不变。
2.第二种情况请看testTry2();
在控制台输出字符来证明try语句块中return后finally中的代码是否被执行。finally和try语句块中都有return,那么结果如何呢?
控制台输出结果为:
testTry2testTry2。
分析:当finally和try中都有return的话,则返回值为finally语句块中的返回值。
2.第二种情况请看testTry3();
在控制台输出字符来证明try语句块中return后catch后finally中的代码是否被执行。finally和try和catch语句块中都有return,那么结果究竟返回值返回的是谁的内容呢?
控制台输出结果为:
try
找不到指定文件
finally
testTry3testTry3testTry3
分析结果:try,catch,finally中都有return的情况下,最终返回值为在finally修改后的值.
package com.itheima; import java.io.FileInputStream; import java.io.FileNotFoundException; public class Test8 { //finally语句块的作用是无论出现什么情况,finally块中的语句一定会被执行,并且是在return之前执行。 //根据J***A规范,如果try-finally或者catch-finally中都有return,则2个return都执行并最终返回调用者那里的是finally中的return //如果finally中没有return则返回的是catch中的return,但是finally中的代码也是要执行的。 public static void main(String[] args) { // TODO Auto-generated method stub Test8 t=new Test8(); System.out.println(t.testTry1()); System.out.println(t.testTry2()); System.out.println(t.testTry3()); } //在控制台输出字符来证明finally是否被执行,在testTry1()中try中的sb被存储在一个临时区域内。 //finally中改变了sb的值,但是没有return,所以sb的值为“testTry1”。 public String testTry1(){ StringBuilder sb=new StringBuilder(); try{ sb.append( "testTry1"); return sb.toString(); }finally{ System.out.println("testTry1"); sb.append( "testTry1"); } } //finally中改变了sb的值,如果有return,则sb的值为“testTry2testTry2”。 public String testTry2(){ StringBuilder sb=new StringBuilder(); try{ sb.append( "testTry2"); return sb.toString(); }finally{ sb.append( "testTry2"); return sb.toString(); } } //try,catch,finally中都有return的情况下,最终返回在finally修改后的值. public String testTry3(){ StringBuilder sb=new StringBuilder(); FileInputStream in = null; try{ sb.append( "testTry3"); System.out.println("try"); in=new FileInputStream("C:\\exist"); return sb.toString(); }catch(FileNotFoundException e){ System.out.println("找不到指定文件"); sb.append( "testTry3"); return sb.toString(); } finally{ System.out.println("finally"); sb.append( "testTry3"); return sb.toString(); } } }
------- Windows Phone 7手机开发、.Net培训、期待与您交流! -------
相关文章推荐
- 关于Java中try catch finally throw return的执行顺序问题
- 关于try,finally里面的return,到底谁先执行的问题
- 关于try-catch-finally-return的执行顺序的一些总结
- 黑马程序员 try或catch中存在return 语句时,它们与finally 的执行顺序问题
- 关于try\return\finally的执行顺序问题
- 有return的情况下try catch finally的执行顺序(最有说服力的总结)
- 有return的情况下try catch finally的执行顺序(最有说服力的总结)
- 有return的情况下try catch finally的执行顺序(最有说服力的总结)
- 关于JAVA的try catch finally的return返回值问题
- 【Java】try中有return,finally块执行问题
- 有return的情况下try catch finally的执行顺序(最有说服力的总结)
- 有return的情况下try catch finally的执行顺序(最有说服力的总结)
- 关于try中含有return语句的执行顺序的升入解析(学习javap命令)
- Android面试之java基础try-catch-finally-return的执行先后顺序问题
- try{}中有return 时,finally中的语句是否会执行问题。
- 有return的情况下try catch finally的执行顺序(最有说服力的总结)
- 有return的情况下try catch finally的执行顺序(最有说服力的总结)
- 在try中写了return,后面又写了finally,是先执行return还是先执行fianlly
- 有return的情况下try catch finally的执行顺序(最有说服力的总结)
- 在try,catch,finally中return,throw覆盖的问题总结