try-with-resources语句

本文概述

  • 资源尝试示例1
  • 资源尝试示例:使用多个资源
  • Try-with-resources示例:使用finally块
  • 禁止的异常
在Java中, try-with-resources语句是一个try语句, 用于声明一个或多个资源。资源是一个对象, 在完成程序后必须将其关闭。 try-with-resources语句可确保在语句执行结束时关闭每个资源。
你可以传递实现java.lang.AutoCloseable的任何对象, 其中包括实现java.io.Closeable的所有对象。
以下示例将字符串写入文件。它使用FileOutputStream的实例将数据写入文件。 FileOutputStream是一种资源, 程序完成后必须将其关闭。因此, 在此示例中, 资源关闭是由try本身完成的。
资源尝试示例1
import java.io.FileOutputStream; public class TryWithResources { public static void main(String args[]){ // Using try-with-resources try(FileOutputStream fileOutputStream =newFileOutputStream("/java7-new-features/src/abc.txt")){ String msg = "Welcome to srcmini!"; byte byteArray[] = msg.getBytes(); //converting string into byte array fileOutputStream.write(byteArray); System.out.println("Message written to file successfuly!"); }catch(Exception exception){ System.out.println(exception); } } }

输出:
Message written to file successfuly!

文件输出
Welcome to srcmini!

资源尝试示例:使用多个资源
import java.io.DataInputStream; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.InputStream; public class TryWithResources { public static void main(String args[]){ // Using try-with-resources try( // Using multiple resources FileOutputStream fileOutputStream =new FileOutputStream("/java7-new-features/src/abc.txt"); InputStream input = new FileInputStream("/java7-new-features/src/abc.txt")){ // -----------------------------Code to write data into file--------------------------------------------// String msg = "Welcome to srcmini!"; byte byteArray[] = msg.getBytes(); // Converting string into byte array fileOutputStream.write(byteArray); // Writingdata into file System.out.println("------------Data written into file--------------"); System.out.println(msg); // -----------------------------Code to read data from file---------------------------------------------// // Creating input stream instance DataInputStream inst = new DataInputStream(input); int data = http://www.srcmini.com/input.available(); // Returns an estimate of the number of bytes that can be read from this input stream. byte[] byteArray2 = new byte[data]; // inst.read(byteArray2); String str = new String(byteArray2); // passing byte array into String constructor System.out.println("------------Data read from file--------------"); System.out.println(str); // display file data }catch(Exception exception){ System.out.println(exception); } } }

输出:
------------Data written into file-------------- Welcome to srcmini! ------------Data read from file-------------- Welcome to srcmini!

你可以使用try-with-resources语句使用catch和finally块, 就像普通的try语句一样。
注–在try-with-resources语句中, catch或finally块在声明的资源关闭后执行。Try-with-resources示例:使用finally块
import java.io.FileOutputStream; public class TryWithResources { public static void main(String args[]){ try( FileOutputStream fileOutputStream= new FileOutputStream("/home/irfan/scala-workspace/java7-new-features/src/abc.txt")){ // -----------------------------Code to write data into file--------------------------------------------// String msg = "Welcome to srcmini!"; byte byteArray[] = msg.getBytes(); // Converting string into byte array fileOutputStream.write(byteArray); // Writingdata into file System.out.println("Data written successfully!"); }catch(Exception exception){ System.out.println(exception); } finally{ System.out.println("Finally executes after closing of declared resources."); } } }

输出:
Data written successfully! Finally executes after closing of declared resources.

禁止的异常如果try块引发异常, 并且try-with-resources引发一个或多个异常, 则try-with-resources引发的异常将被抑制。换句话说, 可以说, 尝试资源引发的异常是被抑制的异常。
你可以使用Throwable类的getSuppress()方法获取这些异常。
【try-with-resources语句】Java在Throwable类中添加了一个新的构造函数和两个新方法来处理受抑制的异常。
建设者 描述
protected Throwable(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) 它使用指定的详细消息, 原因, 启用或禁用抑制以及可写的堆栈跟踪启用或禁用来构造新的throwable。
方法 描述
公共最终无效addSuppressed(Throwable异常)/ td> 它将指定的异常附加到为了传递此异常而被抑制的异常。此方法是线程安全的, 通常由try-with-resources语句(自动和隐式)调用。它引发以下异常:IllegalArgumentException:如果异常是可抛出的, 则throwable无法抑制自身。 NullPointerException:如果exception为null。
public final Throwable[] getSuppressed() 它返回一个数组, 其中包含被try-with-resources语句抑制的所有异常。如果没有抑制异常或禁用抑制, 则返回一个空数组。

    推荐阅读