java.lang.Exception

advertisement
Exception Handling
Pemrograman Berbasis Obyek
Oleh
Tita Karlita
Pengertian Eksepsi

Suatu mekanisme penanganan kesalahan
ringan (mild error).
 Peristiwa yang terjadi ketika program
menemui kesalahan pada saat instruksi
program dijalankan.
 Exception sering digunakan dalam akses
sumberdaya non memori.
Pengertian Eksepsi
Eksepsi adalah suatu kondisi abnormal
yang terjadi pada saat pengeksekusian
suatu perintah.
 Java everything is an object
 Suatu eksepsi juga direpresentasikan
oleh sebuah obyek yang menjelaskan
tentang eksepsi tersebut.

Apa yang terjadi jika terjadi
kesalahan?

Maka method tempat eksepsi terjadi
akan melakukan dua pilihan
– Menangani sendiri eksepsi
– Meneruskannya keluar dengan cara
membuat obyek yang menjelaskan eksepsi
dan melemparkannya (throw) agar
ditangani oleh kode yang memanggil
method tersebut.
Apa yang terjadi jika terjadi
kesalahan?

Secara otomatis akan dilempar sebuah object
yang disebut dgn exception.
 Exception dapat diproses lebih lanjut oleh
fungsi-fungsi yang siap menangani
kesalahan.
 Proses pelemparan exception disebut dgn
throwing exception.
 Proses penerimaan exception disebut
dengan catch exception.
Contoh Exception:






File yang akan dibuka tidak ada.
Koneksi jaringan putus.
Pembagian bilangan dengan 0
Pengisian elemen array diluar ukuran array
Kegagalan koneksi database
Operan yg akan dimanipulasi out of
prescribed range
Common Exception





ArithmeticException
– Hasil dari operasi divide-by-zero pada integer
– Misal : int i = 12/0;
NullPointerException
– Mencoba mengakses atribut atau method suatu object padahal object
belum dibuat.
– Misal : Date d = null;
System.out.println(d.toString());
NegativeArraySizeException
– Mencoba membuat array dengan ukuran negatif.
ArrayIndexOutOfBoundsException
– Mencoba mengakses elemen array dimana index nya melebihi ukuran
array.
SecurityException
– Biasanya dilempar ke browser, class security manager melempar exception
untuk applet yang mencoba melakukan:
• Mengakses lokal file
• Open socket ke host yg berbeda dgn host yg di open oleh applet
Keywords
try
 catch
 finally
 throw
 throws

Bentuk penggunaan
try{
/* kode yang memungkinkan terjadinya eksepsi
}
catch(TipeEksepsi1 obyekEksepsi)1{
/* kode untuk menangani eksepsi1
}
//…
catch(TipeEksepsiN obyekEksepsiN){
/* kode untuk menangani eksepsiN
}
finally{
/* kode yang pasti akan dieksekusi setelah blok try catch di atas
dieksekusi*/
}

Blok try : digunakan untuk menempatkan
kode-kode program java yang mengandung
kode program yang mungkin melemparkan
exception.
 Blok catch : digunakan untuk menempatkan
kode-kode program java yang digunakan
untuk menangani sebuah exception tertentu.
 Blok finally : digunakan untuk menempatkan
kode-kode program yang pasti akan selalu
dieksekusi baik terjadi atau tidak terjadi
eksepsi
Purpose of each exception

Error :
– tipe eksepsi yang tidak ditangani dengan try-catch
karena berhubungan dengan java run time
system/environment.
– Mengindikasikan bahwa error yang terjadi adalah
kritis/fatal error (severe problem) dimana proses
recovery sangat sulit dilakukan bahkan tidak
mungkin dilakukan.
– Contoh : program running out of memory
Purpose of each exception

Exception:
– Exeption yang sebaiknya ditangani oleh program
secara langsung
– Dalam praktek akan lebih banyak menggunakan
subclass dari kelas Exception
UnCheck Exception

Semua eksepsi yang bertipe
RuntimeException dan turunannya tidak
harus ditangani secara eksplisit.
 Mengindikasikan kesalahan implementasi
