京东6.18大促主会场领京享红包更优惠

 找回密码
 立即注册

QQ登录

只需一步,快速开始

try、catch、finally用法总结

2020-6-8 10:59| 发布者: zhaojun917| 查看: 1508| 评论: 0

摘要: try、catch、finally用法总结:  1、不管有没有异常,finally中的代码都会执行  2、当try、catch中有return时,finally中的代码依然会继续执行  3、finally是在return后面的表达式运算之后执行的,此时并没有返 ...

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
  finally block i = 10
  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
关闭

站长推荐上一条 /6 下一条

QQ|手机版|小黑屋|梦想之都-俊月星空 ( 粤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.

返回顶部