Anda di halaman 1dari 28

Exception Handling

(Penanganan Error)
As’ad Djamalilleil
http://kampusku.my.id
asad.kom@gmail.com
Definisi Exception
• Exceptional Event  sebuah event yang
terjadi pada waktu eksekusi dari sebuah
program, dimana mengganggu alir normal
dari instruksi program
• Ketika terjadi error dalam sebuah method,
maka method akan membuat sebuah
objek (exception object) yang berisi
informasi tentang error tersebut
Contoh exception
• User memasukkan data yang tidak tepat,
misalnya: data angka yang diinginkan tapi
huruf yang dimasukkan
• Sebuah file yang akan dibuka tidak
ditemukan
• Koneksi jaringan yang putus ditengah
komunikasi yang sedang berlangsung
• Dan lain-lain
Exception Handler
• Throwing exception  membuat sebuah
objek exception dan mengirimnya ke
sistem runtime
• Exception handler  sebuah blok yang
berisi kode program untuk menangani
exception
• Catching exception  Blok yang terpilih
untuk menangani jenis exception itu
bertugas menangkap exception
3 macam exception
• Checked exception
– Membaca file menggunakan class java.io.FileReader
namun file tidak ditemukan sehingga memicu
exception java.io.FileNotFoundException
• Error (eksternal)
– Kerusakan file pada saat pembacaan akan memicu
exception java.io.IOError
• Runtime exception (internal)
– Exception yang diakibatkan oleh masalah internal
seperti kesalahan logika atau yang diistilahkan
dengan bug
Hirarki Exception
• Semua class exception merupakan
turunan dari class java.lang.Exception
• Class Exception memiliki 2 sub-class,
yaitu class IOException dan
RuntimeException
Checked Exception
Exception Keterangan

ClassNotFoundException Class tidak ditemukan

Mencoba untuk menggandakan objek yang tidak


CloneNotSupportedException
mengimplementasi interface Cloneable

IllegalAccessException Akses ke sebuah class ditolak

Mencoba untuk membuat objek dari class abstract


InstantiationException
atau interface

InterruptedException Sebuah thread telah diinterupsi oleh thread lain

NoSuchFieldException Field yang akan diakses tidak ditemukan

NoSuchMethodException Method yang dipanggil tidak ditemukan


