Pemrograman Berorientasi Object Apa itu Exception? Singkatan dari Exceptional Events. Kesalahan (errors) yang terjadi saat runtime, menyebabkan gangguan pada alur eksekusi program. Contoh Error pembagian 0 Mengakses elemen di luar jangkauan sebuah array, input yang tidak benar Membuka file yang tidak ada. Pada dasarnya, Exception merupakan subkelas dari kelas java.lang.Throwable Perbedaan antara Class Error dan Class Exception di java Selain class Exception, java.lang.Throwable juga memiliki subclass yaitu class Error Error Class Untuk menangani error yang muncul pada saat dijalankan ( run-time error) dan Kemunculannya di luar control user disebabkan oleh run-time environment Contoh : out of memory, harddisk crash Exception class Menunjukkan kondisi yang dapat diterima oleh user program.Umumnya disebabkan oleh beberapa kesalahan pada kode program Contoh : Eksepsi yg tidak dapat ditangkap class Exc0 { public static void main (String args[]) { int d = 0; int a = 42 / d; } } belum mengkodekan suatu penangan eksepsi, sehingga penanganan eksepsi default akan segera dijalankan. Keluaran dari program diatas java.lang.ArithmeticExpression : /by zero at Exc0.main (Exc0.java:4) Menangani Exception Untuk menangani exception dalam Java, kita gunakan blok try-catch-finally. Pada dasarnya try digunakan untuk mengeksekusi suatu bagian program, dan jika muncul kesalahan, sistem akan melakukan throw suatu eksepsi yang dapat anda catch berdasarkan tipe eksepsinya, atau yang anda berikan finally dengan penangan default. try{ //tulis pernyataan yang dapat mengakibatkan exception //dalam blok ini } catch( <exceptionType 1> <varName1> ){ //tulis aksi apa dari program Anda yang dijalankan jika ada //exception tipe tertentu terjadi } ... catch( <exceptionType N> <varName N> ){ //tulis aksi apa dari program Anda yang dijalankan jika ada //exception tipe tertentu terjadi } finally{ //tambahkan kode terakhir di sini } Exception dilemparkan selama eksekusi dari blok try dapat ditangkap dan ditangani dalam blok catch. Kode dalam blok finally selalu di-eksekusi. Try dan Catch Kata kunci try digunakan untuk menentukan suatu blok program yang harus dijaga terhadap semua eksepsi, setelah blok try masukkan bagian catch, yang menentukan tipe eksepsi yang akan ditangkap. class Exc2 { public static void main (String args[]) { try { int d = 0; int a = 42 / d; } catch (ArithmeticException e) { System.out.println( Division By Zero ); }}} Outputnya: Division By Zero Finally Blok finally mengandung penggunaan try dan catch kode penanganan setelah Blok kode ini selalu tereksekusi walaupun sebuah exception terjadi atau tidak pada blok try. Blok kode tersebut juga akan menghasilkan nilai true meskipun return, continue ataupun break tereksekusi aspek kunci tentang sintak dari konstruksi try-catch-finally: Notasi blok bersifat perintah Setiap blok try, terdapat satu atau lebih blok catch, tetapi hanya satu blok finally. Blok catch dan blok finally harus selalu muncul dalam konjungsi dengan blok try, dan diatas urutan Blok try harus diikuti oleh paling sedikit satu blok catch ATAU satu blok finally, atau keduanya. Setiap blok catch mendefinisikan sebuah penanganan exception. Header dari blok catch harus membawa satu argumen, dimana exception pada blok tersebut akan ditangani. Exception harus menjadi class pelempar atau satu dari subclassesnya. Throw Disamping menangkap exception Java juga dapat melempar sebuah exception. Sintaks pelemparan exception cukup sederhana. throw <exception object>; Contoh : class throwDemo { static void demoProc() { try { throw new NullPointerException( demo ); } catch (NullPointerException e) { System.out.println( caught inside demoproc ); throw e; } } public static void main (String args[]) { try { demoProc(); } catch (NullPointerException e) { System.out.println( recaugt : + e); } }} Output : caught inside demoproc recaught : java.lang.NullPointerException : demo Throws Sebuah method dapat menyebabkan sebuah exception namun tidak menangkapnya, maka digunakan keyword throws. Aturan ini hanya berlaku pada checked exception. Berikut ini penulisan syntax menggunakan keyword throws : <type> <methodName> (<parameterList>) throws <exceptionList> { <methodBody> } Contoh : class ThrowsDemo { static void procedure () throws IllegalAccessException { System.out.println( Inside Procedure ); throw new IllegalAccessException( demo ); } public static void main(String args[]) { try { procedure(); } catch (IllegalAccessException e) { System.out.println( caught + e); } }} Output : Inside procedure caught java.lang.IllegalAccessException : demo contoh program yang menunjukkan beberapa method yang keluar dengan berbagai cara, tidak satupun tanpa mengeksekusi bagian finally-nyA. class finallyDemo { static void procA() { try { System.out.println( Inside procA.. ); throw new RuntimeException( Demo ); } finally { System.out.println( procA is finally ); } } static void procB() { try { System.out.println( Inside procB.. ); return; } finally { System.out.println( procB is finally ); } } public static void main(String args[]) { Output : try { procA( ); } Inside procA.. catch (Exception e){ }; procA is finally procB(); } Inside procB.. procB is finally }