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