You are on page 1of 9

02/05/2011

PI2133
Exception
Pemrograman Berorientasi
 Exception adalah suatu kondisi abnormal yang
Objek terjadi pada saat pengeksekusian suatu
perintah
 Karena Java  everything is object, maka
exception juga direpresentasikan oleh sebuah
object.
Exception Handling  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.

Exception Exception
 Ada lima keywords yang digunakan oleh  Secara umum bentuk penggunaannya
Java untuk menangani exception ini, adalah :
yaitu : 1. try {
2. /*kode yang mungkin mengakibatkan exception*/
 try 3. }
4. catch (TipeException1 objectException){
 catch 5. /*kode untuk menangani exception yang cocok dengan
6. TipeException1 */
 finally 7. }
 throw 8.
9.
catch (TipeException2 objectException){
/*kode untuk menangani exception yang cocok dengan
 throws 10.
11. }
TipeException2 */

 Secara umum bentuk penggunaannya 12.


13.
finally {
/*kode yang pasti akan dieksekusi setelah blok try catch di
adalah : 14.
15. }
atas dieksekusi*/

3 4

1
02/05/2011

Tipe-tipe Exception 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 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.

5 6

Exception yang tidak dicek Exception yang tidak dicek (cont.)


 Semua Exception yang bertipe RuntimeException dan  Program tersebut di atas langsung bisa
turunannya tidak harus secara explicit ditangani dalam
program kita. dikompilasi.
 Salah satu contoh tipe exception ini ;  Hasil eksekusinya (running) :
 ArrayIndexOutOfBoundsException
 Contoh : 10
20
30
1. public class DemoException { java.lang.ArrayIndexOutOfBoundsException: 3
2. public static void main (String args[]) { at DemoException.main(DemoException.java:5)
3. int angka[]={10,20,30}; Exception in thread "main" Normal Termination
4. for (int i=0;i<=3;i++) {
5. System.out.println(angka[i]);
6. }  Exception di atas terjadi karena program
7. System.out.println("Program Selesai"); mencoba mengakses nilai dari array
8. } yang terdapat pada indeks di luar
9. }; kapasitas array itu sendiri
7 8

2
02/05/2011

Exception yang dicek Exception yang dicek (cont.)


 Semua tipe exception yang bukan turunan dari class  Program di atas digunakan untuk membuat sebuah file
RuntimeException merupakan exception yang “harus” dengan nama test.txt, namun method createNewFile()
ditangani menggunakan blok try catch. pada class File dapat mengakibatkan exception yang
 Java bahkan tidak mengijinkan kita mengkompilasi bertipe java.io.IOException yang bukan turunan dari
program yang kita buat, jika tidak menangani exception class RuntimeException
tersebut.  Jika program di atas dikompilasi maka akan
 Contoh : memunculkan pesan :

1. import java.io.*; DemoFileException.java:6: unreported exception


java.io.IOException; must be caught or declared to be
2. public class DemoFileException2 { thrown
3. public static void main(String[] args) { test.createNewFile();
4. File test = new File(“d:\\test.txt"); ^
5. test.createNewFile(); 1 error
6. }
7. }  Exception ini harus ditangani dengan blok try catch.

9 10

Exception yang dicek (cont.) Penggunaan Blok try catch


 Agar program di atas bisa dikompilasi, maka gunakan blojk try  Walaupun penanganan exception secara default
catch seperti contoh berikut : cukup bermanfaat, namun terkadang kita ingin
menangani exception tersebut dengan cara yang
1. import java.io.*;
2. public class DemoFileException {
berbeda.
3. public static void main(String[] args) {  Ada beberapa alasan mengapa kita ingin
4. try { melakukan ini :
5. File test = new File(“d:\\test.txt");  Kita ingin program kita memperbaiki kesalahan akibat
6. test.createNewFile(); exception & terus melanjutkan eksekusi seolah-olah
7. } tidak pernah terjadi exception
8. catch (IOException e) {  Kita ingin program terus berjalan dan bukannya
9. System.out.println(“Terjadi Exception”); dihentikan pada saat exception terjadi.
10. System.out.println(e);  User umumnya tidak mengerti dengan pesan kesalahan
11. } yang dimunculkan, apalagi beserta stack tracenya
System.out.println(“Program Selesai”); sehingga kurang bermanfaat untuk user. Jadi kita
12. } mungkin ingin mengganti pesan tersebut menjadi pesan
13. } yang lebih mudah dimengerti.

11 12

3
02/05/2011

Penggunaan Blok try catch Penggunaan Blok try catch


1. public class DemoException { 1. class Coba{
2. public static void main (String args[]) { 2. public void tampil() {
3. try { 3. try {
4. int angka[]={10,20,30};
5. for (int i=0;i<=3;i++) { 4. int angka[]={10,20};
6. System.out.println(angka[i]); 5. for (int i=0;i<=2;i++)
7. } 6. System.out.println(angka[i]);
8. System.out.println("Baris ini tidak dieksekusi"); 7. System.out.println("Baris ini tidak dieksekusi");
9. } 8. }
10. catch (ArrayIndexOutOfBoundsException e) { 9. catch (ArrayIndexOutOfBoundsException e) {
11. System.out.println("Terjadi Exception");
12. } 10. System.out.println("Terjadi Exception");
13. System.out.println("Program Selesai"); 11. }
14. } 12. }
15.}; 13.};
OUTPUT : 14.public class DemoException {
10
20 15. public static void main (String args[]) {
30 16. Coba c = new Coba();
Terjadi Exception 17. c.tampil();
Program Selesai 18. System.out.println("Program Selesai");
19. }
Atau Program di atas bisa juga ditulis dalam bentuk, seperti di bawah ini : 20.};

13 14

Penggunaan Blok try catch Penggunaan lebih dari satu catch


1. class Coba{  Kode yang terdapat pada blok try bisa mengakibatkan lebih dari satu exception.
2. public void tampil() {  Dalam hal ini, kita dapat menuliskan lebih dari blok catch untuk setiap blok try.
3. int angka[]={10,20};  Contoh :
4. for (int i=0;i<=2;i++) 1. public class DemoTryCatch
5. System.out.println(angka[i]); 2. {
6. } 3. public static void main(String[] args)
4. {
7. };
5. try {
6. int x = 0;
8. public class DemoException { 7. int y = 100/x;
9. public static void main (String args[]) { 8. int[] arr = {10,11};
10. Coba c = new Coba(); 9. y = arr[x];
11. try { 10. System.out.println("Tidak terjadi Exception");
12. c.tampil(); 11. }
13. System.out.println("Baris ini tidak dieksekusi"); 12. catch (ArithmeticException e) {
14. } 13. System.out.println("Terjadi pembagian nol");
15. catch (ArrayIndexOutOfBoundsException e) { 14. }
16. System.out.println("Terjadi Exception"); 15. catch (ArrayIndexOutOfBoundsException e) {
17. } 16. System.out.println("Index di luar kapasitas array");
18. System.out.println("Program Selesai"); 17. }
18. System.out.println("Program Selesai");
19. }
19. }
20.}; 20.}

15 16

4
02/05/2011

Penggunaan lebih dari satu catch Penggunaan lebih dari satu catch
(cont.) (cont.)
 Pada program di atas, jika nilai x=0 maka  Dengan demikian terlihat bahwa blok
outputnya : catch yang mana yang dieksekusi
 Terjadi pembagian nol
oleh Java tergantung pada exception
 Program Selesai
yang terjadi.
 Jika nilai x=1, maka outputnya :
 Tidak terjadi Exception  Dalam menggunakan lebih dari satu
 Program Selesai blok catch, perlu diperhatikan bahwa
 Jika nilai x=2, maka outputnya : blok catch dengan tipe data subclass
 Index di luar kapasitas array harus ditulis terlebih dahulu baru
 Program Selesai diikuti dengan blok catch dengan tipe
17 data superclass. 18

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

19 20

5
02/05/2011

Common Exception Pemakaian throw


 ArithmeticException  Secara eksplist, kita dapat melempar
(throw) exception dari dalam program
 NullPointerException dengan menggunakan keyword throw.
 NegativeArraySizeException Secara umum penggunaannya adalah :
 ArrayIndexOutOfBoundsException throw ExceptionObject
 SecurityException
 ExceptionObject adalah adalah object-
object instan dari class yang merupakan
turunan dari class Throwable.

21 22

Contoh Pemakaian throw Contoh Pemakaian throw


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

6
02/05/2011

Contoh Pemakaian throw Contoh Pemakaian throw


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

Pemakaian Finally Pemakaian Finally


Contoh:
 Penggunaan blok try catch terkadang
membingungkan karena kita tidak dapat 1. public class DemoFinally
menentukan dengan pasti alur mana yang akan 2. {
3. public static void main(String[] args)
dieksekusi. 4. {
5. int x = 3;
 Apalagi penggunaan throw yang mengakibatkan 6. int[] arr = {10,11,12};
kode setelah throw tidak akan dieksekusi atau justru 7. try {
terjadi kesalahan pada blok catch, menyebabkan 8.
9.
System.out.println(arr[x]);
System.out.println("Tidak Terjadi Eksepsi");
program akan berhenti. 10. }
11. catch (ArrayIndexOutOfBoundsException e) {
 Untuk mengatasi problem ini, Java memperkenalkan 12. System.out.println("Terjadi Eksepsi");
keyword finally. Dimana semua kode yang ada 13. System.out.println(arr[x-4]);
dalam blok finally “pasti” akan dieksekusi apapun 14. }
15. System.out.println("Program Selesai");
yang terjadi di dalam blok try catch. 16. }
17. }

27 28

7
02/05/2011

Pemakaian Finally Pemakaian Finally


Program di atas menunjukkan bahwa terjadi Contoh:
1. public class DemoFinally
exception pada baris ke-8, sehingga 2. {
3. public static void main(String[] args)
menyebabkan program menjalan kode yang 4. {
ada dalam blok catch. 5.
6.
int x = 3;
int[] arr = {10,11,12};
Tetapi dalam blok catch pun terjadi 7.
8.
try {
System.out.println(arr[x]);
exception, sehingga program akan 9. System.out.println("Tidak Terjadi Eksepsi");
10. }
berhenti, sehingga kode pada baris ke-15, 11. catch (ArrayIndexOutOfBoundsException e) {
tidak akan dijalankan. Bagaimana 12.
13.
System.out.println("Terjadi Eksepsi");
System.out.println(arr[x-4]);
seandainya kode pada baris ke-15 itu adalah 14. }
15. finally {
hal yang sangat penting? 16. System.out.println("Program Selesai");
17. }
Solusinya : Gunakan finally 18. }
19. }

29 30

Contoh Pemakaian throws


Pemakaian throws (benar)
 Penggunaan keyword ini berhubungan erat dengan 1. class Coba {
penggunaan exception yang dicek oleh Java. 2. public void tampil() throws Exception {
3. int x=0;
 Setiap method yang mungkin menyebabkan suatu 4. if (x<5)
exception & tidak menangani exception tsb, dalam 5. throw new Exception("Lebih kecil 5");
arti exception tsb akan dilempar ke luar, maka 6. }
7. };
method tsb harus menjelaskan kemungkinan ini
agar si pemanggil method ini dapat mengetahui & 8. public class DemoException {
bersiap-siap untuk menangani exception yg 9. public static void main (String args[]) {
10. Coba c = new Coba();
mungkin terjadi. 11. try {
12. c.tampil();
 Ini dilakukan dengan cara menggunakan keyword 13. }
throws pada saat pendeklarasian method. 14. catch (Exception e) {
15. System.out.println(e.getMessage());
16. }
17. System.out.println("Program Selesai");
18. }
31
19.}; 32

8
02/05/2011

Membuat Exception sendiri Membuat Exception sendiri


1. class MyException extends Exception {
2. private int kode; 1. public class DemoException2 {
3. public MyException (String msg, int kd) { 2. public static void main (String args[]) {
4. super(msg);
5. kode = kd; 3. TestA a = new TestA();
6. } 4. try {
7. public int getKode() {
8. return kode; 5. a.tampil();
9. }
10.};
6. }
7. catch (MyException e) {
11.class TestA {
12. public void tampil() throws MyException {
8. System.out.println("Pesan : " +e.getMessage());
13. int angka[]={10,20,30}; 9. System.out.println("Kode : " +e.getKode());
14. for (int i=0;i<=10;i++) {
15. if (i>=3) 10. }
16. throw new MyException("Program Salah",99);
17. else
18. System.out.println(angka[i]); 11. System.out.println("Program Selesai");
19. } 12. }
20. }
21.}; 13. };

33 34

Any Question ??