EKSEPSI Exception o o o Exception adalah suatu

  • Slides: 34
Download presentation
EKSEPSI

EKSEPSI

Exception o o o Exception adalah suatu kondisi abnormal yang terjadi pada saat pengeksekusian

Exception o o o Exception adalah suatu kondisi abnormal yang terjadi pada saat pengeksekusian suatu perintah Karena Java everything is object, maka exception juga direpresentasikan oleh sebuah object. Pada saat terjadi exception, ada 2 pilihan yang dapat dilakukan : n n Menangani sendiri exception tersebut Meneruskannya ke luar dengan cara membuat object yang menjelaskan exception tersebut dan melemparkannya (throw) ke luar agar ditangani oleh kode yang memanggil method tsb. 2

Exception o Ada lima keywords yang digunakan oleh Java untuk menangani exception ini, yaitu

Exception o Ada lima keywords yang digunakan oleh Java untuk menangani exception ini, yaitu : n n n o try catch finally throws Secara umum bentuk penggunaannya adalah : 3

Exception o Secara umum bentuk penggunaannya adalah : try { /*kode yang mungkin mengakibatkan

Exception o Secara umum bentuk penggunaannya adalah : try { /*kode yang mungkin mengakibatkan exception*/ } catch (Tipe. Exception 1 object. Exception){ /*kode untuk menangani exception yang cocok dengan Tipe. Exception 1 */ } catch (Tipe. Exception 2 object. Exception){ /*kode untuk menangani exception yang cocok dengan Tipe. Exception 2 */ } finally { /*kode yang pasti akan dieksekusi setelah blok try catch di atas dieksekusi*/ } 4

Tipe-tipe Exception 5

Tipe-tipe Exception 5

Tipe-tipe Exception o o Semua class exception terdapat dalam package java. lang. Superclass tertinggi

Tipe-tipe Exception o o Semua class exception terdapat dalam package java. lang. Superclass tertinggi adalah class Throwable, tetapi kita hampir tidak pernah menggunakan class ini secara langsung Class Error tipe exception yang seharusnya tidak ditangani dengan menggunakan blok try catch karena berhubungan dengan Java run-time system/environment. Jadi exception yang terjadi kemungkinannya sangat kristis yang sebaiknya tidak ditangani oleh program kita sendiri. Class Exception tipe exception yang sebaiknya ditangani oleh program kita secara langsung. n Dalam penggunaannya, kita akan banyak menangani exception yg merupakan turunan dari class Exception ini. Salah satu turunannya yang perlu diperhatikan adalah class Runtime. Exception, karena Java memperlakukan class ini & turunannya secara berbeda. 6

Exception yang tidak dicek o o Semua Exception yang bertipe Runtime. Exception dan turunannya

Exception yang tidak dicek o o Semua Exception yang bertipe Runtime. Exception dan turunannya tidak harus secara explicit ditangani dalam program kita. Salah satu contoh tipe exception ini ; n o Array. Index. Out. Of. Bounds. Exception Contoh : public class Demo. Exception { public static void main (String args[]) { int angka[]={10, 20, 30}; for (int i=0; i<=3; i++) { System. out. println(angka[i]); } System. out. println("Program Selesai"); } }; 7

Exception yang tidak dicek (cont. ) o o Program tersebut di atas langsung bisa

Exception yang tidak dicek (cont. ) o o Program tersebut di atas langsung bisa dikompilasi. Hasil eksekusinya (running) : 10 20 30 java. lang. Array. Index. Out. Of. Bounds. Exception: 3 at Demo. Exception. main(Demo. Exception. java: 5) Exception in thread "main" Normal Termination o Exception di atas terjadi karena program mencoba mengakses nilai dari array yang terdapat pada indeks di luar kapasitas array itu sendiri 8

Exception yang dicek o o o Semua tipe exception yang bukan turunan dari class

