Menguasai Penanganan Pengecualian Java: Try, Catch, Finally, Throw & Throws Dijelaskan
Menguasai Penanganan Pengecualian Java
Panduan ini memandu Anda melalui mekanisme penanganan pengecualian Java—try-catch, finally, throw, dan throws—dengan contoh yang jelas dan tips praktik terbaik.
Dalam pelajaran sebelumnya kita memperkenalkan pengecualian Java dan mengapa mereka mengganggu aliran program. Menangani pengecualian tersebut dengan anggun esensial untuk kode yang kokoh dan mudah dipelihara.
Di bawah ini adalah strategi utama untuk mengelola pengecualian di Java:
- blok try…catch
- blok finally
- kata kunci throw dan throws
1. Menggunakan Blok try…catch
Konstruk try…catch adalah sumbu model penanganan kesalahan Java. Tempatkan kode apa pun yang mungkin melempar pengecualian di dalam blok try, dan tangkap pengecualian spesifik setelahnya.
try { // kode yang mungkin melempar } catch(Exception e) { // tangani pengecualian }
Klausa catch wajib setiap kali blok try muncul; ia menangkap pengecualian dan memungkinkan Anda merespons dengan tepat.
Contoh: Menangani ArithmeticException
class Main { public static void main(String[] args) { try { int divideByZero = 5 / 0; System.out.println("Sisa kode dalam blok try"); } catch (ArithmeticException e) { System.out.println("ArithmeticException => " + e.getMessage()); } } }
Output
ArithmeticException => / by zero
Dalam cuplikan ini, pembagian dengan nol memicu ArithmeticException. Pengecualian ditangkap, blok catch dieksekusi, dan kode apa pun yang mengikuti pengecualian dalam blok try dilewati.
Jika blok try selesai tanpa melempar, blok catch cukup dilewati.
2. Memanfaatkan Blok finally
Sebuah blok finally selalu berjalan, terlepas dari apakah pengecualian dilempar atau tidak. Ini adalah tempat ideal untuk tugas pembersih—menutup file, melepaskan sumber daya, atau mencatat log.
Hanya satu blok finally yang dapat menyertai pernyataan try tertentu.
try { // kode } catch (ExceptionType1 e1) { // tangani } finally { // selalu dieksekusi }
Contoh: finally Setelah Pengecualian
class Main { public static void main(String[] args) { try { int divideByZero = 5 / 0; } catch (ArithmeticException e) { System.out.println("ArithmeticException => " + e.getMessage()); } finally { System.out.println("Ini adalah blok finally"); } } }
Output
ArithmeticException => / by zero Ini adalah blok finally
Blok finally dieksekusi setelah blok catch, memastikan kode pembersih penting berjalan meskipun pengecualian terjadi.
Praktik terbaik: Gunakan finally untuk kode apa pun yang harus berjalan terlepas dari keberhasilan atau kegagalan, seperti menutup stream atau mereset state bersama.
3. Melempar Pengecualian Secara Eksplisit dan Mendeklarasikan Throws
Kata kunci throw memungkinkan Anda untuk melempar pengecualian secara manual. Saat dilempar, kontrol meloncat langsung ke blok catch yang cocok terdekat.
Contoh: Menggunakan throw
class Main { public static void divideByZero() { throw new ArithmeticException("Mencoba membagi dengan 0"); } public static void main(String[] args) { divideByZero(); } }
Output
Exception in thread "main" java.lang.ArithmeticException: Mencoba membagi dengan 0 at Main.divideByZero(Main.java:5) at Main.main(Main.java:9)
Klausa throws, sebaliknya, mendeklarasikan bahwa suatu metode mungkin menyebarkan pengecualian yang diperiksa tertentu. Ini memberikan sinyal kepada pemanggil bahwa mereka harus menangani atau menyebarkan lebih lanjut pengecualian tersebut.
Contoh: Menggunakan throws dengan File I/O
import java.io.*; class Main { // Deklarasikan bahwa metode ini dapat melempar IOException public static void findFile() throws IOException { File newFile = new File("test.txt"); FileInputStream stream = new FileInputStream(newFile); } public static void main(String[] args) { try { findFile(); } catch (IOException e) { System.out.println(e); } } }
Output
java.io.FileNotFoundException: test.txt (The system cannot find the file specified)
Jika file tidak ada, FileInputStream melempar FileNotFoundException, yang merupakan subclass dari IOException. Karena findFile() mendeklarasikan throws IOException, metode main harus menanganinya.
Saat suatu metode tidak menangkap pengecualian secara internal, Anda harus mendeklarasikannya dengan throws untuk memberitahu pemanggil tentang potensi kegagalan.
Untuk wawasan lebih dalam, jelajahi dokumentasi throw dan throws Java.