Manufaktur industri
Industri Internet of Things | bahan industri | Pemeliharaan dan Perbaikan Peralatan | Pemrograman industri |
home  MfgRobots >> Manufaktur industri >  >> Industrial programming >> java

Java mencoba-dengan-sumber daya

Coba-dengan-sumber daya Java

Dalam tutorial ini, kita akan belajar tentang pernyataan try-with-resources untuk menutup resource secara otomatis.

try-with-resources pernyataan secara otomatis menutup semua sumber daya di akhir pernyataan. Resource adalah objek yang akan ditutup pada akhir program.

Sintaksnya adalah:

try (resource declaration) {
  // use of the resource
} catch (ExceptionType e1) {
  // catch block
}

Seperti yang terlihat dari sintaks di atas, kami mendeklarasikan try-with-resources pernyataan oleh,

  1. mendeklarasikan dan membuat instance resource dalam try klausa.
  2. menentukan dan menangani semua pengecualian yang mungkin muncul saat menutup sumber daya.

Catatan: Pernyataan try-with-resources menutup semua resource yang mengimplementasikan antarmuka AutoCloseable.


Mari kita ambil contoh yang mengimplementasikan try-with-resources pernyataan.

Contoh 1:coba-dengan-sumber daya

import java.io.*;

class Main {
  public static void main(String[] args) {
    String line;
    try(BufferedReader br = new BufferedReader(new FileReader("test.txt"))) {
      while ((line = br.readLine()) != null) {
        System.out.println("Line =>"+line);
      }
    } catch (IOException e) {
      System.out.println("IOException in try block =>" + e.getMessage());
    }
  }
}

Keluarkan jika file test.txt tidak ditemukan.

IOException in try-with-resources block =>test.txt (No such file or directory)

Hasilkan jika file test.txt ditemukan.

Entering try-with-resources block
Line =>test line

Dalam contoh ini, kami menggunakan instance BufferedReader untuk membaca data dari test.txt berkas.

Mendeklarasikan dan membuat instance BufferedReader di dalam try-with-resources pernyataan memastikan bahwa instance ditutup terlepas dari apakah try pernyataan selesai secara normal atau melempar pengecualian.

Jika terjadi pengecualian, itu dapat ditangani menggunakan blok penanganan pengecualian atau kata kunci throws.


Pengecualian yang Ditekan

Dalam contoh di atas, pengecualian dapat dilempar dari try-with-resources pernyataan ketika:

Pengecualian juga dapat dilempar dari try blokir karena pembacaan file dapat gagal karena berbagai alasan kapan saja.

Jika pengecualian dilemparkan dari kedua try blok dan try-with-resources pernyataan, pengecualian dari try blok dilempar dan pengecualian dari try-with-resources pernyataan ditekan.

Mengambil Pengecualian yang Ditekan

Di Java 7 dan yang lebih baru, pengecualian yang ditekan dapat diambil dengan memanggil Throwable.getSuppressed() metode dari pengecualian yang dilemparkan oleh try blokir.

Metode ini mengembalikan larik dari semua pengecualian yang ditekan. Kami mendapatkan pengecualian yang ditekan di catch blokir.

catch(IOException e) {
  System.out.println("Thrown exception=>" + e.getMessage());
  Throwable[] suppressedExceptions = e.getSuppressed();
  for (int i=0; i<suppressedExceptions.length; i++) {
    System.out.println("Suppressed exception=>" + suppressedExceptions[i]);
  }
}

Keuntungan menggunakan try-with-resources

Berikut adalah keuntungan menggunakan try-with-resources:

1. akhirnya blokir tidak diperlukan untuk menutup sumber daya

Sebelum Java 7 memperkenalkan fitur ini, kami harus menggunakan finally blokir untuk memastikan bahwa sumber daya ditutup untuk menghindari kebocoran sumber daya.

Berikut adalah program yang mirip dengan Contoh 1 . Namun, dalam program ini, kami telah menggunakan blok akhirnya untuk menutup sumber daya.

Contoh 2:Tutup sumber daya menggunakan blokir akhirnya

import java.io.*;

class Main {
  public static void main(String[] args) {
    BufferedReader br = null;
    String line;

    try {
      System.out.println("Entering try block");
      br = new BufferedReader(new FileReader("test.txt"));
      while ((line = br.readLine()) != null) {
        System.out.println("Line =>"+line);
      }
    } catch (IOException e) {
      System.out.println("IOException in try block =>" + e.getMessage());
    } finally {
      System.out.println("Entering finally block");
      try {
        if (br != null) {
          br.close();
        }
      } catch (IOException e) {
        System.out.println("IOException in finally block =>"+e.getMessage());
      }

    }
  }
}

Keluaran

Entering try block
Line =>line from test.txt file
Entering finally block 

Seperti yang dapat kita lihat dari contoh di atas, penggunaan finally blok untuk membersihkan sumber daya membuat kode lebih kompleks.

Perhatikan try...catch blok di finally blok juga? Ini karena IOException juga dapat terjadi saat menutup BufferedReader contoh di dalam finally . ini blok sehingga juga ditangkap dan ditangani.

try-with-resources pernyataan tidak manajemen sumber daya otomatis . Kita tidak perlu secara eksplisit menutup sumber daya karena JVM secara otomatis menutupnya. Ini membuat kode lebih mudah dibaca dan ditulis.


2. coba-dengan-sumber daya dengan banyak sumber

Kita dapat mendeklarasikan lebih dari satu resource di try-with-resources pernyataan dengan memisahkannya dengan tanda titik koma ;

Contoh 3:coba dengan banyak sumber daya

import java.io.*;
import java.util.*;
class Main {
  public static void main(String[] args) throws IOException{
    try (Scanner scanner = new Scanner(new File("testRead.txt")); 
      PrintWriter writer = new PrintWriter(new File("testWrite.txt"))) {
      while (scanner.hasNext()) {
        writer.print(scanner.nextLine());
      }
    }
  }
}

Jika program ini dijalankan tanpa menghasilkan pengecualian apa pun, Scanner objek membaca baris dari testRead.txt file dan menulisnya dalam testWrite.txt baru berkas.

Ketika beberapa deklarasi dibuat, try-with-resources pernyataan menutup sumber daya ini dalam urutan terbalik. Dalam contoh ini, PrintWriter objek ditutup terlebih dahulu dan kemudian Scanner objek ditutup.


Peningkatan coba-dengan-sumber daya Java 9

Di Java 7, ada batasan untuk try-with-resources penyataan. Sumber daya perlu dideklarasikan secara lokal di dalam bloknya.

try (Scanner scanner = new Scanner(new File("testRead.txt"))) {
  // code
}

Jika kita mendeklarasikan sumber daya di luar blok di Java 7, itu akan menghasilkan pesan kesalahan.

Scanner scanner = new Scanner(new File("testRead.txt"));
try (scanner) {
  // code
}

Untuk mengatasi kesalahan ini, Java 9 meningkatkan try-with-resources pernyataan sehingga referensi sumber daya dapat digunakan meskipun tidak dideklarasikan secara lokal. Kode di atas sekarang akan dijalankan tanpa kesalahan kompilasi.


java

  1. Operator Jawa
  2. Komentar Jawa
  3. Pernyataan Java if...else
  4. Java untuk setiap Loop
  5. String Jawa
  6. Antarmuka Jawa
  7. Kelas Anonim Java
  8. Anotasi Jawa
  9. Pernyataan Jawa
  10. Vektor Jawa