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,
try klausa.Catatan: Pernyataan try-with-resources menutup semua resource yang mengimplementasikan antarmuka AutoCloseable.
Mari kita ambil contoh yang mengimplementasikan try-with-resources pernyataan.
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.
Dalam contoh di atas, pengecualian dapat dilempar dari try-with-resources pernyataan ketika:
test.txt tidak ditemukan.BufferedReader objek.
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.
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]);
}
}
Berikut adalah keuntungan menggunakan try-with-resources:
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.
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.
Kita dapat mendeklarasikan lebih dari satu resource di try-with-resources pernyataan dengan memisahkannya dengan tanda titik koma ;
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.
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
Java LinkedList Dalam tutorial ini, kita akan belajar tentang Java LinkedList secara detail dengan bantuan contoh. LinkedList kelas kerangka koleksi Java menyediakan fungsionalitas struktur data daftar tertaut (daftar tertaut ganda). Setiap elemen dalam daftar tertaut dikenal sebagai simpul . In
Java ArrayDeque Dalam tutorial ini, kita akan belajar tentang kelas ArrayDeque dan metodenya dengan bantuan contoh. Selain itu, kita akan belajar menggunakan deque array untuk mengimplementasikan tumpukan. Di Java, kita bisa menggunakan ArrayDeque class untuk mengimplementasikan struktur data antr
Antrian Pemblokiran Java Dalam tutorial ini, kita akan belajar tentang antarmuka Java BlockingQueue dan metodenya. BlockingQueue antarmuka Java Collections framework memperluas Queue antarmuka. Ini memungkinkan operasi apa pun untuk menunggu hingga berhasil dilakukan. Misalnya, jika kita ingin me
Java ArrayBlockingQueue Dalam tutorial ini, kita akan belajar tentang kelas ArrayBlockingQueue dan metodenya dengan bantuan contoh. ArrayBlockingQueue class framework Java Collections menyediakan implementasi antrian pemblokiran menggunakan array. Ini mengimplementasikan antarmuka Java BlockingQu