atau desain program.
– Contoh : ArrayIndexOutOfBoundsException
class DemoEksepsi{
public static void main(String arg[]){
int []arr = new int[1];
System.out.println(arr[1]);
}
}
Exception in thread "main"
java.lang.ArrayIndexOutOfBoundsException: 1
at
DemoEksepsi.main(DemoEksepsi.java:4)
Finished executing
class DemoEksepsi3{
public static void main(String arg[]){
try{
int []arr = new int[1];
System.out.println(arr[1]);
System.out.println("Baris ini tidak pernah dieksekusi");
}catch(ArrayIndexOutOfBoundsException e){
System.out.println("Terjadi eksepsi karena index melebihi
kapasitas");
}
System.out.println(“Setelah blok try-catch");
}
}
Check Exception

Semua tipe eksepsi yang bukan turunan
class RuntimeException merupakan eksepsi
yang harus ditangani dengan menggunakan
blok try-catch
 Mengindikasikan kesalahan environment.
– Contoh : file not found, invalid URL exception
import java.io.*;
class DemoEksepsi1{
public static void main(String arg[]){
File test = new File("c:\test.txt");
test.createNewFile();
}
}
import java.io.*;
class DemoEksepsi1{
public static void main(String arg[]){
try{
File test = new File("c:\test.txt");
test.createNewFile();
}catch(IOException e){
System.out.println("IO Exception sudah
ditangani");
}
}
}
Stack Trace
class DemoEksepsi2{
public static void testMethod1(){
int []arr = new int[1];
System.out.println(arr[1]);
}
public static void testMethod2(){
testMethod1();
}
public static void main(String arg[]){
testMethod2();
}
}
Contoh kejadian error (loading
file from the disk)
int status = loadTexfile();
If (status != 1) {
// something unusual happened, describe it
switch (status) {
case 2:
// file not found
break;
case 3:
//disk error
break;
case 4:
//file corrupted
break;
default:
// other error
}
} else {
// file loaded OK, continue with program
}
Misal terdapat algoritma
program:
Fungsi bacaFile
BukaFile
BacaBarisFileSampaiHabis
TutupFile
Ditambahkan program untuk
pengecekan berhasil tidaknya
pembacaan file
Fungsi bacaFile
BukaFile
Jika Gagal Buka File
Lakukan Sesuatu
Jika Berhasil Buka File
BacaBarisFileSampaiHabis
TutupFile

Bagaimana bila ditambahkan program untuk
pengecekan terhadap status pembacaan file?
 Bagaimana bila ditambahkan program untuk
pengecekan terhadap status penutupan file?
 Maka program akan menjadi sangat panjang
dan banyak terdapat nested if-else.
Solusi?
Gunakan
exception
Bentuk:
try {
………..
} catch (ExceptionType x) {
………..
}
Implementasi
try {
Fungsi bacaFile
BukaFile
BacaBarisFileSampaiHabis
TutupFile
} catch (KesalahanBukaFile) {
// lakukan sesuatu
} catch (KesalahanAlokasiMemori) {
// lakukan sesuatu
} catch (KesalahanTutupFile) {
// lakukan sesuatu
}
Try dgn banyak catch

Dapat digunakan beberapa blok catch untuk satu blok try.
 Exception dalam satu program bisa mengatasi banyak exception.
 Contoh implementasi:
 Misal dalam satu blok try terdapat kemungkinan terjadi:
– NullPointerException
– IndexOutOfBoundsException
– ArithmeticException
try {
………..
} catch (ExceptionType1 x1) {
………..
} catch (ExceptionType2 x2) {
………..
}
class DemoEksepsi4{
public static void main(String arg[]){
try{
int x = arg.length;
int y = 100/x;
int []arr = {91,92};
y = arr[x];
System.out.println("Tidak terjadi eksepsi");
}catch(ArithmeticException e){
System.out.println("Terjadi eksepsi karena pembagian dengan nol");
}catch(ArrayIndexOutOfBoundsException e){
System.out.println("Terjadi eksepsi karena index melebihi kapasitas");
}
System.out.println("Setelah blok try-catch");
}
}
D:\ java DemoEksepsi4
Terjadi eksepsi karena pembagian dengan nol
Setelah blok try-catch
D:\ java DemoEkseps4i Param1
Tidak terjadi eksepsi
Setelah blok try-catch
D:\ java DemoEksepsi4 Param1 Param2
Terjadi eksepsi karena index melebihi kapasitas
Setelah blok try-catch
Blok catch yang dikerjakan adalah yang
sesuai dengan obyek eksepsi
 Sekali running, hanya satu block catch
yang sesuai dengan obyek eksepsi
yang akan dieksekusi
 Block catch bertipe subclass harus
ditulis lebih dulu baru diikuti block catch
bertipe superclass
 Blok catch dengan tipe data superclas
dapat menangani eksepsi yang sesuai
dengan tipe datanya sendiri dan tipe
data subclass-nya

class DemoEksepsi5{
public static void main(String arg[]){
try{
int x = arg.length;
int y = 100/x;
int []arr = {91,92};
y = arr[x];
System.out.println("Tidak terjadi eksepsi");
}catch(ArithmeticException e){
System.out.println("Terjadi eksepsi karena pembagian dengan nol");
}catch(ArrayIndexOutOfBoundsException e){
System.out.println("Terjadi eksepsi karena index melebihi kapasitas");
}catch(Exception e){
System.out.println("Terjadi eksepsi yang tidak diketahui");
}
System.out.println("Setelah blok try-catch");
}
}
Exception adalah superclass dari ArithmeticException dan
ArrayIndexOutOfBoundsException sehingga superclass ini harus di taruh di
blok catch paling bawah
Bila eksepsi superclass ditaruh di bawah
class DemoEksepsi5{
public static void main(String arg[]){
try{
int x = arg.length;
int y = 100/x;
int []arr = {91,92};
y = arr[x];
System.out.println("Tidak terjadi eksepsi");
}catch(Exception e){
System.out.println("Terjadi eksepsi yang tidak diketahui");
}catch(ArithmeticException e){
System.out.println("Terjadi eksepsi karena pembagian dengan nol");
}catch(ArrayIndexOutOfBoundsException e){
System.out.println("Terjadi eksepsi karena index melebihi kapasitas");
}
System.out.println("Setelah blok try-catch");
}
}
Object Exception
Object exception yang dihasilkan dapat
dimanfaatkan untuk mengetahui lebih
lanjut mengenai error atau exception
yang terjadi.
 Exception merupakan subclass dari
class Throwable.

Method yang diwarisi oleh
exception:
- getMessage()
method ini mengembalikan isi pesan untuk
menggambarkan exception yang terjadi
– printStackTrace()
method ini menampilkan pesan error dan stack
trace ke standard error output stream yang
biasanya merupakan konsol window apabila
program merupakan program konsol.
– printStackTrace(PrintStream s)
method ini mengembalikan pesan error ke objek
PrintStream yang dijadikan parameter. Apabila
ingin menampilkan pesan ke konsol, anda dapat
menggunakan ystem.out sebagai parameter.
Blok try – catch bertingkat
try {
try {
………..
} catch (Exception x) {
………..
}
try {
………..
} catch (Exception x) {
………..
}
} catch (Exception x) {
………..
}
Menggunakan keyword “throw”
Secara eksplisit, eksepsi bisa dilempar
(throw) oleh suatu program.
 Bentuk penggunaan:
throw ObyekEksepsi;
 ObyekEksepsi disini adalah semua
obyek yang merupakan turunan class
Throwable.

class LemparEksepsi{
public static void methodLain(){
Melempar obyek eksepsi secara eksplisit
try{
throw new ArrayIndexOutOfBoundsException(1);
}catch(ArrayIndexOutOfBoundsException e){
System.out.println("Penanganan Eksepsi dlm methodlain()");
Obyek eksepsi dilempar lagi ke luar method
throw e;
}
}
public static void main(String arg[]){
try{
methodLain();
}catch(ArrayIndexOutOfBoundsException e){
System.out.println("Penanganan Eksepsi dlm method main()");
}
}
}
Menggunakan keyword “throws”
Dibutuhkan hanya oleh check exception.
 Digunakan oleh method yang tidak
menangani eksepsi sendiri sehingga
eksepsi dilempar keluar method.
 Semua kemungkinan eksepsi yang terjadi
harus didaftar di deklarasi method.

import java.io.*;
class DemoEksepsi6{
public static void methodLain() throws IOException
throw new ArrayIndexOutOfBoundsException("Eksepsi IO dlm method");
}
}
Method ini melempar lebih dari satu jenis eksepsi
import java.rmi.*;
class DemoEksepsi7{
public static void methodLain() throws ServerException, RemoteException{
int i = 10;
if(i==10)
throw new ServerException("Eksepsi dalam method");
else
throw new RemoteException("Eksepsi lainnya dalam method");
}
}
Blok Try – Catch - Finally

Blok finally : digunakan untuk mendefinisikan
kode program yang selalu dieksekusi baik
ada exception yang terjadi maupun bila tidak
terjadi exception sama sekali.
 Bentuk:
try {
………..
} catch (Exception x) {
………..
} finally {
………..
}
Menggunakan keyword “finally”

Blok finally : digunakan untuk
menempatkan kode-kode program yang
pasti akan selalu dieksekusi baik terjadi
atau tidak terjadi eksepsi
import java.io.*;
class DemoEksepsi8{
public static void methodLain(int i) throws CharConversionException{
System.out.println("Buka file");
try{
System.out.println("Proses file");
if(i==0)
throw new CharConversionException("Test Eksepsi dlm methodLain");
}catch(CharConversionException e){
System.out.println("Penanganan Eksepsi dlm methodLain");
throw e;
}
Kode ini tidak akan
System.out.println("Tutup File");
}
dieksekusi jika terjadi
public static void main(String arg[]){
eksepsi pada blok try
try{
methodLain(arg.length);
}catch(CharConversionException e){
System.out.println("Penanganan Eksepsi dalam method main()");
}
}
}
C:/ java DemoEksepsi8 Param1
Buka file
Proses file
Tutup File
C:/ java DemoEksepsi8
Buka file
Proses file
Penanganan Eksepsi dlm methodLain
Penanganan Eksepsi dalam method main()
Analisa DemoEksepsi8
Bila terjadi eksepsi, bagian perintah
yang mencetak kalimat TUTUP FILE
tidak tercetak.
 Padahal file yang dibuka harus ditutup
kembali.
 Cara termudah adalah menuliskan
perintah tutup file disemua kode yg
memungkinkan dieksekusi terakhir kali
sebelum keluar program.
 Sehingga menulis kode berulang kali

import java.io.*;
class DemoEksepsi8{
public static void methodLain(int i) throws CharConversionException{
System.out.println("Buka file");
try{
System.out.println("Proses file");
if(i==0)
throw new CharConversionException("Test Eksepsi dlm methodLain");
}catch(CharConversionException e){
System.out.println("Penanganan Eksepsi dlm methodLain");
throw e;
}finally{
System.out.println("Tutup File");
}
}
public static void main(String arg[]){
try{
methodLain(arg.length);
}catch(CharConversionException e){
System.out.println("Penanganan Eksepsi dalam method main()");
}
}
}
Membuat class exception baru




Sebuah subclass dari exception dapat dibentuk
programmer untuk mendefinisikan sendiri secara
lebih rinci tentang exception yang dapat terjadi.
Class exception baru ini harus merupakan subclass
dari java.lang.Exception.
Didalam class baru cukup mendeklarasikan
konstruktor yang mungkin akan digunakan.
Tidak harus mengimplementasikan atau
mengoveride method yang dimiliki Throwable sbg
superclass tertinggi.
class EksepsiBuatan1 extends Exception{
EksepsiBuatan1(String s){
super(s);
}
}
class DemoEksepsi10{
public static void methodLain() throws EksepsiBuatan1{
throw new EksepsiBuatan1("Deskripsi Eksepsi");
}
public static void main(String arg[]){
try{
methodLain();
}catch(EksepsiBuatan1 e){
System.out.println("Terjadi eksepsi - " + e);
}
}
}
Aturan Overriding



Mode akses overriding method harus sama atau
lebih luas dari pada overriden method.
Subclass hanya boleh meng-override method
superclass satu kali saja, tidak boleh ada lebih
dari satu method pada kelas yang sama yang
sama persis.
Overriding method tidak boleh throw checked
exceptions yang tidak dideklarasikan oleh
overridden method.
Download