IF34348 - PEMROGRAMAN LANJUT EXCEPTION 09 Oleh : Andri Heryandi, M.T.
MATERI HARI INI Exception Penanganan Exception Penanganan Exception satu catch Penanganan Exception dengan banyak catch Pengaganan Exception dengan finally Membuat exception sendiri Oleh : Andri Heryandi, M.T. 2
EXCEPTION Exception adalah suatu kejadian/event yang terjadi ketika eksekusi program yang akan mengganggu alur program. Dengan exception, alur program dapat diatur agar melakukan suatu proses ketika sebuah error terjadi. Contoh kejadian : Pembagian dengan angka 0 File tidak ditemukan Koneksi jaringan terputus ketika membaca data Oleh : Andri Heryandi, M.T. 3
EXCEPTION Contoh exception: import java.util.scanner; public class ContohException1 { public static void main(string[] args) { Scanner kb=new Scanner(System.in); int b1,b2,hasil; System.out.print("Bilangan 1 : ");b1=kb.nextint(); System.out.print("Bilangan 2 : ");b2=kb.nextint(); hasil=b1/b2; kb.close();// tutup scanner System.out.println("Hasil : "+hasil); System.out.println("Program ditutup normal."); Oleh : Andri Heryandi, M.T. 4
EXCEPTION Contoh exception: Hasil RUN (Normal): ----------------------- Bilangan 1 : 25 Bilangan 2 : 4 Hasil : 6 Program ditutup normal. Hasil RUN (tidak normal): ----------------------- Bilangan 1 : 25 Bilangan 2 : 0 Nama Class Exception yang terjadi Exception in thread "main" java.lang.arithmeticexception: / by zero at ContohException1.main(ContohException1.java:8) Baris perintah setelah lokasi terjadinya kesalahan (menuliskan hasil dan program ditutup normal ) tidak tereksekusi karena program di-terminate. Oleh : Andri Heryandi, M.T. 5
PENANGANAN EXCEPTION Penanganan exception dapat dilakukan dengan menggunakan Block try catch Block try catch finally Sintak try catch try{ baris penyebab exception; catch(classexception1 e1){ penanganan exception 1; catch(classexception2 e2){ penanganan exception 2; Try catch finally try{ baris penyebab exception; catch(classexception1 e1){ penanganan exception 1; catch(classexception2 e2){ penanganan exception 2; finally{ statement-statement; Oleh : Andri Heryandi, M.T. 6
PENANGANAN EXCEPTION Contoh penanganan exception: import java.util.scanner; public class ContohException2 { public static void main(string[] args) { Scanner kb=new Scanner(System.in); int b1,b2,hasil; try{ System.out.print("Bilangan 1 : ");b1=kb.nextint(); System.out.print("Bilangan 2 : ");b2=kb.nextint(); hasil=b1/b2; kb.close();// tutup scanner System.out.println("Hasil : "+hasil); catch(arithmeticexception e){ System.out.println("Terjadi Error Pembagian dengan 0."); System.out.println("Program ditutup normal."); Oleh : Andri Heryandi, M.T. 7
PENANGANAN EXCEPTION Contoh penanganan exception: import java.util.scanner; public class ContohException2 { public static void main(string[] args) { Scanner kb=new Scanner(System.in); int b1,b2,hasil; try{ System.out.print("Bilangan 1 : ");b1=kb.nextint(); System.out.print("Bilangan 2 : ");b2=kb.nextint(); hasil=b1/b2; kb.close();// tutup scanner System.out.println("Hasil : "+hasil); catch(arithmeticexception e){ System.out.println("Terjadi Error Pembagian dengan 0."); System.out.println("Program ditutup normal."); Oleh : Andri Heryandi, M.T. 8
PENANGANAN EXCEPTION Contoh penanganan exception: Hasil RUN (Normal): ----------------------- Bilangan 1 : 25 Bilangan 2 : 4 Hasil : 6 Program ditutup normal. Hasil RUN (tidak normal): ----------------------- Bilangan 1 : 25 Bilangan 2 : 0 Terjadi Error Pembagian dengan 0. Program ditutup normal. Baris perintah setelah lokasi terjadinya kesalahan (menuliskan hasil dan program ditutup normal ) TETAP tereksekusi walau pun terjadi exception. Oleh : Andri Heryandi, M.T. 9
PENANGANAN EXCEPTION BANYAK CATCH Jika sebuah/sekumpulan statement memiliki banyak kemungkinan exception, maka untuk penanganan tiap exception bisa menggunakan block try yang memiliki banyak catch. Contoh Kasus : Pada contoh program sebelumnya (class ContohException2) ada baris kb.nextint() yang berguna untuk membaca sebuah integer dari keyboard. Bagaimana kalau yang diinputkan bukan integer, tapi string? Hasil RUN (tidak normal): ----------------------- Bilangan 1 : 25 Bilangan 2 : angka Exception in thread "main" java.util.inputmismatchexception at java.util.scanner.throwfor(unknown Source) at java.util.scanner.next(unknown Source) at java.util.scanner.nextint(unknown Source) at java.util.scanner.nextint(unknown Source) Nama Class Exception yang terjadi at ContohException3.main(ContohException3.java:9) Oleh : Andri Heryandi, M.T. 10
PENANGANAN EXCEPTION BANYAK CATCH Solusi : Berarti ada 2 exception yang harus dihandle dalam program tersebut yaitu ArithmeticException dan InputMismatchException Bagaimana saya tahu exception yang dilempar oleh sebuah Method? Lihat deskripsi method tersebut di javadoc Oleh : Andri Heryandi, M.T. 11
PENANGANAN EXCEPTION BANYAK CATCH Contoh penanganan exception: i m p o r t j a v a. u t i l. I n p u t M i s m a t c h E x c e p t i o n ; i m p o r t j a v a. u t i l. S c a n n e r ; p u b l i c c l a s s C o n t o h E x c e p t i o n 3 { p u b l i c s t a t i c v o i d m a i n ( S t r i n g [ ] a r g s ) { S c a n n e r k b = n e w S c a n n e r ( S y s t e m. i n ) ; int b 1, b 2, h a s i l ; try{ S y s t e m. o u t. p r i n t ("Bilangan 1 : " ) ; b 1 = k b. n e x t I n t (); S y s t e m. o u t. p r i n t ("Bilangan 2 : " ) ; b 2 = k b. n e x t I n t (); hasil= b 1 / b 2 ; k b. c l o s e ( ) ; / / t u t u p s c a n n e r S y s t e m. o u t. p r i n t l n ("Hasil : "+hasil); c a t c h ( A r i t h m e t i c E x c e p t i o n e){ S y s t e m. o u t. p r i n t l n ("Terjadi E r r o r P e m b a g i a n d e n g a n 0. " ) ; c a t c h ( I n p u t M i s m a t c h E x c e p t i o n e ) { S y s t e m. o u t. p r i n t l n ( " D a t a y a n g anda m a s u k a n b u k a n a n g k a " ) ; S y s t e m. o u t. p r i n t l n ( " P r o g r a m d i t u t u p n o r m a l. " ) ; Oleh : Andri Heryandi, M.T. 12
PENANGANAN EXCEPTION BANYAK CATCH Hasil RUN (tidak normal): ----------------------- Bilangan 1 : 25 Bilangan 2 : angka Data yang anda masukan bukan angka Program ditutup normal. Oleh : Andri Heryandi, M.T. 13
PENGANGANAN EXCEPTION DENGAN TRY, CATCH, FINALLY Jika sebuah exception terjadi, maka baris-baris di blok try setelah baris terjadinya exception pasti tidak akan tereksekusi karena alur program akan pindah ke blok catch. Jika baris-baris dibawah lokasi exception ingin tetap dijalankan ketika terjadi exception atau pun tidak terjadi exception, maka tulislah perintah-perintah tersebut di bagian finally. Finally ditulis di bawah catch. Blok finally PASTI dieksekusi walau pun tidak terjadi exception. Blok finally biasanya digunakan untuk melepas resource (tutup file, tutup koneksi ke jaringan, free memory dll). Oleh : Andri Heryandi, M.T. 14
PENGANGANAN EXCEPTION DENGAN TRY, CATCH, FINALLY i m p o r t j a v a. u t i l. I n p u t M i s m a t c h E x c e p t i o n ; i m p o r t j a v a. u t i l. S c a n n e r ; p u b l i c c l a s s C o n t o h E x c e p t i o n 4 { p u b l i c s t a t i c v o i d m a i n ( S t r i n g [ ] a r g s ) { S c a n n e r k b = n e w S c a n n e r ( S y s t e m. i n ) ; int b 1, b 2, h a s i l ; try{ S y s t e m. o u t. p r i n t ("Bilangan 1 : " ) ; b 1 = k b. n e x t I n t (); S y s t e m. o u t. p r i n t ("Bilangan 2 : " ) ; b 2 = k b. n e x t I n t (); hasil= b 1 / b 2 ; S y s t e m. o u t. p r i n t l n ("Hasil : "+hasil); c a t c h ( A r i t h m e t i c E x c e p t i o n e){ S y s t e m. o u t. p r i n t l n ("Terjadi E r r o r P e m b a g i a n d e n g a n 0. " ) ; c a t c h ( I n p u t M i s m a t c h E x c e p t i o n e ) { S y s t e m. o u t. p r i n t l n ( " D a t a y a n g anda m a s u k a n b u k a n a n g k a " ) ; f i n a l l y { S y s t e m. o u t. p r i n t l n ("Tutup S c a n n e r " ) ; k b. c l o s e ( ) ; / / t u t u p s c a n n e r S y s t e m. o u t. p r i n t l n ( " P r o g r a m d i t u t u p n o r m a l. " ) ; Oleh : Andri Heryandi, M.T. 15
PENGANGANAN EXCEPTION DENGAN TRY, CATCH, FINALLY Hasil RUN (normal): ----------------------- Bilangan 1 : 28 Bilangan 2 : 7 Hasil : 4 Tutup Scanner Program ditutup normal. Hasil RUN (tidak normal): ----------------------- Bilangan 1 : 25 Bilangan 2 : angka Data yang anda masukan bukan angka Tutup Scanner Program ditutup normal. Tutup Scanner akan dieksekusi baik ketika terjadi exception atau tidak Oleh : Andri Heryandi, M.T. 16
MEMBUAT EXCEPTION SENDIRI Tidak semua exception yang telah didefinisikan oleh Java mendukung semua kebutuhan kita. Contoh Kasus : Untuk nilai suatu mata kuliah, nilai hanya boleh 0 sampai 100. Java tidak memiliki exception untuk menangani exception tersebut. Solusi : Buatlah exception sendiri Cara membuat exception sendiri : Buat sebuah class turunan dari Exception atau RuntimeException Exception yang menggunakan super class Exception disebut sebagai checked exception. Jika suatu method melemparkan exception jenis ini, maka pemanggilan method ini harus dalam blok try-catch. Exception yang menggunakan super class RuntimeException disebut sebagai unchecked exception. Jika suatu method melemparkan exception jenis ini, maka pemanggilan method ini tidak harus dalam blok try-catch. Oleh : Andri Heryandi, M.T. 17
MEMBUAT EXCEPTION SENDIRI Class NilaiErrorException public class NilaiErrorException extends Exception { public String getmessage(){ Atau return "Nilai hanya boleh 0 sampai 100"; public class NilaiErrorException extends RuntimeException { public String getmessage(){ return "Nilai hanya boleh 0 sampai 100"; Oleh : Andri Heryandi, M.T. 18
THROWING EXCEPTION Throwing Exception adalah suatu operasi melemparkan sebuah exception ketika sebuah exception terjadi. Perintah untuk melempar sebuah exception adalah throw. Untuk mendefinisikan sebuah method bisa melemparkan exception tertentu, maka gunakan keyword throws di pendefinisian method, diikuti dengan class exceptionnya. Oleh : Andri Heryandi, M.T. 19
THROWING EXCEPTION p u b l i c c l a s s N i l a i { p r i v a t e d o u b l e nilai; p u b l i c v o i d s e t N i l a i ( d o u b l e n ) t h r o w s N i l a i E r r o r E x c e p t i o n { i f ( ( n < 0 ) ( n > 1 0 0 ) ) t h r o w n e w N i l a i E r r o r E x c e p t i o n ( ) ; else nilai=n; p u b l i c d o u b l e g e t N i l a i ( ) { r e t u r n n i l a i ; p u b l i c s t a t i c v o i d m a i n ( S t r i n g [ ] a r g s ){ Nilai n 1 ; n 1 = n e w N i l a i (); try{ n 1. s e t N i l a i ( 5 0 ) ; S y s t e m. o u t. p r i n t l n ("N i l a i 1 : " + n 1. g e t N i l a i ( ) ) ; n 1. s e t N i l a i ( 1 5 0 ) ; S y s t e m. o u t. p r i n t l n ("N i l a i 2 : " + n 1. g e t N i l a i ( ) ) ; c a t c h ( N i l a i E r r o r E x c e p t i o n e){ S y s t e m. o u t. p r i n t l n ( e. g e t M e s s a g e ()); Oleh : Andri Heryandi, M.T. 20