Exception yang dicek o o o Semua tipe exception yang bukan turunan dari class Runtime. Exception merupakan exception yang “harus” ditangani menggunakan blok try catch. Java bahkan tidak mengijinkan kita mengkompilasi program yang kita buat, jika tidak menangani exception tersebut. Contoh : 1. 2. 3. 4. 5. 6. 7. import java. io. *; public class Demo. File. Exception { public static void main(String[] args) { File test = new File(“d: \test. txt"); test. create. New. File(); } } 9

Exception yang dicek (cont. ) o o Program di atas digunakan untuk membuat sebuah

Exception yang dicek (cont. ) o o Program di atas digunakan untuk membuat sebuah file dengan nama test. txt, namun method create. New. File() pada class File dapat mengakibatkan exception yang bertipe java. io. IOException yang bukan turunan dari class Runtime. Exception Jika program di atas dikompilasi maka akan memunculkan pesan : Demo. File. Exception. java: 6: unreported exception java. io. IOException; must be caught or declared to be thrown test. create. New. File(); ^ 1 error o Exception ini harus ditangani dengan blok try catch. 10

Exception yang dicek (cont. ) o Agar program di atas bisa dikompilasi, maka gunakan

Exception yang dicek (cont. ) o Agar program di atas bisa dikompilasi, maka gunakan blok try catch seperti contoh berikut : 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. import java. io. *; public class Demo. File. Exception { public static void main(String[] args) { try { File test = new File(“d: \test. txt"); test. create. New. File(); } catch (IOException e) { System. out. println(“Terjadi Exception”); System. out. println(e); } System. out. println(“Program Selesai”); } } 11

Penggunaan Blok try catch o o Walaupun penanganan exception secara default cukup bermanfaat, namun

Penggunaan Blok try catch o o Walaupun penanganan exception secara default cukup bermanfaat, namun terkadang kita ingin menangani exception tersebut dengan cara yang berbeda. Ada beberapa alasan mengapa kita ingin melakukan ini : n n n Kita ingin program kita memperbaiki kesalahan akibat exception & terus melanjutkan eksekusi seolah-olah tidak pernah terjadi exception Kita ingin program terus berjalan dan bukannya dihentikan pada saat exception terjadi. User umumnya tidak mengerti dengan pesan kesalahan yang dimunculkan, apalagi beserta stack tracenya sehingga kurang bermanfaat untuk user. Jadi kita mungkin ingin mengganti pesan tersebut menjadi pesan yang lebih mudah dimengerti. 12

Penggunaan Blok try catch 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.

Penggunaan Blok try catch 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. public class Demo. Exception { public static void main (String args[]) { try { int angka[]={10, 20, 30}; for (int i=0; i<=3; i++) { System. out. println(angka[i]); } System. out. println("Baris ini tidak dieksekusi"); } catch (Array. Index. Out. Of. Bounds. Exception e) { System. out. println("Terjadi Exception"); } System. out. println("Program Selesai"); } }; OUTPUT : 10 20 30 Terjadi Exception Program Selesai Atau Program di atas bisa juga ditulis dalam bentuk, seperti di bawah ini : 13

Penggunaan Blok try catch 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.

Penggunaan Blok try catch 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. class Coba{ public void tampil() { try { int angka[]={10, 20}; for (int i=0; i<=2; i++) System. out. println(angka[i]); System. out. println("Baris ini tidak dieksekusi"); } catch (Array. Index. Out. Of. Bounds. Exception e) { System. out. println("Terjadi Exception"); } } }; public class Demo. Exception { public static void main (String args[]) { Coba c = new Coba(); c. tampil(); System. out. println("Program Selesai"); } }; 14

Penggunaan Blok try catch 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.

Penggunaan Blok try catch 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. class Coba{ public void tampil() { int angka[]={10, 20}; for (int i=0; i<=2; i++) System. out. println(angka[i]); } }; public class Demo. Exception { public static void main (String args[]) { Coba c = new Coba(); try { c. tampil(); System. out. println("Baris ini tidak dieksekusi"); } catch (Array. Index. Out. Of. Bounds. Exception e) { System. out. println("Terjadi Exception"); } System. out. println("Program Selesai"); } }; 15

Penggunaan lebih dari satu catch o o o Kode yang terdapat pada blok try

Penggunaan lebih dari satu catch o o o Kode yang terdapat pada blok try bisa mengakibatkan lebih dari satu exception. Dalam hal ini, kita dapat menuliskan lebih dari blok catch untuk setiap blok try. Contoh : 1. public class Demo. Try. Catch 2. { 3. public static void main(String[] args) 4. { 5. try { 6. int x = 0; 7. int y = 100/x; 8. int[] arr = {10, 11}; 9. y = arr[x]; 10. System. out. println("Tidak terjadi Exception"); 11. } 12. catch (Arithmetic. Exception e) { 13. System. out. println("Terjadi pembagian nol"); 14. } 15. catch (Array. Index. Out. Of. Bounds. Exception e) { 16. System. out. println("Index di luar kapasitas array"); 17. } 18. System. out. println("Program Selesai"); 19. } 20. } 16

Penggunaan lebih dari satu catch (cont. ) o Pada program di atas, jika nilai

Penggunaan lebih dari satu catch (cont. ) o Pada program di atas, jika nilai x=0 maka outputnya : n n o Jika nilai x=1, maka outputnya : n n o Terjadi pembagian nol Program Selesai Tidak terjadi Exception Program Selesai Jika nilai x=2, maka outputnya : n n Index di luar kapasitas array Program Selesai 17

Penggunaan lebih dari satu catch (cont. ) o o Dengan demikian terlihat bahwa blok

Penggunaan lebih dari satu catch (cont. ) o o Dengan demikian terlihat bahwa blok catch yang mana yang dieksekusi oleh Java tergantung pada exception yang terjadi. Dalam menggunakan lebih dari satu blok catch, perlu diperhatikan bahwa blok catch dengan tipe data subclass harus ditulis terlebih dahulu baru diikuti dengan blok catch dengan tipe data superclass. 18

Penggunaan lebih dari satu catch (cont. ) Contoh (yang benar): 1. public class Demo.

Penggunaan lebih dari satu catch (cont. ) Contoh (yang benar): 1. public class Demo. Try. Catch 2. { 3. public static void main(String[] args) 4. { 5. try { 6. int x = 2; 7. int y = 100/x; 8. int[] arr = {10, 11}; 9. y = arr[x]; 10. System. out. println("Tidak terjadi Exception"); 11. } 12. catch (Arithmetic. Exception e) { 13. System. out. println("Terjadi pembagian nol"); 14. } 15. catch (Array. Index. Out. Of. Bounds. Exception e) { 16. System. out. println("Index di luar kapasitas array"); 17. } 18. catch (Exception e) { 19. System. out. println("Exception yang tidak diketahui"); 20. } 21. System. out. println("Program Selesai"); 22. } 19 23. }

Penggunaan lebih dari satu catch (cont. ) Contoh (yang salah): 1. public class Demo.

Penggunaan lebih dari satu catch (cont. ) Contoh (yang salah): 1. public class Demo. Try. Catch 2. { 3. public static void main(String[] args) 4. { 5. try { 6. int x = 2; 7. int y = 100/x; 8. int[] arr = {10, 11}; 9. y = arr[x]; 10. System. out. println("Tidak terjadi Exception"); 11. } 12. catch (Exception e) { 13. System. out. println("Exception yang tidak diketahui"); 14. } 15. catch (Arithmetic. Exception e) { 16. System. out. println("Terjadi pembagian nol"); 17. } 18. catch (Array. Index. Out. Of. Bounds. Exception e) { 19. System. out. println("Index di luar kapasitas array"); 20. } 21. System. out. println("Program Selesai"); 22. } 23. } 20

Common Exception o o o Arithmetic. Exception Null. Pointer. Exception Negative. Array. Size. Exception

Common Exception o o o Arithmetic. Exception Null. Pointer. Exception Negative. Array. Size. Exception Array. Index. Out. Of. Bounds. Exception Security. Exception 21

Pemakaian throw o Secara eksplist, kita dapat melempar (throw) exception dari dalam program dengan

Pemakaian throw o Secara eksplist, kita dapat melempar (throw) exception dari dalam program dengan menggunakan keyword throw. Secara umum penggunaannya adalah : throw Exception. Object o Exception. Object adalah object-object instan dari class yang merupakan turunan dari class Throwable. 22

Contoh Pemakaian throw (benar) class Coba { 2. public void tampil() { 3. try

Contoh Pemakaian throw (benar) class Coba { 2. public void tampil() { 3. try { 4. int x=0; 5. if (x<5) 6. throw new Exception("Lebih kecil 5"); 7. } 8. catch (Exception e) { 9. System. out. println(e. get. Message()); 10. } 11. } 12. }; 1. public class Demo. Exception { 14. public static void main (String args[]) { 15. Coba c = new Coba(); 16. c. tampil(); 17. System. out. println("Program Selesai"); 18. } 19. }; 13. 23

Contoh Pemakaian throw (salah) 1. 2. 3. 4. 5. 6. 7. class Coba {

Contoh Pemakaian throw (salah) 1. 2. 3. 4. 5. 6. 7. class Coba { public void tampil() { int x=0; if (x<5) throw new Exception("Lebih kecil 5"); } }; public class Demo. Exception { 9. public static void main (String args[]) { 10. Coba c = new Coba(); 11. c. tampil(); 12. System. out. println("Program Selesai"); 13. } 14. }; 8. 24

Contoh Pemakaian throw (benar) 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.

Contoh Pemakaian throw (benar) 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. class Coba { public void tampil() { try { int angka[]={10, 20, 30}; for (int i=0; i<=2; i++) { if (i>=2) throw new Array. Index. Out. Of. Bounds. Exception("Salah Array"); else System. out. println(angka[i]); } System. out. println("Baris ini tidak dieksekusi"); } catch (Array. Index. Out. Of. Bounds. Exception e) { System. out. println(e. get. Message()); } } }; public class Demo. Exception { public static void main (String args[]) { Coba c = new Coba(); c. tampil(); System. out. println("Program Selesai"); } }; 25

Contoh Pemakaian throw (benar) 1. 2. 3. 4. 5. 6. class Coba { public

Contoh Pemakaian throw (benar) 1. 2. 3. 4. 5. 6. class Coba { public void tampil() { int angka[]={10, 20, 30}; for (int i=0; i<=2; i++) { if (i>=2) throw new Array. Index. Out. Of. Bounds. Exception("Salah Array"); else System. out. println(angka[i]); 7. 8. } 9. } 10. 11. }; public class Demo. Exception { 13. public static void main (String args[]) { 14. Coba c = new Coba(); 15. c. tampil(); 16. System. out. println("Program Selesai"); 17. } 18. }; 12. 26

Pemakaian Finally o o o Penggunaan blok try catch terkadang membingungkan karena kita tidak

Pemakaian Finally o o o Penggunaan blok try catch terkadang membingungkan karena kita tidak dapat menentukan dengan pasti alur mana yang akan dieksekusi. Apalagi penggunaan throw yang mengakibatkan kode setelah throw tidak akan dieksekusi atau justru terjadi kesalahan pada blok catch, menyebabkan program akan berhenti. Untuk mengatasi problem ini, Java memperkenalkan keyword finally. Dimana semua kode yang ada dalam blok finally “pasti” akan dieksekusi apapun yang terjadi di dalam blok try catch. 27

Pemakaian Finally Contoh: 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.

Pemakaian Finally Contoh: 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. public class Demo. Finally { public static void main(String[] args) { int x = 3; int[] arr = {10, 11, 12}; try { System. out. println(arr[x]); System. out. println("Tidak Terjadi Eksepsi"); } catch (Array. Index. Out. Of. Bounds. Exception e) { System. out. println("Terjadi Eksepsi"); System. out. println(arr[x-4]); } System. out. println("Program Selesai"); } } 28

Pemakaian Finally o o o Program di atas menunjukkan bahwa terjadi exception pada baris

Pemakaian Finally o o o Program di atas menunjukkan bahwa terjadi exception pada baris ke-8, sehingga menyebabkan program menjalan kode yang ada dalam blok catch. Tetapi dalam blok catch pun terjadi exception, sehingga program akan berhenti, sehingga kode pada baris ke-15, tidak akan dijalankan. Bagaimana seandainya kode pada baris ke-15 itu adalah hal yang sangat penting? Solusinya : Gunakan finally 29

Pemakaian Finally Contoh: 1. public class Demo. Finally 2. { 3. public static void

Pemakaian Finally Contoh: 1. public class Demo. Finally 2. { 3. public static void main(String[] args) 4. { 5. int x = 3; 6. int[] arr = {10, 11, 12}; 7. try { 8. System. out. println(arr[x]); 9. System. out. println("Tidak Terjadi Eksepsi"); 10. } 11. catch (Array. Index. Out. Of. Bounds. Exception e) { 12. System. out. println("Terjadi Eksepsi"); 13. System. out. println(arr[x-4]); 14. } 15. finally { 16. System. out. println("Program Selesai"); 17. } 18. } 19. } 30

Pemakaian throws o o o Penggunaan keyword ini berhubungan erat dengan penggunaan exception yang

Pemakaian throws o o o Penggunaan keyword ini berhubungan erat dengan penggunaan exception yang dicek oleh Java. Setiap method yang mungkin menyebabkan suatu exception & tidak menangani exception tsb, dalam arti exception tsb akan dilempar ke luar, maka method tsb harus menjelaskan kemungkinan ini agar si pemanggil method ini dapat mengetahui & bersiap-siap untuk menangani exception yg mungkin terjadi. Ini dilakukan dengan cara menggunakan keyword throws pada saat pendeklarasian method. 31

Contoh Pemakaian throws (benar) 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.

Contoh Pemakaian throws (benar) 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. class Coba { public void tampil() throws Exception { int x=0; if (x<5) throw new Exception("Lebih kecil 5"); } }; public class Demo. Exception { public static void main (String args[]) { Coba c = new Coba(); try { c. tampil(); } catch (Exception e) { System. out. println(e. get. Message()); } System. out. println("Program Selesai"); } }; 32

Membuat Exception sendiri 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.

Membuat Exception sendiri 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. class My. Exception extends Exception { private int kode; public My. Exception (String msg, int kd) { super(msg); kode = kd; } public int get. Kode() { return kode; } }; class Test. A { public void tampil() throws My. Exception { int angka[]={10, 20, 30}; for (int i=0; i<=10; i++) { if (i>=3) throw new My. Exception("Program Salah", 99); else System. out. println(angka[i]); } } }; 33

10. public class Demo. Exception 2 { public static void main (String args[]) {

10. public class Demo. Exception 2 { public static void main (String args[]) { Test. A a = new Test. A(); try { a. tampil(); } catch (My. Exception e) { System. out. println("Pesan : " +e. get. Message()); System. out. println("Kode : " +e. get. Kode()); } 11. System. out. println("Program Selesai"); 1. 2. 3. 4. 5. 6. 7. 8. 9. } 12. 13. }; 34