Unchecked RuntimeException
Exception Keterangan
Kesalahan perhitungan aritmatik, misalnya
ArithmeticException
divide-by-zero
Kesalahan karena mengakses index array diluar
ArrayIndexOutOfBoundsException
batas jumlah elemen yang tersedia
Memberikan nilai ke elemen array dengan tipe
ArrayStoreException
yang tidak sesuai
ClassCastException Casting data yang tidak benar
Penggunaan argumen yang tidak tepat dalam
IllegalArgumentException
pemanggilan method
Monitoring operasi yang tidak tepat, misalnya
IllegalMonitorStateException
menunggu thread yang tidak terkunci
IllegalStateException Aplikasi berada dalam status yang tidak tepat
Operasi yang diminta tidak sesuai dengan status
IllegalThreadStateException
thread
IndexOutOfBoundsException Beberapa tipe index array berada di luar batas
NegativeArraySizeException Array dibuat dengan jumlah elemen negatif
Exception Keterangan
NullPointerException Kesalahan pada penggunaan nilai null
NumberFormatException Kesalahan konversi dari format string ke numerik
SecurityException Percobaan pelanggaran keamanan
Mencoba mengakses index string di luar panjang
StringIndexOutOfBounds
string yang tersedia
UnsupportedOperationException Ditemukan operasi yang tidak dapat dilakukan
Catching Exception
• Sebuah method menangkap exception
menggunakan kombinasi keyword try dan
catch
• Blok try/catch digunakan pada kode
program yang memungkinkan untuk
terjadinya sebuah exception
Sintaks Exception
try {

}
catch(TipeException e) {

• Pada statement catch juga dideklarasikan tipe


dari exception yang ingin ditangkap.
• Bila terjadi exception di dalam blok try, blok
catch akan diperiksa. Bila tipe dari exception
ada di dalam blok catch, maka exception akan
diteruskan ke blok catch tersebut.
Exception Method
Method Keterangan
public String Memberikan pesan detail tentang exception
getMessage( ) yang terjadi

public Throwable Menampilkan penyebab dari terjadinya


getCause( ) exception
public String toString( ) Memberikan nama class dan disambung
dengan hasil dari method getMessage( )
public void Mencetak hasil dari method toString( )
printStackTrace( ) bersama dengan stack trace ke System.err,
output stream dari error yang terjadi
public Memberikan array yang berisi setiap elemen
StackTraceElement [ ] pada stack trace. Elemen ke-0 berisi call stack
getStackTrace( ) teratas, sedangkan elemen terakhir mewakili
method paling bawah dari call stack
public Throwable Berisi stack trace dari objek Throwable,
fillInStackTrace( ) dimana stack trace saat ini ditambah dengan
informasi sebelumnya dari stack trace
Contoh 1

import java.io.*;
public class CobaSaja{

public static void main(String args[]){


try {
int a[] = new int[2];
System.out.println("Elemen ketiga :" + a[3]);
}
catch(ArrayIndexOutOfBoundsException e) {
System.out.println("Exception yg dilempar :" + e);
}
System.out.println("Keluar blok try/catch");
}
}
Multiple Catch Block
try {

}
catch(TipeException1 e1){

}
catch(TipeException2 e2) {

}
catch(TipeException3 e3) {

}
• Jika terjadi exception, maka exception
akan dilempar ke blok catch pertama.
• Bila tipenya cocok dengan exception yang
dilempar, maka akan ditangkap di blok
catch tersebut, namun bila tidak cocok
maka akan diteruskan ke blok catch
berikutnya
• Dan seterusnya
Contoh 2
try {
file = new FileInputStream(namaFile);
x = (byte) file.read();
}
catch(FileNotFoundException f) {
f.printStackTrace();
return -1;
}
catch(IOException i) {
i.printStackTrace();
return -1;
}
Keyword throws dan throw
• Ada beberapa method yang mengharuskan
aplikasi untuk dapat menangani exception
• Bila sebuah method tidak kita inginkan untuk
menangani exception, method tersebut harus
dideklarasikan dengan menggunakan keyword
throws pada akhir kepala method
• Exception dapat dilempar menggunakan
keyword throw
Contoh 3.a
import java.io.*;
public class Coba{
public static void main(String[] args){
DataInputStream dis = new DataInputStream(System.in);
String s = dis.readLine();
// IOException harus ditangkap
int a = 0;
try{
a = Integer.parseInt(s);
}catch(NumberFormatException e){}
System.out.println(a);
}
}
Contoh 3.b
import java.io.*;
public class Coba{
public static void main(String[] args)throws IOException{
DataInputStream dis = new DataInputStream(System.in);
String s = dis.readLine();
// IOException harus ditangkap
int a = 0;
try{
a = Integer.parseInt(s);
}catch(NumberFormatException e){}
System.out.println(a);
}
}
Contoh 4
import java.io.*;
public class Coba{
public static void main(String[] args)throws Exception{
DataInputStream dis = new DataInputStream(System.in);
System.out.print("Input tanggal:");
try{
int tgl = Integer.parseInt(dis.readLine());
if(tgl<1 || tgl>31)
throw new Exception("Tanggal tdk benar!");
}catch(NumberFormatException e){
System.out.println("Nilai yg diinput bukan angka!");
}catch(IOException e){
System.out.println("Kesalan penginputan!");
}
}
}
Keyword finally
• Keyword finally digunakan untuk membuat
sebuah blok yang mengikuti blok try
• Kode program di dalam blok finally selalu
dieksekusi, pada saat exception terjadi
atau tidak
• Penggunaan blok finally memungkinkan
kita untuk menjalankan pernyataan
cleanup yang ingin dieksekusi, dalam
kondisi apapun
Sintaks Finally
try {

}
catch(TipeException e) {

}
finally {

}
Contoh 5
import java.io.*;
public class Coba{

public static void main(String args[]){


int a[] = new int[2];
try {
System.out.println("Elemen ketiga :" + a[3]);
}
catch(ArrayIndexOutOfBoundsException e) {
System.out.println("Exception yg dilempar :" + e);
}
finally{
a[0] = 6;
System.out.println("Elemen pertama: " + a[0]);
}
}
}
Membuat Class Exception
• Kita dapat membuat class exception kita sendiri
di Java.
• Beberapa poin yang perlu diingat adalah sbb:
– Semua exception harus merupakan sub-class dari
Throwable
– Bila ingin membuat sebuah checked exception, maka
kita harus menurunkan dari class Exception
– Bila ingin membuat sebuah class runtime exception,
maka kita harus menurunkan dari class
RuntimeException
Sintaksnya
class MyException extends Exception {

}
Contoh 6.a
// Nama file InsufficientFundsException.java
import java.io.*;

public class InsufficientFundsException extends Exception


{
private double amount;
public InsufficientFundsException(double amount)
{
this.amount = amount;
}
public double getAmount()
{
return amount;
}
}
Contoh 6.b
// Nama file CheckingAccount.java
import java.io.*;

public class CheckingAccount


{
private double balance;
private int number;
public CheckingAccount(int number)
{
this.number = number;
}
public void deposit(double amount)
{
balance += amount;
}
public void withdraw(double amount) throws
InsufficientFundsException
{
if(amount <= balance)
{
balance -= amount;
}
else
{
double needs = amount - balance;
throw new InsufficientFundsException(needs);
}
}
public double getBalance()
{
return balance;
}
public int getNumber()
{
return number;
}
}
Contoh 6.c
// Nama file BankDemo.java
public class BankDemo
{
public static void main(String [] args)
{
CheckingAccount c = new CheckingAccount(101);
System.out.println("Depositing $500...");
c.deposit(500.00);
try
{
System.out.println("\nWithdrawing $100...");
c.withdraw(100.00);
System.out.println("\nWithdrawing $600...");
c.withdraw(600.00);
}catch(InsufficientFundsException e)
{
System.out.println("Sorry, but you are short $"
+ e.getAmount());
e.printStackTrace();
}
}
}

Anda mungkin juga menyukai