• try,catch,finally


    1.try,catch,finally

      try关键字用来包围可能会出现异常的逻辑代码,它单独无法使用,必须配合catch或者finally使用。Java编译器允许的组合使用形式只有以下三种形式:

      try...catch...;       try....finally......;    try....catch...finally...

      当然catch块可以有多个,注意try块只能有一个,finally块是可选的(但是最多只能有一个finally块)。

      三个块执行的顺序为try—>catch—>finally。

      当然如果没有发生异常,则catch块不会执行。但是finally块无论在什么情况下都是会执行的(这点要非常注意,因此部分情况下,都会将释放资源的操作放在finally块中进行)。

      在有多个catch块的时候,是按照catch块的先后顺序进行匹配的,一旦异常类型被一个catch块匹配,则不会与后面的catch块进行匹配。

      在使用try..catch..finally块的时候,注意千万不要在finally块中使用return,因为finally中的return会覆盖已有的返回值。下面看一个例子:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.IOException;
     
     
    public class Main {
        public static void main(String[] args) {
            String str = new Main().openFile();
            System.out.println(str);
             
        }
         
        public String openFile() {
            try {
                FileInputStream inputStream = new FileInputStream("d:/a.txt");
                int ch = inputStream.read();
                System.out.println("aaa");
                return "step1";
            catch (FileNotFoundException e) {
                System.out.println("file not found");
                return "step2";
            }catch (IOException e) {
                System.out.println("io exception");
                return "step3";
            }finally{
                System.out.println("finally block");
                //return "finally";
            }
        }
    }

      这段程序的输出结果为:

      可以看出,在try块中发生FileNotFoundException之后,就跳到第一个catch块,打印"file not found"信息,并将"step2"赋值给返回值,然后执行finally块,最后将返回值返回。

      从这个例子说明,无论try块或者catch块中是否包含return语句,都会执行finally块。

      如果将这个程序稍微修改一下,将finally块中的return语句注释去掉,运行结果是:

      

      最后打印出的是"finally",返回值被重新覆盖了。

      因此如果方法有返回值,切忌不要再finally中使用return,这样会使得程序结构变得混乱。

  • 相关阅读:
    bzoj3832
    bzoj2117
    bzoj1095
    BZOJ 4247: 挂饰 题解
    1296: [SCOI2009]粉刷匠
    3163: [Heoi2013]Eden的新背包问题
    2287: 【POJ Challenge】消失之物
    1334: [Baltic2008]Elect
    2748: [HAOI2012]音量调节
    1606: [Usaco2008 Dec]Hay For Sale 购买干草
  • 原文地址:https://www.cnblogs.com/yaowen/p/4848779.html
Copyright © 2020-2023  润新知