Java Global Exception Handler

1. Ikhtisar

Dalam tutorial ini, kita akan fokus pada Global Exception Handler di Java. Kami pertama-tama akan membahas dasar-dasar pengecualian dan penanganan pengecualian. Kemudian kita akan melihat secara komprehensif pengendali pengecualian global.

Untuk mempelajari lebih lanjut tentang pengecualian secara umum, lihat Penanganan Pengecualian di Java.

2. Apa Itu Pengecualian?

Pengecualian adalah kondisi abnormal yang muncul dalam urutan kode pada waktu proses atau pada waktu kompilasi. Kondisi abnormal ini muncul ketika suatu program melanggar batasan semantik bahasa pemrograman Java.

Pengecualian yang terjadi selama waktu kompilasi diperiksa pengecualian . Pengecualian ini adalah subclass langsung dari kelas Exception , dan pengecualian ini perlu ditangani dalam kode.

Jenis pengecualian lainnya adalah pengecualian yang tidak dicentang . Kompilator tidak memeriksa pengecualian ini selama waktu kompilasi. Pengecualian ini adalah subclass langsung dari kelas RuntimeException yang memperluas kelas Exception .

Selain itu, tidak perlu menangani pengecualian waktu proses dalam kode.

3. Penangan Pengecualian

Java adalah bahasa pemrograman yang kuat. Salah satu fitur inti yang membuatnya kuat adalah kerangka penanganan pengecualian. Ini berarti program dapat keluar dengan baik pada saat terjadi kesalahan, bukan hanya mogok.

Setiap kali terjadi pengecualian, objek E xception dibangun , baik oleh JVM atau dengan metode yang menjalankan kode. Objek ini berisi informasi tentang pengecualian. Penanganan Exception adalah cara untuk menangani objek Exception ini .

3.1. The try-catch Blok

Dalam contoh berikut, blok percobaan berisi kode yang dapat memunculkan pengecualian. The menangkap blok berisi logika untuk menangani pengecualian ini.

The menangkap blok menangkap Exception objek bahwa kode di try kenaikan gaji blok:

String string = "01, , 2010"; DateFormat format = new SimpleDateFormat("MM, dd, yyyy"); Date date; try { date = format.parse(string); } catch (ParseException e) { System.out.println("ParseException caught!"); }

3.2. The melempar dan melempar Kata Kunci

Alternatifnya, metode ini juga dapat memilih untuk menampilkan pengecualian daripada menanganinya. Itu berarti logika untuk menangani objek Exception ditulis di tempat lain.

Biasanya, metode panggilan menangani pengecualian dalam kasus seperti ini:

public class ExceptionHandler { public static void main(String[] args) { String strDate = "01, , 2010"; String dateFormat = "MM, dd, yyyy"; try { Date date = new DateParser().getParsedDate(strDate, dateFormat); } catch (ParseException e) { System.out.println("The calling method caught ParseException!"); } } } class DateParser { public Date getParsedDate(String strDate, String dateFormat) throws ParseException { DateFormat format = new SimpleDateFormat(dateFormat); try { return format.parse(strDate); } catch (ParseException parseException) { throw parseException; } } }

Selanjutnya, kita akan mempertimbangkan Penangan Pengecualian Global, sebagai cara umum untuk menangani pengecualian.

4. Penangan Pengecualian Global

Contoh RuntimeException adalah opsional untuk ditangani. Akibatnya, ini masih menyisakan jendela terbuka untuk mendapatkan jejak tumpukan yang panjang pada waktu proses. Untuk menangani ini, Java menyediakan antarmuka UncaughtExceptionHandler . Kelas Thread berisi ini sebagai kelas dalam.

Selain antarmuka ini, rilis Java 1.5 juga memperkenalkan metode statis setDefaultUncaughtExceptionHandler () di kelas Thread . Argumen metode ini adalah kelas penangan yang mengimplementasikan antarmuka UncaughtExceptionHandler .

Lebih lanjut, antarmuka ini mendeklarasikan metode uncaughtException (Thread t, Throwable e) . Ini akan dipanggil ketika utas tertentu t berakhir karena pengecualian tidak tertangkap yang diberikan e . Kelas pelaksana mengimplementasikan metode ini dan mendefinisikan logika untuk menangani pengecualian yang tidak tertangkap ini.

Mari pertimbangkan contoh berikut yang menampilkan ArithmeticException pada waktu proses. Kami mendefinisikan kelas Handler yang mengimplementasikan antarmuka UncaughtExceptionHandler .

Kelas ini mengimplementasikan metode uncaughtException () dan mendefinisikan logika untuk menangani pengecualian yang tidak tertangkap di dalamnya:

public class GlobalExceptionHandler { public static void main(String[] args) { Handler globalExceptionHandler = new Handler(); Thread.setDefaultUncaughtExceptionHandler(globalExceptionHandler); new GlobalExceptionHandler().performArithmeticOperation(10, 0); } public int performArithmeticOperation(int num1, int num2) { return num1/num2; } } class Handler implements Thread.UncaughtExceptionHandler { private static Logger LOGGER = LoggerFactory.getLogger(Handler.class); public void uncaughtException(Thread t, Throwable e) { LOGGER.info("Unhandled exception caught!"); } }

Di sini, utas yang saat ini dieksekusi adalah utas utama. Jadi, instance-nya diteruskan ke metode uncaughtException () bersama dengan pengecualian yang dimunculkan. Class Handler kemudian menangani pengecualian ini.

Hal yang sama berlaku untuk pengecualian yang tidak tertangani. Mari kita lihat contoh singkatnya juga:

public static void main(String[] args) throws Exception { Handler globalExceptionHandler = new Handler(); Thread.setDefaultUncaughtExceptionHandler(globalExceptionHandler); Path file = Paths.get(""); Files.delete(file); }

Di sini, metode Files.delete () melontarkan IOException yang diperiksa , yang selanjutnya dilemparkan oleh tanda tangan metode main () . The Handler akan menangkap pengecualian ini juga.

Dengan cara ini, UncaughtExceptionHandler membantu dalam mengelola pengecualian yang tidak tertangani pada waktu proses. Namun, itu mematahkan gagasan menangkap dan menangani pengecualian yang dekat dengan titik asal .

5. Kesimpulan

Pada artikel ini, kami meluangkan waktu untuk memahami apa itu pengecualian, dan apa cara dasar untuk menanganinya. Selain itu, kami mengidentifikasi bahwa penangan pengecualian global adalah bagian dari kelas Thread dan menangani pengecualian waktu proses yang tidak tertangkap.

Kemudian, kami melihat program sampel yang menampilkan pengecualian waktu proses dan menanganinya menggunakan penangan pengecualian global.

Kode contoh untuk artikel ini dapat ditemukan di GitHub.