Dalam tutorial ini, kita akan belajar tentang pernyataan try catch di Java dengan bantuan contoh.
The try… catch
blok di Jawa digunakan untuk menangani pengecualian dan mencegah penghentian abnormal program.
Berikut sintaks try… catch
blok di Java.
try( // code ) catch(exception) ( // code )
The try
blok termasuk kode yang mungkin menghasilkan pengecualian.
The catch
blok termasuk kode yang dieksekusi ketika ada terjadi pengecualian dalam try
blok.
Contoh: Java try… catch block
class Main ( public static void main(String() args) ( try ( int divideByZero = 5 / 0; System.out.println("Rest of code in try block"); ) catch (ArithmeticException e) ( System.out.println("ArithmeticException => " + e.getMessage()); ) ) )
Keluaran
ArithmeticException => / dengan nol
Pada contoh di atas, perhatikan barisnya,
int divideByZero = 5 / 0;
Di sini, kami mencoba membagi angka dengan nol . Dalam kasus ini, terjadi pengecualian. Karenanya, kami telah memasukkan kode ini di dalam try
blok.
Ketika program menemukan kode ini, ArithmeticException
terjadi. Dan, pengecualian ditangkap oleh catch
blok dan mengeksekusi kode di dalam catch
blok.
The catch
blok hanya dijalankan jika ada pengecualian dalam try
blok.
Catatan : Di Java, kita bisa menggunakan try
blok tanpa catch
blok. Namun, kami tidak dapat menggunakan catch
blok tanpa try
blokir.
Java coba … akhirnya blokir
Kita juga bisa menggunakan try
blok bersama dengan blok terakhir.
Dalam kasus ini, blok terakhir selalu dieksekusi apakah ada pengecualian di dalam blok percobaan atau tidak.
Contoh: Java coba… akhirnya blokir
class Main ( public static void main(String() args) ( try ( int divideByZero = 5 / 0; ) finally ( System.out.println("Finally block is always executed"); ) ) )
Keluaran
Akhirnya blok selalu dijalankan Pengecualian di utas "main" java.lang.ArithmeticException: / oleh nol di Main.main (Main.java:4)
Dalam contoh di atas, kami telah menggunakan try
blok bersama dengan finally
blok. Kita dapat melihat bahwa kode di dalam try
blok menyebabkan pengecualian.
Namun, kode di dalam finally
blok tersebut dijalankan terlepas dari pengecualiannya.
Java coba … tangkap … akhirnya blokir
Di Java, kita juga bisa menggunakan blok terakhir setelah try… catch
blok. Sebagai contoh,
import java.io.*; class ListOfNumbers ( // create an integer array private int() list = (5, 6, 8, 9, 2); // method to write data from array to a fila public void writeList() ( PrintWriter out = null; try ( System.out.println("Entering try statement"); // creating a new file OutputFile.txt out = new PrintWriter(new FileWriter("OutputFile.txt")); // writing values from list array to Output.txt for (int i = 0; i <7; i++) ( out.println("Value at: " + i + " = " + list(i)); ) ) catch (Exception e) ( System.out.println("Exception => " + e.getMessage()); ) finally ( // checking if PrintWriter has been opened if (out != null) ( System.out.println("Closing PrintWriter"); // close PrintWriter out.close(); ) else ( System.out.println("PrintWriter not open"); ) ) ) ) class Main ( public static void main(String() args) ( ListOfNumbers list = new ListOfNumbers(); list.writeList(); ) )
Keluaran
Memasukkan pernyataan percobaan Exception => Indeks 5 di luar batas untuk panjang 5 Closing PrintWriter
Dalam contoh di atas, kami telah membuat daftar bernama array dan file bernama output.txt. Di sini, kami mencoba membaca data dari array dan menyimpan ke file.
Perhatikan kodenya,
for (int i = 0; i < 7; i++) ( out.println("Value at: " + i + " = " + list(i)); )
Di sini, ukuran larik adalah 5
dan elemen terakhir larik ada di list(4)
. Namun, kami mencoba mengakses elemen di a(5)
dan a(6)
.
Karenanya, kode menghasilkan pengecualian yang ditangkap oleh blok catch.
Karena finally
blok selalu dieksekusi, kami telah memasukkan kode untuk menutup bagian PrintWriter
dalam blok akhirnya.
Merupakan praktik yang baik untuk menggunakan last block untuk menyertakan kode pembersihan penting seperti menutup file atau koneksi.
Catatan : Ada beberapa kasus ketika finally
blok tidak dieksekusi:
- Penggunaan
System.exit()
metode - Pengecualian terjadi di
finally
blok tersebut - Kematian seutas benang
Beberapa blok Tangkap
Untuk setiap try
blok, boleh ada nol atau lebih catch
blok. Banyak catch
blok memungkinkan kita menangani setiap pengecualian secara berbeda.
Tipe argumen dari setiap catch
blok menunjukkan tipe pengecualian yang dapat ditangani olehnya. Sebagai contoh,
class ListOfNumbers ( public int() arr = new int(10); public void writeList() ( try ( arr(10) = 11; ) catch (NumberFormatException e1) ( System.out.println("NumberFormatException => " + e1.getMessage()); ) catch (IndexOutOfBoundsException e2) ( System.out.println("IndexOutOfBoundsException => " + e2.getMessage()); ) ) ) class Main ( public static void main(String() args) ( ListOfNumbers list = new ListOfNumbers(); list.writeList(); ) )
Keluaran
IndexOutOfBoundsException => Indeks 10 di luar batas untuk panjang 10
Dalam contoh ini, kami telah membuat array integer bernama arr
ukuran 10 .
Karena indeks array dimulai dari 0 , elemen terakhir dari array berada di arr(9)
. Perhatikan pernyataannya,
arr(10) = 11;
Di sini, kami mencoba menetapkan nilai ke indeks 10 . Oleh karena itu, IndexOutOfBoundException
terjadilah.
Ketika pengecualian terjadi di try
blok,
- Pengecualian dilemparkan ke
catch
blok pertama .catch
Blok pertama tidak menanganiIndexOutOfBoundsException
, sehingga diteruskan kecatch
blok berikutnya . catch
Blok kedua dalam contoh di atas adalah pengendali pengecualian yang sesuai karena menangani fileIndexOutOfBoundsException
. Oleh karena itu, itu dieksekusi.
Menangkap Beberapa Pengecualian
Dari Java SE 7 dan yang lebih baru, kami sekarang dapat menangkap lebih dari satu jenis pengecualian dengan satu catch
blok.
Ini mengurangi duplikasi kode dan meningkatkan kesederhanaan dan efisiensi kode.
Setiap jenis pengecualian yang dapat ditangani oleh catch
blok dipisahkan menggunakan bilah vertikal |
.
Sintaksnya adalah:
try ( // code ) catch (ExceptionType1 | Exceptiontype2 ex) ( // catch block )
Untuk mempelajari lebih lanjut, kunjungi Java menangkap beberapa pengecualian.
Pernyataan coba-dengan-sumber daya Java
Pernyataan try-with-resources adalah pernyataan try yang memiliki satu atau beberapa deklarasi resource.
Sintaksnya adalah:
try (resource declaration) ( // use of the resource ) catch (ExceptionType e1) ( // catch block )
Sumber daya adalah objek yang akan ditutup di akhir program. Ini harus dideklarasikan dan diinisialisasi dalam pernyataan percobaan.
Mari kita ambil contoh.
try (PrintWriter out = new PrintWriter(new FileWriter("OutputFile.txt")) ( // use of the resource )
Pernyataan coba-dengan-sumber daya juga disebut sebagai manajemen sumber daya otomatis . Pernyataan ini secara otomatis menutup semua sumber daya di akhir pernyataan.
Untuk mempelajari lebih lanjut, kunjungi pernyataan java try-with-resources.