try、catch、finally用法总结: 1、不管有没有异常,finally中的代码都会执行 2、当try、catch中有return时,finally中的代码依然会继续执行 3、finally是在return后面的表达式运算之后执行的,此时并没有返回运算之后的值,而是把值保存起来,不管finally对该值做任何的改变,返回的值都不会改变,依然返回保存起来的值。也就是说方法的返回值是在finally运算之前就确定了的。 4、finally代码中最好不要包含return,程序会提前退出,也就是说返回的值不是try或catch中的值 执行顺序 1.
1 public static void main(String[] args) { 2 // TODO Auto-generated method stub 3 System.out.println(test()); 4 } 5 public static int test(){ 6 int i = 1; 7 try{ 8 i++; 9 System.out.println("try block, i = "+i); 10 }catch(Exception e){ 11 i ++; 12 System.out.println("catch block i = "+i); 13 }finally{ 14 i = 10; 15 System.out.println("finally block i = "+i); 16 } 17 return i; 18 }
结果输出如下: try block, i = 2 finally block i = 10 10 先执行try块,并没有捕获到异常,finally 块,最后return。 2.当我们把return放到try块中和catch块中,会怎么样呢?你们会不会纠结先return呢还是先finally呢?返回值i会改变吗? 1 public static void main(String[] args) { 2 // TODO Auto-generated method stub 3 System.out.println(test()); 4 } 5 public static int test(){ 6 int i = 1; 7 try{ 8 i++; 9 System.out.println("try block, i = "+i); 10 return i; 11 }catch(Exception e){ 12 i ++; 13 System.out.println("catch block i = "+i); 14 return i; 15 }finally{ 16 i = 10; 17 System.out.println("finally block i = "+i); 18 } 19 } 结果输出如下: try block, i = 2 如我们总结一样: 2、当try、catch中有return时,finally中的代码依然会继续执行 3、finally是在return后面的表达式运算之后执行的,此时并没有返回运算之后的值,而是把值保存起来,不管finally对该值做任何的改变,返回的值都不会改变,依然返回保存起来的值。也就是说方法的返回值是在finally运算之前就确定了的。 3.如果是操作不是基本类型会怎么样?会不一样吗?为什么? 1 public static void main(String[] args) { 2 // TODO Auto-generated method stub 3 System.out.println(test().mmp("fuck")); 4 } 5 public static Person test(){ 6 Person person = new Person(); 7 try{ 8 person.setShengao("172cm"+"---try block"); 9 System.out.println("try block"); 10 return person; 11 }catch(Exception e){ 12 person.setTizhong("100kg"); 13 System.out.println("catch block"); 14 return person; 15 }finally{ 16 person.setXingbie("女"); 17 System.out.println("finally block "); 18 } 19 } Person类 1 package xyz; 2 3 public class Person { 4 public String shengao; 5 public String tizhong; 6 public String xingbie; 7 8 //public String hello(String input); 9 10 public String getShengao() { 11 return shengao; 12 } 13 14 public void setShengao(String shengao) { 15 this.shengao = shengao; 16 } 17 18 public String getTizhong() { 19 return tizhong; 20 } 21 22 public void setTizhong(String tizhong) { 23 this.tizhong = tizhong; 24 } 25 26 public String getXingbie() { 27 return xingbie; 28 } 29 30 public void setXingbie(String xingbie) { 31 this.xingbie = xingbie; 32 } 33 34 35 public String mmp(String fuck){ 36 System.out.println("person : mmp"); 37 System.out.println("shengao:"+this.shengao); 38 System.out.println("tizhong:"+this.tizhong); 39 System.out.println("xingbie:"+this.xingbie); 40 return |
|手机版|小黑屋|梦想之都-俊月星空
( 粤ICP备18056059号 )|网站地图
GMT+8, 2025-7-1 19:12 , Processed in 0.033321 second(s), 18 queries .
Powered by Mxzdjyxk! X3.5
© 2001-2025 Discuz! Team.