Exception Handling

32
OBJECT ORIENTED PROGAMMING EXCEPTION HANDLING Disusun Oleh : Dany Triono Gregorius Airlangga Novi Tasari Igmal Trisnawan Jurusan Sistem Informatika – STIKOM YOS SUDARSO Purwokerto

description

 

Transcript of Exception Handling

Page 1: Exception Handling

OBJECT ORIENTED PROGAMMINGEXCEPTION HANDLING

Disusun Oleh :

Dany Triono Gregorius Airlangga

Novi TasariIgmal Trisnawan

Jurusan Sistem Informatika – STIKOM YOS SUDARSO

Purwokerto

Page 2: Exception Handling

TUJUAN2

Mengerti Exception Handling dan mampu mengimplementasikan dalam bahasa pemrograman Java.

Mengerti dan mampu membuat kelas exception

Page 3: Exception Handling

PENDAHULUAN3

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 : 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.

Page 4: Exception Handling

Exception4

Ada lima keywords yang digunakan oleh Java untuk menangani exception ini, yaitu : try catch finally throw throws

Secara umum bentuk penggunaannya adalah :

Page 5: Exception Handling

Exception5

Secara umum bentuk penggunaannya adalah :

1. try {2. /*kode yang mungkin mengakibatkan exception*/3. }4. catch (TipeException1 objectException){5. /*kode untuk menangani exception yang cocok dengan 6. TipeException1 */7. }8. catch (TipeException2 objectException){9. /*kode untuk menangani exception yang cocok dengan 10. TipeException2 */11. }12. finally {13. /*kode yang pasti akan dieksekusi setelah blok try catch

di 14. atas dieksekusi*/15. }

Page 6: Exception Handling

Tipe-tipe Exception6

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/evironment. 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. Dalam penggunaannya, kita akan banyak menangani exception yg

merupakan turunan dari class Exception ini. Salah satu turunannya yang perlu diperhatikan adalah class RuntimeException,karena Java memperlakukan class ini & turunannya secara berbeda.

Page 7: Exception Handling

Exception yang tidak dicek7

Semua Exception yang bertipe RuntimeException dan turunannya tidak harus secara explicit ditangani dalam program kita.

Salah satu contoh tipe exception ini ; ArrayIndexOutOfBoundsException

Contoh :

1. public class DemoException {2. public static void main (String args[]) {3. int angka[]={10,20,30};4. for (int i=0;i<=3;i++) {5. System.out.println(angka[i]);6. }7. System.out.println("Program Selesai");8. }9. };

Page 8: Exception Handling

Exception yang tidak dicek (cont.)

8

Program tersebut di atas langsung bisa dikompilasi.

Hasil eksekusinya (running) :

102030java.lang.ArrayIndexOutOfBoundsException: 3at DemoException.main(DemoException.java:5)

Exception in thread "main" Normal Termination

Exception di atas terjadi karena program mencoba mengakses nilai dari array yang terdapat pada indeks di luar kapasitas array itu sendiri

Page 9: Exception Handling

Exception yang dicek9

