exception handling d3

9

Click here to load reader

Upload: tjokorda-agung-budi-w

Post on 02-Jul-2015

137 views

Category:

Documents


3 download

DESCRIPTION

PI2133 PBO: Exception HandlingProgram Studi Diploma 3 Teknik InformatikaFakultas InformatikaIT Telkom Bandung

TRANSCRIPT

Page 1: Exception Handling D3

02/05/2011

1

PI2133Pemrograman BerorientasiObjek

Exception Handling

Exception Exception adalah suatu kondisi abnormal yang

terjadi pada saat pengeksekusian suatuperintah

Karena Java everything is object, makaexception juga direpresentasikan oleh sebuahobject.

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 danmelemparkannya (throw) ke luar agar ditanganioleh kode yang memanggil method tsb.

2

Exception Ada lima keywords yang digunakan oleh

Java untuk menangani exception ini, yaitu : try catch finally throw throws

Secara umum bentuk penggunaannyaadalah :

3

Exception 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. }

4

Page 2: Exception Handling D3

02/05/2011

2

Tipe-tipe Exception

5

Tipe-tipe Exception 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 karenaberhubungan dengan Java run-time system/evironment. Jadiexception yang terjadi kemungkinannya sangat kristis yang sebaiknya tidak ditangani oleh program kita sendiri.

Class Exception tipe exception yang sebaiknya ditanganioleh program kita secara langsung. Dalam penggunaannya, kita akan banyak menangani exception yg

merupakan turunan dari class Exception ini. Salah satu turunannyayang perlu diperhatikan adalah class RuntimeException,karenaJava memperlakukan class ini & turunannya secara berbeda.

6

Exception yang tidak dicek 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. };

7

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

dikompilasi. Hasil eksekusinya (running) :

102030java.lang.ArrayIndexOutOfBoundsException: 3

at 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

8

Page 3: Exception Handling D3

02/05/2011

3

Exception yang dicek 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 DemoFileException2 {3. public static void main(String[] args) {4. File test = new File(“d:\\test.txt");5. test.createNewFile();6. }7. }

9

Exception yang dicek (cont.) 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.

10

Exception yang dicek (cont.) 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. }

11

Penggunaan Blok try catch Walaupun penanganan exception secara default

cukup bermanfaat, namun terkadang kita inginmenangani exception tersebut dengan cara yang berbeda.

Ada beberapa alasan mengapa kita inginmelakukan ini : Kita ingin program kita memperbaiki kesalahan akibat

exception & terus melanjutkan eksekusi seolah-olahtidak pernah terjadi exception

Kita ingin program terus berjalan dan bukannyadihentikan pada saat exception terjadi.

User umumnya tidak mengerti dengan pesan kesalahanyang dimunculkan, apalagi beserta stack tracenyasehingga kurang bermanfaat untuk user. Jadi kitamungkin ingin mengganti pesan tersebut menjadi pesanyang lebih mudah dimengerti.

12

Page 4: Exception Handling D3

02/05/2011

4

Penggunaan Blok try catch1. 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 :

13

Penggunaan Blok try catch1. 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.};

14

Penggunaan Blok try catch1. 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.};

15

Penggunaan lebih dari satu catch 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.}

16

Page 5: Exception Handling D3

02/05/2011

5

Penggunaan lebih dari satu catch (cont.) 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

17

Penggunaan lebih dari satu catch (cont.)

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

19

Penggunaan lebih dari satu catch (cont.)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.}

20

Page 6: Exception Handling D3

02/05/2011

6

Common Exception ArithmeticException NullPointerException NegativeArraySizeException ArrayIndexOutOfBoundsException SecurityException

21

Pemakaian throw 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.

22

Contoh Pemakaian throw (benar)

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. };

23

Contoh Pemakaian throw (salah)

1. class Coba {2. public void tampil() {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. c.tampil();12. System.out.println("Program Selesai");13. }14. };

24

Page 7: Exception Handling D3

02/05/2011

7

Contoh Pemakaian throw (benar)

1. class Coba {2. public void tampil() {3. try {4. int angka[]={10,20,30};5. for (int i=0;i<=2;i++) {6. if (i>=2)7. throw new ArrayIndexOutOfBoundsException("Salah Array");8. else9. System.out.println(angka[i]);10. }11. System.out.println("Baris ini tidak dieksekusi");12. }13. catch (ArrayIndexOutOfBoundsException e) {14. System.out.println(e.getMessage());15. }16. }17.};

18.public class DemoException {19. public static void main (String args[]) {20. Coba c = new Coba();21. c.tampil();22. System.out.println("Program Selesai");23. }24.};

25

Contoh Pemakaian throw (benar)

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. }; 26

Pemakaian FinallyPenggunaan blok try catch terkadang

membingungkan karena kita tidak dapatmenentukan dengan pasti alur mana yang akandieksekusi.

Apalagi penggunaan throw yang mengakibatkankode setelah throw tidak akan dieksekusi atau justruterjadi kesalahan pada blok catch, menyebabkanprogram akan berhenti.

Untuk mengatasi problem ini, Java memperkenalkankeyword finally. Dimana semua kode yang adadalam blok finally “pasti” akan dieksekusi apapunyang terjadi di dalam blok try catch.

27

Pemakaian FinallyContoh:

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

28

Page 8: Exception Handling D3

02/05/2011

8

Pemakaian FinallyProgram di atas menunjukkan bahwa terjadi

exception pada baris ke-8, sehinggamenyebabkan program menjalan kode yang ada dalam blok catch. Tetapi dalam blok catch pun terjadi

exception, sehingga program akanberhenti, sehingga kode pada baris ke-15, tidak akan dijalankan. Bagaimanaseandainya kode pada baris ke-15 itu adalahhal yang sangat penting?Solusinya : Gunakan finally

29

Pemakaian FinallyContoh: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. }

30

Pemakaian throws Penggunaan keyword ini berhubungan erat dengan

penggunaan exception yang dicek oleh Java. Setiap method yang mungkin menyebabkan suatu

exception & tidak menangani exception tsb, dalamarti exception tsb akan dilempar ke luar, makamethod tsb harus menjelaskan kemungkinan iniagar si pemanggil method ini dapat mengetahui & bersiap-siap untuk menangani exception ygmungkin terjadi.

Ini dilakukan dengan cara menggunakan keyword throws pada saat pendeklarasian method.

31

Contoh Pemakaian throws (benar)

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.}; 32

Page 9: Exception Handling D3

02/05/2011

9

Membuat Exception sendiri

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.};

33

Membuat Exception sendiri1. 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. };

34

Any Question ??