Java中的try-with-resource语句

请看以下功能:

import java.io.*;

public class Try {

    public static void main(String args[]) {

        Try ob = new Try();

        ob.func();

    }

    void func() {

        BufferedReader br = new BufferedReader(new FileReader("C:\\example.txt"));

        try {

            System.out.println(br.readLine());

        } catch (Exception e) {

            System.out.println(e.getMessage());

        }

    }

}

在这种情况下,我们利用BufferedReader类的资源。如果方法br.readLine()引发异常(或者即使它没有引发异常),则BufferedReader类的资源将保持打开状态。在Java中,当不再需要所有资源时,关闭它们非常重要。一种实现方法是利用final块,在这里我们关闭了必要的资源。

import java.io.*;

public class Try {

    public static void main(String args[]) {

        Try ob = new Try();

        ob.func();

    }

    void func() {

        BufferedReader br = new BufferedReader(new FileReader("C:\\example.txt"));

        try {

            System.out.println(br.readLine());

        } catch (Exception e) {

            System.out.println(e.getMessage());

        } finally {

            if (br != null) br.close();

        }

    }

}

如果我们在try块中建立了与许多资源的连接,则需要在finally块中逐一关闭所有资源。Java 7和所有更高版本支持的另一种方法是使用try-with-resource块。

try-with-resource块的一般语法为:

try (  //在此处打开资源)

{

  //在此处使用资源

}

catch( //在此处捕获异常)

{

//在这里处理异常

}

//资源自动关闭

在try-with-resource块中,所有资源都会自动关闭。我们可以捕获并最终将块与try-with-resource块一起使用。关闭资源后,将运行任何catch或finally块。我们可以在try-with-resource语句中打开多个资源,所有这些资源都必须实现Java.lang.AutoCloseable接口。资源以创建时的相反顺序关闭。

考虑对我们的代码进行以下更新:

import java.io.*;

public class Try {

    public static void main(String args[]) {

        Try ob = new Try();

        ob.func();

    }

    void func() {

        try (BufferedReader br = new BufferedReader(new FileReader("C:\\example.txt"))) {

            System.out.println(br.readLine());

        } catch (Exception e) {

            System.out.println(e.getMessage());

        }

    }

}

输出结果

C:\example.txt (No such file or directory)

无论try块是正常执行还是突然执行,BufferedReader资源都会自动关闭。

在试穿与资源有以下几个优点:

  • 它使代码更易于阅读和解释

  • 资源自动管理

  • 我们不需要做一个finally块,尤其是关闭资源

  • 可以在try-with-resource语句中打开多个资源,以分号分隔

  • 资源以相反的顺序关闭,以避免任何依赖性问题

import java.io.*;

public class Try {

    public static void main(String args[]) {

        Try ob = new Try();

        ob.func();

    }

    void func() {

        try (FileInputStream fin = new FileInputStream("file.txt"); BufferedReader br = new BufferedReader(new FileReader("C:\\example.txt"))) {

            System.out.println(br.readLine());

        } catch (Exception e) {

            System.out.println(e.getMessage());

        }

    }

}

输出结果

file.txt (No such file or directory)

注意:这些程序中的输出引发异常,因为它们引用的是该路径中不存在的文件。

以上是 Java中的try-with-resource语句 的全部内容, 来源链接: utcz.com/z/354920.html

回到顶部