EXCEPTION HANDLING.

Slides:



Advertisements
Presentasi serupa
Java Fundamentals: 5. Java Advanced
Advertisements

Try, Catch, Finally Throws
Java Progamming Operasi I/O
- PERTEMUAN 3- INHERITANCE
Nur Hayatin, S.ST Jurusan Teknik Informatika Universitas Muhammadiyah Malang Sem Genap 2010.
Abstract Class & Interface
Modul 6: Abstract Class, abstract method
Workshop SCS: Java Game Programming
PEMROGRAMAN KOMPUTER 2 4 SKS 2 TEORI DAN 2 PRAKTEK NANDANG HERMANTO. S.Kom.
Dasar Exception Handling
Flow Control & Exception Handling
Pemrograman Berorientasi Objek
Flow Control & Exception Handling
SLIDE OTOMATIS PINDAH DALAM WAKTU 4-5 MENIT. A:kiriB:kanan Deklarasikan sebuah variabel dengan nama ‘isi’ yang mempunyai type array of double dengan ukuran.
Inheritance Ery Setiyawan Jullev A.
Pemrograman Berbasis Obyek Oleh Tita Karlita
Pertemuan 8 Pemrograman Berbasis Obyek Oleh Tita Karlita
Pemrograman Berbasis Obyek Oleh Tita Karlita
Pemrograman Berorientasi Objek
Dasar exception handling
Pemrograman Berorientasi Objek 1
Mendapatkan Input dari Keyboard
- PERTEMUAN 9 - BERBAGAI KELAS UTILITAS DI JAVA
Pemrograman Dasar Java
EXCEPTION TRY-CATCH-FINALLY
- PERTEMUAN 4 - PERULANGAN
Pertemuan : Object Oriented Programming
PELATIHAN JAVA FUNDAMENTAL
Inheritance Konsep Inheritance Protected Member
Exceptional Pendahuluan Bugs dan error dalam sebuah program sangat sering muncul meskipun program tersebut dibuat oleh programmer berkemampuan tinggi.
Pertemuan 12 Pemrograman Berbasis Obyek Oleh Tita Karlita
Do you remember this?.  Strategy  Concrete Strategy  Context  Client Strategy Pattern consists of..
- PERTEMUAN 4- EXCEPTION
OOP Java Minggu 2b Dasar OOP. Class (1) Deklarasi class : [ *] class { [ *] } Cat : [] = optional, * = repeat 0-N.
03 Elemen Dasar Bahasa Java
MATERI IV OOP (Object Oriented Programming) Chapter II.
Dasar exception handling
Try, Catch, Finally Throws
Pemrograman berbasis obyek
Algoritma & Pemrograman 1
Penanganan Eksepsi.
Pertemuan 6 PEWARISAN AND POLYMORPHISM
Exception Handling (Penanganan Error)
Kelas A dapat memiliki referensi ke obyek dari kelas- kelas lain sebagai anggota. Kadang-kadang disebut sebagai hubungan “has-a”. Sebagai contoh, sebuah.
Penanganan Eksepsi Disusun Oleh: Reza Budiawan Untuk:
Teori Pertemuan 9 “Exception”
Inner Class dan Eksepsi (Exception)
Inheritance dan Kata Kunci static
Konsep Dasar Exception Handling
Constructor dan Overloading
Penanganan Eksepsi Pertemuan Ke- 9.
BAB XI EXCEPTION HANDLING.
Dosen : Bella Hardiyana, S. Kom
MEMBUAT CLASS SENDIRI 2.
Tipe Data, Variabel, dan Operator
Exception Handling (Penanganan Error)
Pemrograman Berorientasi Objek
Tipe Data, Variabel, dan Operator
ASWAR R. Universitas Negeri Makassar
Pemrograman Berorientasi Objek 1
Dasar Bahasa Java.
Flow Control & Exception Handling
Exception Sussi.
Exception Sussi.
Pemrograman Berorientasi Object
Pemrograman Berorientasi Obyek
Dasar exception handling
Pemrograman Berorientasi Object
Tipe Data, Variabel, dan Operator
DPH1C4 Pemrograman berorientasi Obyek
Transcript presentasi:

EXCEPTION HANDLING

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.

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

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)

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

Pada gambar berikut ini ditunjukkan hirarki kelas yang ada di dalam kelas-kelas yang tergabung dalam exception.

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.

Exception yang sering Terjadi - ArithmeticException – terjadi ketika program melakukan operasi pembagian dengan nol pada bilangan integer. int i = 12 / 0;

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

NegativeArraySizeException – terjadi ketika program membuat Array dengan indeks negatif. ArrayIndexOutOfBoundsException – terjadi ketika program mengakses elemen Array melebihi ukuran Array yang bersangkutan.

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");

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");

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.

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");

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");

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());

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

public static void main(String[] args) { test(4, 0); // menimbulkan ArithmeticException System.out.println(); test(12, 4); // menimbulkan ArrayIndexOutOfBoundsException }

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.

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

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"); }

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

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);

public static void main(String[] args) { test(0); // menimbulkan ArithmeticException System.out.println(); test(20); // menimbulkan ArrayIndexOutOfBoundsException }

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

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");

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

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;

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;

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;

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()); }

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:

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;

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;

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

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");

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

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");

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"); }

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");

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

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;

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;

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());