Semua tipe exception yang bukan turunan dari class RuntimeException 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. import java.io.*;2. public class DemoFileException {3. public static void main(String[] args) {4. File test = new File(“d:\\test.txt");5. test.createNewFile();6. }7. }

Page 10: Exception Handling

Exception yang dicek (cont.)

10

Program di atas digunakan untuk membuat sebuah file dengan nama test.txt, namun method createNewFile() pada class File dapat mengakibatkan exception yang bertipe java.io.IOException yang bukan turunan dari class RuntimeException

Jika program di atas dikompilasi maka akan memunculkan pesan :

DemoFileException.java:6: unreported exception java.io.IOException; must be caught or declared to be thrown

test.createNewFile(); ^1 error

Exception ini harus ditangani dengan blok try catch.

Page 11: Exception Handling

Exception yang dicek (cont.)

11

Agar program di atas bisa dikompilasi, maka gunakan blojk try catch seperti contoh berikut :

1. import java.io.*;2. public class DemoFileException {3. public static void main(String[] args) {4. try {5. File test = new File(“d:\\test.txt");6. test.createNewFile();7. }8. catch (IOException e) {9. System.out.println(“Terjadi Exception”);10. System.out.println(e);11. }

System.out.println(“Program Selesai”);12. }13.}

Page 12: Exception Handling

Penggunaan Blok try catch12

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 : 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.

Page 13: Exception Handling

Penggunaan Blok try catch13

1. public class DemoException {2. public static void main (String args[]) {3. try {4. int angka[]={10,20,30};5. for (int i=0;i<=3;i++) {6. System.out.println(angka[i]);7. }8. System.out.println("Baris ini tidak dieksekusi");9. }10. catch (ArrayIndexOutOfBoundsException e) {11. System.out.println("Terjadi Exception");12. }13. System.out.println("Program Selesai");14. }15. };

OUTPUT :102030Terjadi ExceptionProgram Selesai

Atau Program di atas bisa juga ditulis dalam bentuk, seperti di bawah ini :

Page 14: Exception Handling

Penggunaan Blok try catch14

1. class Coba{2. public void tampil() {3. try {4. int angka[]={10,20};5. for (int i=0;i<=2;i++)6. System.out.println(angka[i]);7. System.out.println("Baris ini tidak dieksekusi");8. }9. catch (ArrayIndexOutOfBoundsException e) {10. System.out.println("Terjadi Exception");11. }12. }13. };

14. public class DemoException {15. public static void main (String args[]) {16. Coba c = new Coba();17. c.tampil();18. System.out.println("Program Selesai");19. }20. };

Page 15: Exception Handling

Penggunaan Blok try catch15

1. class Coba{2. public void tampil() {3. int angka[]={10,20};4. for (int i=0;i<=2;i++)5. System.out.println(angka[i]);6. }7. };

8. public class DemoException {9. public static void main (String args[]) {10. Coba c = new Coba();11. try {12. c.tampil();13. System.out.println("Baris ini tidak dieksekusi");14. }15. catch (ArrayIndexOutOfBoundsException e) {16. System.out.println("Terjadi Exception");17. }18. System.out.println("Program Selesai");19. }20. };

Page 16: Exception Handling

Penggunaan lebih dari satu catch

16

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 DemoTryCatch2. {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 (ArithmeticException e) {13. System.out.println("Terjadi pembagian nol");14. }15. catch (ArrayIndexOutOfBoundsException e) {16. System.out.println("Index di luar kapasitas array");17. }18. System.out.println("Program Selesai");19. }20. }

Page 17: Exception Handling

Penggunaan lebih dari satu catch (cont.)

17

Pada program di atas, jika nilai x=0 maka outputnya : Terjadi pembagian nol Program Selesai

Jika nilai x=1, maka outputnya : Tidak terjadi Exception Program Selesai

Jika nilai x=2, maka outputnya : Index di luar kapasitas array Program Selesai

Page 18: Exception Handling

Penggunaan lebih dari satu catch (cont.)

18

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.

Page 19: Exception Handling

Penggunaan lebih dari satu catch (cont.)

19

Contoh (yang benar):1. public class DemoTryCatch2. {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 (ArithmeticException e) {13. System.out.println("Terjadi pembagian nol");14. }15. catch (ArrayIndexOutOfBoundsException 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. }23. }

Page 20: Exception Handling

Penggunaan lebih dari satu catch (cont.)

20

Contoh (yang salah):1. public class DemoTryCatch2. {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 (ArithmeticException e) {16. System.out.println("Terjadi pembagian nol");17. }18. catch (ArrayIndexOutOfBoundsException e) {19. System.out.println("Index di luar kapasitas array");20. }21. System.out.println("Program Selesai");22. }23. }

Page 21: Exception Handling

Common Exception21

ArithmeticException NullPointerException NegativeArraySizeException ArrayIndexOutOfBoundsException SecurityException

Page 22: Exception Handling

Pemakaian throw22

Secara eksplist, kita dapat melempar (throw) exception dari dalam program dengan menggunakan keyword throw. Secara umum penggunaannya adalah :

throw ExceptionObject

ExceptionObject adalah adalah object-object instan dari class yang merupakan turunan dari class Throwable.

Page 23: Exception Handling

Contoh Pemakaian throw23

1. 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.getMessage());10. }11. }12. };

13. public class DemoException {14. public static void main (String args[]) {15. Coba c = new Coba();16. c.tampil();17. System.out.println("Program Selesai");18. }19. };

Page 24: Exception Handling

Contoh Pemakaian throw24

1. class Coba {2. public void tampil() {3. int angka[]={10,20,30};4. for (int i=0;i<=2;i++) {5. if (i>=2)6. throw new ArrayIndexOutOfBoundsException("Salah

Array");7. else8. System.out.println(angka[i]);9. }10. }11. };

12. public class DemoException {13. public static void main (String args[]) {14. Coba c = new Coba();15. c.tampil();16. System.out.println("Program Selesai");17. }18. };

Page 25: Exception Handling

Pemakaian Finally25

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.

Page 26: Exception Handling

Pemakaian Finally26

Contoh:

1. public class DemoFinally2. {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 (ArrayIndexOutOfBoundsException e) {12. System.out.println("Terjadi Eksepsi");13. System.out.println(arr[x-4]);14. }15. System.out.println("Program Selesai");16. }17. }

Page 27: Exception Handling

Pemakaian Finally27

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

Page 28: Exception Handling

Pemakaian Finally28

Contoh:1. public class DemoFinally2. {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 (ArrayIndexOutOfBoundsException 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. }

Page 29: Exception Handling

Pemakaian throws29

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.

Page 30: Exception Handling

Contoh Pemakaian throws30

1. class Coba {2. public void tampil() throws Exception {3. int x=0;4. if (x<5)5. throw new Exception("Lebih kecil 5");6. }7. };

8. public class DemoException {9. public static void main (String args[]) {10. Coba c = new Coba();11. try {12. c.tampil();13. }14. catch (Exception e) {15. System.out.println(e.getMessage());16. }17. System.out.println("Program Selesai");18. }19. };

Page 31: Exception Handling

Membuat Exception sendiri31

1. class MyException extends Exception {

2. private int kode;

3. public MyException (String msg, int kd) {

4. super(msg);

5. kode = kd;

6. }

7. public int getKode() {

8. return kode;

9. }

10. };

11. class TestA {

12. public void tampil() throws MyException {

13. int angka[]={10,20,30};

14. for (int i=0;i<=10;i++) {

15. if (i>=3)

16. throw new MyException("Program Salah",99);

17. else

18. System.out.println(angka[i]);

19. }

20. }

21. };

Page 32: Exception Handling

Membuat Exception sendiri32

1. public class DemoException2 {2. public static void main (String args[]) {3. TestA a = new TestA();4. try {5. a.tampil();6. }7. catch (MyException e) {8. System.out.println("Pesan : "

+e.getMessage());9. System.out.println("Kode : " +e.getKode());10. }

11. System.out.println("Program Selesai");12. }13. };