IF34348 - PEMROGRAMAN LANJUT
EXCEPTION
Oleh : Andri Heryandi, M.T.
09
MATERI HARI INI IF34348 - Pemrograman Lanjut
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 IF34348 - Pemrograman Lanjut
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 IF34348 - Pemrograman Lanjut
Contoh exception: i mpor t j ava.u til. Sca nner ; p u b l i c c lass Cont ohE xcept ion1 { pu b lic stat ic v oid main (Str ing [] ar gs ) { S cann er kb=ne w Sc ann er(Sy stem .in ); i nt b 1,b 2,has il; S yste m.o ut.pr int ( " Bi langa n 1 : " );b1= kb.n ext Int () ; S yste m.o ut.pr int ( "Bi langa n 2 : " );b2= kb.n ext Int () ; h asil =b1 /b2; k b.cl ose ();// tut up scann er S yste m.o ut.pr intl n ( " H a s i l : " + ha sil ) ; S yste m.o ut.pr intl n (" Progr am d itu tup n orma l." ); } }
Oleh : Andri Heryandi, M.T.
4
EXCEPTION IF34348 - Pemrograman Lanjut
Contoh exception: Hasil RUN (Normal): ----------------------Bilangan 1 : 25 Bilangan 2 : 4 Hasil : 6 Program ditutup normal.
Hasil RUN (tidak normal): ----------------------Bilangan 1 : Bilangan 2 : Exception in at
Nama Class Exception yang terjadi
25 0 thread "main" java.lang.ArithmeticException: / by zero ContohException1.main(ContohException1.java:8)
Oleh : Andri Heryandi, M.T.
Baris perintah setelah lokasi terjadinya kesalahan (menuliskan hasil dan “program ditutup normal”) tidak tereksekusi karena program di-terminate.
5
PENANGANAN EXCEPTION IF34348 - Pemrograman Lanjut
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; }
Oleh : Andri Heryandi, M.T.
Try catch finally try{ baris penyebab exception; }catch(ClassException1 e1){ penanganan exception 1; }catch(ClassException2 e2){ penanganan exception 2; }finally{ statement-statement; }
6
PENANGANAN EXCEPTION IF34348 - Pemrograman Lanjut
Contoh penanganan exception: i mpor t j ava.u til. Sca nner ; p u b l i c c lass Cont ohE xcept ion2 { pu b lic stat ic v oid main (Str ing [] ar gs ) { S cann er kb=ne w Sc ann er(Sy stem .in ); i nt b 1,b 2,has il; t ry{ Sy ste m.out .pri nt ( "Bila ngan 1 : "); b1= k b.n extIn t (); Sy ste m.out .pri nt ( " Bila ngan 2 : "); b2= k b.n extIn t ( ) ; ha sil =b1/b 2 ; kb .cl ose () ;// tut up sc anne r Sy ste m.out .pri ntl n ( " Ha sil : " + hasi l ) ; } c atch ( Ar ithme ticE xce ption e){ Sy ste m.out .pri ntl n ( " Te rjad i E rror Pemb agi an de ngan 0. "); } S yste m.o ut.pr intl n (" Progr am d itu tup n orma l." ); } 7 Oleh : Andri Heryandi, M.T. }
PENANGANAN EXCEPTION IF34348 - Pemrograman Lanjut
Contoh penanganan exception: i mpor t j ava.u til. Sca nner ; p u b l i c c lass Cont ohE xcept ion2 { pu b lic stat ic v oid main (Str ing [] ar gs ) { S cann er kb=ne w Sc ann er(Sy stem .in ); i nt b 1,b 2,has il; t ry{ Sy ste m.out .pri nt ( "Bila ngan 1 : "); b1= k b.n extIn t (); Sy ste m.out .pri nt ( " Bila ngan 2 : "); b2= k b.n extIn t ( ) ; ha sil =b1/b 2 ; kb .cl ose () ;// tut up sc anne r Sy ste m.out .pri ntl n ( " Ha sil : " + hasi l ) ; } c atch ( Ar ithme ticE xce ption e){ Sy ste m.out .pri ntl n ( " Te rjad i E rror Pemb agi an de ngan 0. "); } S yste m.o ut.pr intl n (" Progr am d itu tup n orma l." ); } 8 Oleh : Andri Heryandi, M.T. }
PENANGANAN EXCEPTION IF34348 - Pemrograman Lanjut
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.
Oleh : Andri Heryandi, M.T.
Baris perintah setelah lokasi terjadinya kesalahan (menuliskan hasil dan “program ditutup normal”) TETAP tereksekusi walau pun terjadi exception.
9
PENANGANAN EXCEPTION BANYAK CATCH IF34348 - Pemrograman Lanjut
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): Nama Class Exception yang ----------------------terjadi Bilangan 1 : 25 Bilangan 2 : Exception in at at at at at
angka thread "main" java.util.InputMismatchException java.util.Scanner.throwFor(Unknown Source) java.util.Scanner.next(Unknown Source) java.util.Scanner.nextInt(Unknown Source) java.util.Scanner.nextInt(Unknown Source) ContohException3.main(ContohException3.java:9)
Oleh : Andri Heryandi, M.T.
10
PENANGANAN EXCEPTION BANYAK CATCH IF34348 - Pemrograman Lanjut
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 IF34348 - Pemrograman Lanjut
Contoh penanganan exception: import java.util.InputMismatchException; import java.util.Scanner; public class ContohException3 { 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."); } catch(InputMismatchException e){ System.out.println("Data yang anda masukan bukan angka"); } System.out.println("Program ditutup normal."); } }} 12 Oleh : Andri Heryandi, M.T.
PENANGANAN EXCEPTION BANYAK CATCH IF34348 - Pemrograman Lanjut
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 IF34348 - Pemrograman Lanjut
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 IF34348 - Pemrograman Lanjut import java.util.InputMismatchException ; import java.util.Scanner; public class ContohException4 { 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; System.out.println("Hasil : "+hasil); } catch(ArithmeticException e){ System.out.println("Terjadi Error Pembagian dengan 0."); } catch(InputMismatchException e){ System.out.println("Data yang anda masukan bukan angka"); } finally{ System.out.println("Tutup Scanner"); kb.close();// tutup scanner } System.out.println("Program ditutup normal."); } 15 Oleh : Andri Heryandi, M.T. }
PENGANGANAN EXCEPTION DENGAN TRY, CATCH, FINALLY IF34348 - Pemrograman Lanjut
Hasil RUN (normal): ----------------------Bilangan 1 : 28 Bilangan 2 : 7 Hasil : 4 Tutup Scanner Program ditutup normal.
Hasil RUN (tidak normal): -----------------------
“Tutup Scanner” akan dieksekusi baik ketika terjadi exception atau tidak
Bilangan 1 : 25 Bilangan 2 : angka Data yang anda masukan bukan angka Tutup Scanner Program ditutup normal. Oleh : Andri Heryandi, M.T.
16
MEMBUAT EXCEPTION SENDIRI IF34348 - Pemrograman Lanjut
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 IF34348 - Pemrograman Lanjut
Class NilaiErrorException p ubli c c lass Nila iEr rorEx cept ion exte nds Exc eptio n { p ubli c S tring get Mes sage ( ){ r etur n " N i l a i han ya b o l e h 0 s amp ai 10 0"; } }
Atau p ub l i c c lass Nila iEr rorEx cept ion exte nds Run timeE xcep tio n { p ubli c S tring get Mes sage ( ){ r etur n " N i l a i han ya b o l e h 0 s amp ai 10 0"; } }
Oleh : Andri Heryandi, M.T.
18
THROWING EXCEPTION IF34348 - Pemrograman Lanjut
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 IF34348 - Pemrograman Lanjut public class Nilai { private double nilai; public void setNilai(double n) throws NilaiErrorException{ if((n<0)||(n>100)) throw new NilaiErrorException(); else nilai=n; } public double getNilai(){ return nilai; } public static void main(String[] args){ Nilai n1; n1=new Nilai(); try{ n1.setNilai(50); System.out.println("Nilai 1 : "+n1.getNilai()); n1.setNilai(150); System.out.println("Nilai 2 : "+n1.getNilai()); }catch(NilaiErrorException e){ System.out.println(e.getMessage()); } Oleh } : Andri Heryandi, M.T.
}
20