Dokumen ini membahas tentang penanganan exception dalam pemrograman berorientasi objek menggunakan bahasa Java. Secara singkat, dibahas tentang penggunaan keyword try, catch, finally, throw dan throws untuk menangani kondisi abnormal saat eksekusi perintah seperti error dan exception."
2. TUJUAN
2
Mengerti Exception Handling dan mampu
mengimplementasikan dalam bahasa pemrograman
Java.
Mengerti dan mampu membuat kelas exception
3. PENDAHULUAN
3
Exception adalah suatu kondisi abnormal yang
terjadi pada saat pengeksekusian suatu
perintah
Karena Java e ve rything is o bje ct, 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 (thro w) ke luar agar ditangani oleh
kode yang memanggil method tsb.
4. Exception
4
Ada lima keywords yang digunakan oleh Java
untuk menangani exception ini, yaitu :
try
catch
finally
thro w
thro ws
Secara umum bentuk penggunaannya
adalah :
5. Exception
5
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. }
6. Tipe-tipe Exception
6
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 &
7. Exception yang tidak dicek
7
Semua Exception yang bertipe RuntimeException dan turunannya
tidak harus secara explicit ditangani dalam program kita.
Salah satu contoh tipe exception ini ;
ArrayInde xO utO fBo undsExce ptio n
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. };
8. Exception yang tidak dicek
(cont.)8
Program tersebut di atas langsung bisa
dikompilasi.
Hasil eksekusinya (running) :
10
20
30
java.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
9. Exception yang dicek
9
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. }
10. Exception yang dicek (cont.)
10
Program di atas digunakan untuk membuat sebuah file dengan
nama te st. txt, namun method cre ate Ne wFile () 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.
11. 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”);
1. }
2. }
12. Penggunaan Blok try catch
12
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.
13. Penggunaan Blok try catch
13
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 :
10
20
30
Terjadi Exception
ProgramSelesai
Atau Programdi atas bisa juga ditulis dalambentuk, seperti di bawah ini :
14. Penggunaan Blok try catch
14
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. };
15. Penggunaan Blok try catch
15
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. };
16. Penggunaan lebih dari satu
catch16
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 DemoTryCatch
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 (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. }
17. 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
18. 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.
19. Penggunaan lebih dari satu catch
(cont.)
19
Contoh (yang benar):
1. public class DemoTryCatch
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 (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. }
20. Penggunaan lebih dari satu catch
(cont.)
20
Contoh (yang salah):
1. public class DemoTryCatch
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 (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. }
22. Pemakaian throw
22
Secara eksplist, kita dapat melempar (thro w)
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.
23. Contoh Pemakaian throw
23
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. };
24. Contoh Pemakaian throw
24
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");
1. else
2. System.out.println(angka[i]);
3. }
4. }
5. };
6. public class DemoException {
7. public static void main (String args[]) {
8. Coba c = new Coba();
9. c.tampil();
10. System.out.println("Program Selesai");
11. }
12. };
25. Pemakaian Finally
25
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.
26. Pemakaian Finally
26
Contoh:
1. public class DemoFinally
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 (ArrayIndexOutOfBoundsException e) {
12. System.out.println("Terjadi Eksepsi");
13. System.out.println(arr[x-4]);
14. }
15. System.out.println("Program Selesai");
16. }
17. }
27. Pemakaian Finally
27
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 throws
29
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.
30. Contoh Pemakaian throws
30
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. };
31. Membuat Exception sendiri
31
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. };
32. 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. };