关于try catch finally
2018-06-18 02:34:45来源:未知 阅读 ()
一、try catch finally的初步理解
首先,我们什么时候要用到try/catch和finally? ——已知执行的代码有可能有异常的情况下
try { //这里执行的代码如果出现异常,则立即跳到catch执行。}
catch { //除非try里面执行代码发生了异常,否则这里的代码不会执行 }
finally { //不管有没有异常,finally中的代码都会执行,可以理解为只要执行了try或者catch,就一定会执行 finally }
二、try catch finally的执行顺序(无return)
1.我们来看段代码
1 public class Test01 { 2 public static void main(String[] args) { 3 int i = 1; 4 test01(i); 5 } 6 7 public static void test01(int i) { 8 try { 9 i++; 10 System.out.println("try-----"+i); 11 i=1/0;//制造异常句子 12 i++; 13 System.out.println("try2-----"+i); 14 } catch (Exception e) { 15 i++; 16 System.out.println("catch-----"+i); 17 }finally { 18 i=5; 19 System.out.println("finally-----"+i); 20 } 21 } 22 }
2.控制台输出结果为:
3.总结:从输出结果可以看出,执行顺序为:try{} catch{} finally{} ;
也就是先执行try{}(try-----2),try里面发生异常(i=i/0;),跳去执行catch(catch-----3),不管有没有发生异常都会执行的finally(finally-----5);
(如果try里面没有异常将不执行catch,这里就不予以演示了)
三、try catch finally的执行顺序(带return),这里有两种情况
第一种,return在try catch finally 后面
1.我们来看段代码
1 public class Test01 { 2 public static void main(String[] args) { 3 int i = 1; 4 i=test01(i); 5 System.out.println("main--------"+i); 6 } 7 8 public static int test01(int i) { 9 try { 10 i++; 11 System.out.println("try-----"+i); 12 } catch (Exception e) { 13 i++; 14 System.out.println("catch----"+i); 15 }finally { 16 i++; 17 System.out.println("finally---"+i); 18 } 19 return i; 20 } 21 }
2.控制台输出结果
3.总结:从输出结果可以看出,执行顺序为:try{} /catch{} finally{} return;
在这里没有制造异常,就正常执行,“i”的初始值是“1”,在try里面“i++”--这时候“i”的值是“2”,在到finally里面执行“i++”,这时候“i”的值是“3”;
最后返回给方法返回的是“3”。
这里也进一步说明了无论try{}里面有没有发生异常,finally{}里面的代码都会执行
第二种,return在try catch 里面——重点
1.我们来看段代码
1 public class Test01 { 2 public static void main(String[] args) { 3 int i = 1; 4 i=test01(i); 5 System.out.println("main--------"+i); 6 } 7 8 public static int test01(int i) { 9 try { 10 i++; 11 System.out.println("try-----"+i); 12 return i; 13 } catch (Exception e) { 14 i++; 15 System.out.println("catch----"+i); 16 return i; 17 }finally { 18 i=5; 19 System.out.println("finally---"+i); 20 } 21 } 22 }
2.控制台输出结果为
3.总结:从输出结果可以看出,执行顺序依然是:try{} /catch{} finally{} return;
①finally是无论如何都会执行的(打印了fianlly),所以就算try里面有return语句也不会直接返回。
②执行了finally之后,按道理来说“i”的值应该是“5”,为什么最后返回给main方法的值是“2”呢:
个人猜测:这里返回的"i"不是原来的变量“i”,而是系统另外为try里面的“i值”定义了一个“i2”,返回的是“i2”,但是在这个时候“i”的值还是finally里面定义的“5”,然后在main方法里面又把“i2值”赋给了“i”,这时候"i"亦为“2”;
4.注意:如果在finally里面添加return语句,那么将会直接返回fianlly里面的“i”,这时候main里面输出的“i”值为“5”。
这也是进一步的说明了“不管有没有异常,finally中的代码都会执行”;那finally里面的代码执行了之后,便也执行了return语句,将不再执行try里面的return语句;
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- 第六章第三十五题(几何:五边形的面积)(Geometry: area of 2020-05-24
- 怎么自学JAVA开发? 2020-05-22
- 关于序列化的 10 几个问题,你顶得住不?.md 2020-05-19
- 错题记录——关于Java中private的用法(类与封装) 2020-05-16
- 关于Spring源码的面试题,他的回答是我见过最棒的了 2020-05-13
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash