Upload presentasi
Presentasi sedang didownload. Silahkan tunggu
1
EXCEPTION HANDLING
2
Definisi Exception merupakan sebuah mekanisme yang digunakan oleh bahasa pemrograman komputer untuk mendeskripsikan apa yang harus dilakukan ketika sesuatu yang tidak dikehendaki terjadi. Sesuatu yang tidak dikehendaki ini biasanya dalam bentuk error, seperti pemanggilan method dengan arguman yang tidak valid, kegagalan koneksi dalam sebuah jaringan, atau usaha untuk membuka sebuah file yang tidak ada.
3
Perhatikan contoh kode berikut ini:
public class HaloDunia{ public static void main(String[] args) { int i = 0; String salam[] = { “Halo Dunia!", “Apa Kabar!", “Dahsyat!" }; while(i < 4) { System.out.println(salam[i]); i++; }
4
Jika kode di atas tidak menangani exception, maka program akan berhenti dengan sebuah pesan kesalahan. java HaloDunia Halo Dunia! Apa Kabar! Dahsyat! java.Lang.ArrayIndexOutOfBoundsException: at HaloDunia.main(HelloWorld.java:12)
5
Contoh lain program yang dapat menimbulkan exception
class ContohEksepsi2 { public static void main(String[] args) { int pembilang = 2; int penyebut = 0; int hasil = pembilang/penyebut; // SALAH System.out.println("Hasil = " + hasil); }
6
Pada gambar berikut ini ditunjukkan hirarki kelas yang ada di dalam kelas-kelas yang tergabung dalam exception.
7
Kelas java.lang.Throwable merupakan kelas induk dari semua obyek yang dapat dilemparkan dan di-catch menggunakan mekanisme penanganan exception. Tiga subclass penting dari kelas Throwable, yaitu kelas Error, RuntimeException, dan Exception: -Error. Mengindikasikan problem yang fatal yang sulit ditangani. Contoh: out of memory. Program tidak perlu menangani kondisi yang demikian. -RuntimeException. Exception ini mengindikasikan kondisi yang seharusnya tidak terjadi jika program berjalan dengan normal. -Exception yang lain, mengindikasikan permasalahan yang muncul pada saat runtime yang biasanya disebabkan oleh hal-hal yang berkaitan dengan lingkungan di mana program berjalan dan exception jenis ini dapat ditangani.
8
Exception yang sering Terjadi
- ArithmeticException – terjadi ketika program melakukan operasi pembagian dengan nol pada bilangan integer. int i = 12 / 0;
9
NullPointerException – terjadi ketika program berusaha mengakses atribut atau
method dari sebuah obyek menggunakan variabel yang tidak merujuk ke sebuah obyek. Contohnya, ketika variabel referensi obyek belum diinisialisasi atau ketika tidak ada obyek yang diinstansiasi. import java.util.Date; class Npe{ Date d; void cetak(){ System.out.println(d.toString()); } public static void main(String[] args){ Npe n = new Npe(); n.cetak(); // terjadi exception karena variabel d //belum diinisialisasi
10
NegativeArraySizeException – terjadi ketika program membuat Array dengan indeks negatif.
ArrayIndexOutOfBoundsException – terjadi ketika program mengakses elemen Array melebihi ukuran Array yang bersangkutan.
11
Penanganan Exception Mekanisme try...catch class ContohEksepsi3 {
public static void main(String[] args) { int pembilang = 2; int penyebut = 0; try { int hasil = pembilang/penyebut; // menimbulkan eksepsi System.out.println("Hasil = " + hasil); // tidak //dieksekusi }catch(ArithmeticException ae){ System.out.println("KESALAHAN: “+”Pembagian dengan nol"); } System.out.println("Statemen setelah blok try-catch");
12
class ContohEksepsi4 { public static void main(String[] args) { int pembilang = 2; int penyebut = 0; try { int hasil = pembilang/penyebut; // SALAH System.out.println("Hasil = " + hasil); // tidak //dieksekusi } catch (Exception e) { System.out.println("KESALAHAN: " + "Terdapat pembagian dengan nol"); } System.out.println("Statemen setelah blok try- catch");
13
Pada kasus-kasus tertentu (biasanya untuk proses debugging), mungkin saja anda menginginkan pesan sebenarnya yang terkandung dalam exception yang ditimbulkan. Untuk melakukan hal ini, kita dapat menggunakan method getMessage() yang terdapat pada objek exception yang kita lemparkan.
14
class ContohEksepsi5 { public static void main(String[] args) { int pembilang = 2; int penyebut = 0; try { int hasil = pembilang/penyebut; // SALAH System.out.println("Hasil = " + hasil); // tidak //dieksekusi } catch (Exception e) { System.out.println(e.getMessage()); } System.out.println("Statemen setelah blok try- catch");
15
Apabila ingin mengeluarkan informasi stack trace, gunakan method printStackTrace()
class ContohEksepsi6 { public static void main(String[] args) { int pembilang = 2; int penyebut = 0; try { int hasil = pembilang/penyebut; // SALAH System.out.println("Hasil = " + hasil); // tidak //dieksekusi } catch (Exception e) { e.printStackTrace(); // mencetak stack trace } System.out.println("Statemen setelah blok try-catch");
16
Try..catch untuk menangani kesalahan pengaksesan indeks array
public class HaloDunia2{ public static void main(String[] args) { int i = 0; String salam[] = { "Halo Dunia!", "Apa Kabar!", "Dahsyat!" }; try{ while(i < 4){ System.out.println(salam[i]); i++; } }catch(ArrayIndexOutOfBoundsException e){ System.out.println("Tak ada indeks ke-"+e.getMessage());
17
Penanganan Beberapa Tipe Exception
//PROGRAM 9-8 class BanyakEksepsi { public static void test(int a, int b) { try { int c = a / b; System.out.println("Hasil bagi: " + c); int[] Arr = {1,2,3,4,5}; // array dengan 5 elemen Arr[10] = 11; // mengakses indeks ke-10 } catch (ArithmeticException ae) { System.out.println("Terdapat pembagian dengan 0"); System.out.println(ae); } catch (ArrayIndexOutOfBoundsException oobe) { System.out.println("Indeks di luar rentang"); System.out.println(oobe); }
18
public static void main(String[] args) { test(4, 0); // menimbulkan ArithmeticException System.out.println(); test(12, 4); // menimbulkan ArrayIndexOutOfBoundsException }
19
Urutan Tipe Eksepsi Satu hal yang harus diperhatikan dalam deklarasi statement catch adalah urutan tipe exception. Kelas exception turunan harus diletakkan lebih awal daripada kelas induknya.
20
class UrutanCatch2 { public static void main(String[] args) { int bilangan = 12; int pembagi = 0; try { int hasil = bilangan / pembagi; System.out.println("Hasil : " + hasil); } catch (ArithmeticException ae) { System.out.println("Terdapat pembagian dengan 0"); } catch (RuntimeException e) { System.out.println("Eksepsi runtime..."); } catch (Exception e) { System.out.println("Eksepsi generik..."); }
21
class UrutanCatch3 { public static void main(String[] args) { int bilangan = 12; int pembagi = 4; try { int hasil = bilangan / pembagi; System.out.println("Hasil : " + hasil); int[] Arr = {1,2,3,4,5}; Arr[10] = 11; } catch (ArithmeticException ae) { System.out.println("Terjadi pembagian dengan 0"); } catch (Exception e) { System.out.println("Eksepsi generik dieksekusi"); }
22
Blok try bersarang Kita dapat mendefinisikan blok try-catch bersarang, yaitu blok try-catch yang berada di dalam blok try- catch yang lain. Apabila blok try-catch bagian dalam membangkitkan exception dan blok tersebut tidak mendefinisikan statement catch yang sesuai dengan tipe exception yang ditimbulkan, maka program akan memeriksa statement catch yang terdapat pada blok try-catch bagian luar sampai ditemukan statement yang sesuai. Apabila ternyata blok bagian luar juga tidak mendefinisikan statement yang sesuai, maka sistem JAVA RUNTIME akan menangani exception tersebut dengan mengeluarkan pesan exception dan menghentikan jalannya program
23
class DemoTryBersarang {
private static final int MAX = 100; public static void test(int n) { // blok try-catch bagian luar try { double hasil = MAX / n; System.out.println("Hasil bagi : " + hasil); // blok try-catch bagian dalam int[] Arr = {1,2,3,4,5}; System.out.println("Arr[" + n + "] : " + Arr[n]); } catch (NullPointerException npe) { System.out.println("Pointer null"); System.out.println(npe); } } catch (ArithmeticException ae) { System.out.println("Terjadi pembagian dengan 0"); System.out.println(ae); } catch (Exception e) { System.out.println("Eksepsi generik..."); System.out.println(e);
24
public static void main(String[] args) { test(0); // menimbulkan ArithmeticException System.out.println(); test(20); // menimbulkan ArrayIndexOutOfBoundsException }
25
Kata kunci finally Pada kasus-kasus tertentu, terkadang kita ingin menempatkan kode yang pasti dieksekusi baik terjadi exception maupun tidak. Hal ini biasanya digunakan pada operasi-operasi yang berhubungan dengan resource (misalnya: menutup stream file setelah digunakan). Untuk itu digunakan kata kunci finally setelah blok try-catch
26
class ContohFinally{ public static void main(String[] args) { int pembilang = 2; int penyebut = 0; try { int hasil = pembilang/penyebut; // SALAH System.out.println("Hasil = " + hasil); // tidak //dieksekusi }finally{ System.out.println("blok finally selalu dieksekusi"); } //pernyataan berikut tidak akan dieksekusi System.out.println("Statemen setelah blok try-catch");
27
Kata Kunci throw Pada bagian sebelumnya kita membahas exception yang dibangkitkan secara otomatis oleh Java runtime Kita juga dapat membangkitkan exception secara manual melalui kode yang kita tulis. Pembangkitan exception dilakukan dengan menggunakan kata kunci throw Sintaksnya: throw ObjekException
28
ObjekException yang dilemparkan adalah objek kelas Throwable maupun turunan-turunannya
Objek non Throwable tidak dapat dilemparkan, contohnya String Sebagai contoh, jika kita ingin membangkitkan NullPointerException, maka sintaksnya: throw new NullPointerException();, atau NullPointerException npe = new NullPointerException() throw npe;
29
Perhatikan contoh berikut
class Barang { private String kode; private String nama; private double harga; public void setKode(String vKode) { try { kode = vKode; if (kode == null) { throw new NullPointerException(); } } catch (NullPointerException npe) { System.out.println("KESALAHAN: " + "Kode barang tidak boleh null"); public String getKode() { return kode;
30
public void setNama(String vNama) {
try { nama = vNama; if (nama == null) { throw new NullPointerException(); } } catch (NullPointerException npe) { System.out.println("KESALAHAN: " +"Nama barang tidak boleh null"); public String getNama() { return nama;
31
class DemoThrow { public static void main(String[] args) { Barang obj = new Barang(); obj.setKode(null); obj.setNama("Buku tulis"); System.out.println("\nKode : " + obj.getKode()); System.out.println("Nama : " + obj.getNama()); }
32
Exception yang telah didefinisikan pada Java memiliki dua tipe konstruktor, yaitu konstruktor tanpa parameter dan konstruktor dengan satu parameter bertipe String Pada contoh sebelumnya kita hanya menggunakan konstruktor tipe pertama. Berikut adalah contoh penggunaan konstrukstor tipe kedua:
33
Perhatikan contoh berikut
class Barang { private String kode; private String nama; private double harga; public void setKode(String vKode) { try { kode = vKode; if (kode == null) { throw new NullPointerException(“KESALAHAN: Kode barang tidak boleh Null!”); } } catch (NullPointerException npe) { System.out.println(npe.getMessage()); public String getKode() { return kode;
34
public void setNama(String vNama) {
try { nama = vNama; if (nama == null) { throw new NullPointerException((“KESALAHAN: nama tidak boleh Null!”); } } catch (NullPointerException npe) { System.out.println(npe.getMessage()); public String getNama() { return nama;
35
Kata kunci throws Apabila didalam method yang potensial menimbulkan exception tidak disertakan blok try catch, maka kita harus menggunakan kata kunci throws pada saat mendeklarasikan method tersebut. Teknik ini dapat digunakan untuk beberapa tipe exception
36
Perhatikan kode di bawah
class ProgramSalah { public static void test() { throw new IllegalAccessException( "KESALAHAN: illegal access"); } public static void main(String[] args) { try { test(); } catch (Exception e) { System.out.println(e.getMessage()); System.out.println("Statemen setelah blok try-catch");
37
Kode di atas tidak bisa dikompilasi
Agar dapat dikompilasi, maka perlu melakukan salah satu dari dua hal: menggunakan blok try...catch, atau menggunakan kata kunci throws Kode berikut telah dimodifikasi dengan menggunakan kata kunci throws
38
class DemoThrows { public static void test() throws IllegalAccessException{ throw new IllegalAccessException("KESALAHAN: illegal access"); } public static void main(String[] args) { try { test(); } catch (Exception e) { System.out.println("Eksepsi ditangkap di sini..."); System.out.println(e.getMessage()); System.out.println("Statemen setelah blok try-catch");
39
Kata kunci throws untuk beberapa tipe exception
class DemoThrows2 { public static void test(int n) throws NullPointerException, ArithmeticException { if (n < 0) { throw new NullPointerException( "KESALAHAN: null pointer"); } else { throw new ArithmeticException( "KESALAHAN: arithmetic exception"); }
40
public static void main(String[] args) { try { test(-12); // menimbulkan eksepsi //NullPointerException test(0); // menimbulkan eksepsi ArithmeticException } catch (Exception e) { System.out.println("Eksepsi ditangkap di sini..."); System.out.println(e.getMessage()); } System.out.println("Statemen setelah blok try-catch");
41
Membuat kelas exception sendiri
Kita tidak perlu terpaku pada exception- exception yang terdapat dalam Java Java memungkinkan kita mendefinisikan sendiri exception-exception yang spesifik sesuai dengan kebutuhan kita Untuk membuat kelas exception sendiri, kita hanya perlu menurunkan dari kelas exception yang telah ada dalam Java
42
Contoh kelas exception yang kita definisikan sendiri
class NegativeNumberException extends Exception { private int bilangan; // default constructor NegativeNumberException() { } // constructor dengan parameter bertipe String NegativeNumberException(String pesan) { super(pesan); // constructor dengan parameter bertipe String dan int NegativeNumberException(String pesan, int nilai) { bilangan = nilai; public int getBilangan() { return bilangan;
43
class DemoMembuatEksepsi3 { public static int hitungFaktorial(int n) throws NegativeNumberException { if (n < 0) { throw new NegativeNumberException("Bilangan tidak boleh negatif", n); } int hasil = 1; for (int i=n; i>=1; i--) { hasil *= i; return hasil;
44
public static void main(String[] args) { System. out
public static void main(String[] args) { System.out.println("Pada saat menghitung 5!"); try { System.out.println("Hasil = “+hitungFaktorial(5)); } catch (NegativeNumberException nne) { System.out.println("Bilangan : " +nne.getBilangan()); nne.printStackTrace(); } System.out.println("\nPada saat menghitung -5!"); System.out.println("Hasil = “+hitungFaktorial(-5)); System.out.println("Bilangan : “+nne.getBilangan());
Presentasi serupa
© 2024 SlidePlayer.info Inc.
All rights reserved.