exception handling d3
DESCRIPTION
PI2133 PBO: Exception HandlingProgram Studi Diploma 3 Teknik InformatikaFakultas InformatikaIT Telkom BandungTRANSCRIPT
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
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
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
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
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
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
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
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
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 ??