0% menganggap dokumen ini bermanfaat (0 suara)
155 tayangan16 halaman

p5 Pbo Exception

Modul ini membahas penanganan exception dalam pemrograman Java. Topik utama yang dibahas meliputi konsep exception handling, hierarki kelas exception, penggunaan kata kunci try, catch, throws, dan finally untuk menangani exception. Modul ini juga menjelaskan jenis-jenis exception seperti checked exception, runtime exception, dan error.

Diunggah oleh

FaizRahma
Hak Cipta
© © All Rights Reserved
Kami menangani hak cipta konten dengan serius. Jika Anda merasa konten ini milik Anda, ajukan klaim di sini.
Format Tersedia
Unduh sebagai PDF, TXT atau baca online di Scribd
0% menganggap dokumen ini bermanfaat (0 suara)
155 tayangan16 halaman

p5 Pbo Exception

Modul ini membahas penanganan exception dalam pemrograman Java. Topik utama yang dibahas meliputi konsep exception handling, hierarki kelas exception, penggunaan kata kunci try, catch, throws, dan finally untuk menangani exception. Modul ini juga menjelaskan jenis-jenis exception seperti checked exception, runtime exception, dan error.

Diunggah oleh

FaizRahma
Hak Cipta
© © All Rights Reserved
Kami menangani hak cipta konten dengan serius. Jika Anda merasa konten ini milik Anda, ajukan klaim di sini.
Format Tersedia
Unduh sebagai PDF, TXT atau baca online di Scribd
Anda di halaman 1/ 16

PRAKTIKUM PEMROGRAMAN OBJEK DENGAN JAVA

MODUL KE-5

EXCEPTION HANDLING

LABORATORIUM PEMROGRAMAN
PROGRAM STUDI TEKNIK INFORMATIKA
FAKULTAS TEKNIK
UNIVERSITAS MUHAMMADIYAH MALANG
2011/2012

1. TUJUAN
Mahasiswa mampu memahami konsep Exception Handling dalam suatu program
Mahasiswa mampu memahami perbedaan antara kode program java yang
memanfaatkan Exception Handling dan yang tidak memanfatkan.

Mahasiswa mampu mengimplementasikan kata kunci try, catch, dan finally di

dalam menangani exception


Mahasiswa mampu memahami dan mengerti tentang hierarki dari class Exception
yang ada di dalam bahasa pemrograman java.

2. ALAT YANG DIGUNAKAN

Compiler Java (JDK), JRE

Editor Java (Gel, Eclipse, Jcreator, dll)

3. DASAR TEORI
Apakah Exception Itu?
Kata exception merupakan bentuk pendek dari exception event.
Definisi: Exception adalah event, yang terjadi ketika program dieksekusi, yang
ngakibatkan terganggunya alur program secara normal
Ketika error terjadi di suatu method, maka method tersebut akan membuat object
yang kemudian dikirim ke runtime system. Object ini, yang disebut sebagai exception
object, mengandung informasi tentang error yang terjadi, termasuk tipe dan kondisi
program pada saat error terjadi. Proses pembuatan exception object dan kemudian
mengirimnya ke runtime system ini disebut sebagai throwing an
exception (melemparkan exception).
Setelah method melemparkan exception, runtime system akan berusaha untuk
mencari solusi untuk menangani masalah yang ada. Solusi yang ada bisa jadi lebih
dari satu, oleh karena itu runtime system akan memilih berdasarkan suatu urutan yang
berdasar pada method tempat terjadinya error dan atau method lain yang memanggil
method tersebut. Urutan ini disebut call stack. (lihat gambar)

Runtime system mencari method yang memiliki blok untuk menangani error yang
terjadi berdasarkan call stack. Pencarian dimulai dari tempat terjadinya error

kemudian dirunut berdasarkan call stack secara reverse order. Jika ditemukan blok
untuk menangani error yang bersangkutan, maka system akan menyerahkan exception
ke handler.
Penyerahan exception ini disebut sebagai catch the exception (menangkap exception).
Jika system tidak menemukan handler yang sesuai di call stack, maka runtime system
akan menghentikan jalannya program. (lihat gambar)

Untuk memahami bagaimana exception handling bekerja di java, anda harus


memahami kategori-kategori exception:
-Checked exceptions: merupakan exception yang disebabkan oleh kesalahan
pemakai program atau hal lain yang dapat diprediksi oleh pemrogram. Contohnya,
jika ingin membuka file tapi file tidak ditemukan, maka exception akan muncul.
-Runtime exception: ini adalah exception yang muncul dimana kemunculannya
tidak bisa dihindari oleh pemrogram.
-Errors: Ini sebenarnya bukan exception, namun merupakan masalah yang muncul
diluar kendali pemakai dan pemrogram. Error secara umum akan dibiarkan saja,
sebab tidak ada yang bisa dilakukan untuk mengatasinya. Sebagai contoh, jika stack
overflow muncul, maka error akan muncul.
Hierarki Exception:
Semua class exception adalaha subclass dari class java.lang.Exception. Class
Exception sendiri merupakan subclass dari class Throwable. Selain class exception,
ada juga class Error yang juga diturunkan dari class Throwable.
Normalnya, Error jarang dibuat objectnya pada java. Kondisi ini bisa muncul jika ada
masalah parah yang tidak dapat ditangani oleh program java. Contoh: JVM kehabisan
memori. Untuk kasus ini program tidak akan dapat menangani error yang terjadi.
Class Exception memiliki dua subclass utama: IOException dan RuntimeException.

Method-method di class exception:


public String getMessage()
mengembalikan detail informasi mengenai exception yang terjadi.Informasi ini
diinisialisasi oleh constructor milik Throwable
public Throwable getCause()
menampilkan penyebab dari exception
public String toString()
mendapatkan nama exception ditambah informasinya
public void printStackTrace()
menampilkan hasil toString() beserta stack trace System.err
public StackTraceElement[] getStackTrace()
mengembalikan array yang berisi semua elemen di stack trace. Elemen ke 0
mewakili bagian atas call stack, dan elemen akhir array mewakili bagian akhir
call stack
public Throwable fillInStackTrace()
mengisi stack trace dari object Throwable dengan stack trace yang terdeteksi,
menambah ke dalam stack trace
Menangkap Exception:
Method menangkap exception menggunakan kombinasi try dan catch keywords.
Kode program yang dapat menimbulkan exception diletakkan di dalam blok try .
Sintaks penggunaan try-catch adalah sebagaimana berikut:
try
{

//Protected code
}catch(ExceptionName e1)
{
//Blok Catch
}

Statement catch disertai dengan deklarasi tipe exception yang ingin ditangani. Jika
exception terjadi di bagian protected code, maka blok catch akan melakukan
pemeriksaan. Jika tipe exceptionnya ada di dalam blok catch, maka exception yang
bersangkutan akan ditangani
Contoh:
Berikut adalah array dua dimensi. Kemudian program akan mengakses elemen ke 3
dari array tersebut, sehingga mengakibatkan exception
// File Name : ExcepTest.java
import java.io.*;
public class ExcepTest{

public static void main(String args[]){


try{
int a[] = new int[2];
System.out.println("Access element three :" + a[3]);
}catch(ArrayIndexOutOfBoundsException e){
System.out.println("Exception thrown :" + e);
}
System.out.println("Out of the block");
}

Program diatas akan menghasilkan:


Exception thrown
Out of the block

:java.lang.ArrayIndexOutOfBoundsException: 3

Multiple blok catch:


Blok try dapat diikuti oleh banyak blok catch. Sintaks untuk multiple blok catch adalah:
try
{

//Protected code
}catch(ExceptionType1 e1)
{
//Catch block
}catch(ExceptionType2 e2)
{
//Catch block
}catch(ExceptionType3 e3)
{
//Catch block
}

Kode di atas menunjukkan tiga blok catch, namun anda dapat memiliki berapapun
setelah try. Jika exception terjadi di bagian protected code, maka exception akan
dilemparkan, kemudian diperiksa oleh blok catch pertama. Jika tipe exception-nya
sesuai, maka akan ditangkap oleh blok pertama ini. Jika tidak, maka akan diperiksa
oleh blok catch kedua. Hal ini akan dilanjutkan hingga ada blok catch yang sesuai.
Jika tidak ada yang sesuai, maka method akan menghentikan eksekusinya dan
melempar exception tadi ke method pemanggilnya sesuai urutan call stack.

Contoh:
Berikut adalah penggalan program yang menunjukkan penggunaan multiple try
try
{

file = new FileInputStream(fileName);


x = (byte) file.read();
}catch(IOException i)
{
i.printStackTrace();
return -1;
}catch(FileNotFoundException f) //Not valid!
{
f.printStackTrace();
return -1;
}

Keyword throws dan throw


Jika method tidak dapat menangani exception, maka method tersebut harus
mendeklarasikan jenis exception yang mungkin dilemparkan menggunakan kata
throws. Kata throws digunakan pada bagian deklarasi method.
Anda dapat melempar exception, atau object exception baru, atau exception yang baru
saja ditangkap; dengan menggunakan kata throw. Coba untuk memahami perbedaan
throws dan throw.
Berikut adalah sebuah method yang melemparkan RemoteException
import java.io.*;
public class className
{
public void deposit(double amount) throws RemoteException
{
// Method implementation
throw new RemoteException();
}
//Remainder of class definition
}

Pada suatu method dapt didefinisikan lebih dari satu macam keluaran exception yang
dipisahkan dengan tanda koma (,). Sebagai contoh: method berikut kemungkinan
melemparkan RemoteException dan InsufficientFundsException:
import java.io.*;
public class className
{
public void withdraw(double amount) throws RemoteException,
InsufficientFundsException
{
// Method implementation
}
//Remainder of class definition
}

Keyword finally:
Keyword finally digunakan untuk membuat blok yang mengikuti blok try. Blok
finally selalu dieksekusi, tidak peduli exception terjadi atau tidak.
Menggunakan keyword finally memungkinkan untuk menjalankan langkah akhir ysng
harus dijalankan tidak peduli pada apa yang terjadi di bagian protected code.
Blok finally berada di bawah catch blok dan memiliki sintaks sebagaimana berikut:
try
{

//Protected code
}catch(ExceptionType1 e1)
{
//Catch block
}catch(ExceptionType2 e2)
{
//Catch block
}catch(ExceptionType3 e3)
{
//Catch block
}finally
{
//The finally block always executes.
}

Contoh:
public class ExcepTest{

public static void main(String args[]){


int a[] = new int[2];
try{
System.out.println("Access element three :" + a[3]);
}catch(ArrayIndexOutOfBoundsException e){
System.out.println("Exception thrown :" + e);
}
finally{
a[0] = 6;
System.out.println("First element value: " +a[0]);
System.out.println("The finally statement is
executed");
}
}

Hasil dari program ini adalah:


Exception thrown :java.lang.ArrayIndexOutOfBoundsException: 3
First element value: 6
The finally statement is executed

Perhatikan hal berikut ini:


1.Blok catch tidak dapat dibuat tanpa adanya blok try
2.Tidak wajib membuat blok finally bila blok try-catch sudah ada
3.Blok try tidak dapat dibuat tanpa ada blok catch atau blok finally

!
!
!
!

Keuntungan Menggunakan Exception


Keuntungan 1: Memisahkan kode Error-Handling dari kode utama
Dengan fasilitas pemisahan kode utama dan kode error handling, memungkinkan
bagi kita untuk berkonsentrasi terhadap bagian bagian tersebut. Di pemrograman
tradisional, deteksi error, reporting, dan penanganan error menimbulkan
kompleksitas program semakin tinggi. Sebagai contoh, perhatikan pseudo code
berikut ini:
bacaFile {
!!
!
buka file;
!
!
dapatkan ukuran file;
!
!
alokasikan memori sebesar ukuran file;
!
!
salin isi file ke memori;
!
!
tutup file;
!

Program diatas secara sekilas dapat digunakan untuk menyalin file ke memori.
Namun ada beberapa hal yang tidak diperhatikan, yakni:
- Apa yang terjadi bila file tidak dapat dibuka?
- Apa yang terjadi bila ukuran file tidak dapat ditentukan?
- Apa yang terjadi bila memori yang dipesan tidak mencukupi?
- Apa yang terjadi jika proses penyalinan gagal?
- Apa yang terjadi jika file tidak dapat ditutup?
Untuk menangani kemungkinan di atas, fungsi bacaFile harus dilengkapi dengan
kemampuan deteksi error, reporting dan penanganan error. Berikut adalah
pengembangan dari fugsi tersebut:
errorCodeType bacaFile {
initialize errorCode = 0;
buka file;
if (fileTerbuka) {
dapatkan ukuran file;
if (ukuranDidapatkan) {
alokasi memori sebesar ukuran file;
if (alokasiBerhasil) {
salin isi file ke memori;
if (salinFile) {
errorCode = -1;
}
} else {
errorCode = -2;
}
} else {
errorCode = -3;
}
tutup file;
if (fileTidakTertutup && errorCode == 0) {
errorCode = -4;
} else {
errorCode = errorCode and -4;

}
} else {
errorCode = -5;
}
return errorCode;
}
Jika dilihat kembali, pseuso code di atas terlalu didominasi oleh deteksi error,
reporting dan penanganan error; sedangkan lima bagian utama dari fungsi jadi
sulit dikenali. Lebih buruk lagi, logical flow dari fungsi juga tidak dapat dikenali,
sehingga menyusahkan untuk memastikan apakah program dapat mengatasi
semua kejadian dengan benar: Apakah file akan ditutup bila fungsi gagal untuk
mengalokasikan memori dengan benar? Dan menjadi lebih sulit lagi jika kita
ingin mengubah fungsi tiga bulan kemudian. Banyak programmer yang
mengabaikan saja masalah ini, dan baru bertindak jika program crash.
Exception memungkinkan kita untuk menulis alur logika program utama dan
menangani kasus khusus di tempat lain. Jika bacaFile menggunakan exception,
maka code fungsi akan seperti ini.

!
!
!
!

!
!
!
!

bacaFile {
try {
buka file;
!
dapatkan ukuran file;
!
alokasikan memori sebesar ukuran file;
!
salin isi file ke memori;
!
tutup file;
} catch (fileOpenFailed) {
lakukanSesuatu;
} catch (sizeDeterminationFailed) {
lakukanSesuatu;
} catch (memoryAllocationFailed) {
lakukanSesuatu;
} catch (readFailed) {
lakukanSesuatu;
} catch (fileCloseFailed) {
lakukanSesuatu;
}
}
Dengan adanya exception, code menjadi terorganisasi, sehingga kerja kita
menjadi semakin efisien.
Keuntungan 2: Propagasi errors berdasarkan Call Stack
Keuntungan kedua exception adalah adanya mekanisme propagasi laporan error
melalui method-method di call stack. Misalkan bacaFile merupakan method ke 4
yang dipanggil sebagai secara berurutan sampai main program: method1

memanggil method2, method2 memanggil method3, dan method3


memanggil bacaFile.
method1 {
call method2;
}
method2 {
call method3;
}
method3 {
call bacaFile;
}
Misalkan method1 merupakan satu-satunya method yang dapat menangani error
di bacaFile(). Pada sistem notifikasi error secara tradisional, maka bacaFile,
method3 dan method2 hars mengirimkan return value berupa kode error. Hasilnya
adalah seperti kode di bawah ini:

method1 {
errorCodeType error;
error = call method2;
if (error)
doErrorProcessing;
else
proceed;
}
errorCodeType method2 {
errorCodeType error;
error = call method3;
if (error)
return error;
else
proceed;
}
errorCodeType method3 {
errorCodeType error;
error = call readFile;
if (error)
return error;
else
proceed;
}

Dengan kasus yang sama, Java runtime environment bisa mencari secara terbalik
ke call stack untuk mencari exception handling yang sesuai. Sehingga, kode di
atas akan menjadi:
method1 {
try {
call method2;
} catch (exception e) {
doErrorProcessing;
}
}
method2 throws exception {
call method3;
}
method3 throws exception {
call readFile;
}
Namun, sebagaimana diperlihatkan pada kode di atas, untuk keperluan ini
digunakan keywords throws.
Keuntungan 3: Pengelompokan dan Pembedaan Tipe Error
Karena semua exception yang dilempar adalah object, pengelompokan dan
kategorisasi exception dapat dilakukan menurut hierarki class. Contoh
pengelompokan berdasar hierarki class tersebut dapat dilihat di java.io -IOException dan turunannya. IOException adalah class exception yang paling
umum untuk menangani error input dan output. Turunan class ini diperuntukkan
bagi jenis error yang lebih spesifik. Sebagai contoh, FileNotFoundException
menandakan bahwa file tidak ditemukan di disk.
Di method dapat ditulis suatu handler untuk menangani masalah yang sangat
spesifik. FileNotFoundException tidak memiliki turunan, sehingga memang
peruntukannya sangat spesifik.
catch (FileNotFoundException e) {
...
}
Method dapat menangkap exception berdasarkan kelompoknya atau berdasarkan
kriteria yang lebih umum dengan menspesifikansikan tipe class exception yang
lebih umum. Sebagai contoh, untuk menangkap semua jenis masalah input dan
output gunakan kode berikut ini:
catch (IOException e) {
...
}
Handler ini akan menangkap semua exception bertipe I/O, termasuk
FileNotFoundException, EOFException dan lainnya. Bahkan kita dapat menulis
kode untuk menangkap semua jenis exception, sebagaimana berikut ini:
catch (Exception e) {

...
}

4. PROSEDUR PELAKSANAAN

utorial.
Konsep Exception Handling
Implementasi kata kunci try-catch-finally
Perbedaan method yang menggunakan Exception Handling dan yang tidak
Implementasi beberapa turunan dari class Exception yang terdapat di dalam
bahas pemrograman Java
Mahasiswa mengerjakan soal-soal latihan berdasarkan topik-topik yang ada di
dalam tutorial.
Mahasiswa mengerjakan soal tugas praktikum.
Mahasiswa mendemokan tugas praktikum ke asisten.

5. LAB: EKSPERIMEN DENGAN EXCEPTION HANDLING


Instruksi: Jawablah pertanyaan-pertanyaan berikut selama sesi laboratorium. Jika
anda tidak dapat menyelesaikan semua pertanyaan selama sesi praktikum.
Pesiapan: Sebelum mengerjakan semua pertanyaan, anda harus:
1. Buat direktori untuk praktikum modul ini
2. Sesuaikan environment pemrograman anda untuk modul ini
3. Copy file-file berikut ini di direktori yang telan anda buat
Contoh1.java
Contoh2.java
Contoh3.java
Contoh4.java
1. Contoh sederhana: Bagian ini mencoba contoh sederhana exception handling.
1.

Buka Contoh1.java dengan editor

2.

Compile dan eksekusi Contoh1

3.

Apa output dari aplikasi yang dieksekusi?


__________________________________
__________________________________

4.

Ubah nilai denominator dengan 0

5.

Re-compile dan re-execute Contoh1

6.

Apa error yang ditampilkan ketika mengeksekusi aplikasi ini?

__________________________________
__________________________________
7.

Mengapa error ini muncul pada saat runtime? (bukan pada saat compilasi)
__________________________________

8.

Tambahkan statemen try-catch. Letakkan statemen yang memunculkan


exception di dalam blok try dan biarkan blok catch kosong. (Hint: anda
harus dapat mengenali jenis exception yang muncul dan dimana letaknya
dari pesan error yang muncul)

9.

Re-compile Contoh1

10. Error apa yang muncul, dan apa penyebabnya?


_________________________________
11. Buka kembali file Contoh1
12. Tambahkan statemen System.out.println("Divide by 0.");
ke catch blok
13. Re-compile dan re-eksekusi Contoh1
14. Apa output yang dihasilkan?
_________________________________
15. P a n g g i l m e t h o d printStackTrace()

dari object

ArithmeticException pada bagian akhir blok catch


16. Re-compile dan re-eksekusi Contoh1
17. Apa output yang dihasilkan?
_________________________________
18. Program berjalan dengan normal atau tidak?
_________________________________

2. Contoh yang lebih kompleks: Kegiatan lab bagian ini mencoba contoh exception
handling di dalam dan di luar statemen blok
1.

Buka Contoh2.java dengan editor

2.

Compile Contoh2

3.

Apa error yang ditampilkan?


__________________________________

4.

Inisialisasi nilai i di dalam blok try dengan nilai 0 (yang letaknya


sebelum for loop).

5.

Compile Contoh2

6.

Apa error yang ditampilkan?


__________________________________

7.

Adalah tidak mungkin untuk menggunakan i tanpa inisialisasi. Namun, apa


penyebab error ini? (Hint: Pikirkan tentang statement blok)
__________________________________

8.

Pindahkan inisialisasi nilai i sebelum blok try.

9.

Compile dan execute Contoh2

10. Apa output yang dihasilkan?


_________________________________
11. Mengapa tidak semua proses pembagian dapat dilakukan (Hanya satu
pembagian saja yang ditampilkan)?
_________________________________
12. Perbaiki Contoh2 sehingga program dapat dieksekusi dengan benar.
(Hint: Pindah blok try-catch di dalam block for.) Perubahan apa yang anda
lakukan?

_________________________________

_________________________________

_________________________________
3. Pemakaian Exception Handling yang tidak tepat: Kegiatan lab bagian ini
mencoba contoh penggunaan exception handling yang tidak tepat dan bagaimana
memperbaikinya.
1.

Compile dan eksekusi Contoh3 dan pastikan bahwa keluarannya diakhiri


oleh kata Selesai

2.

Ubah Contoh3 sehingga hanya menggunakan loops saja dan tidak


menggunakan try-catch. Apa yang anda ubah?

_________________________________

_________________________________

_________________________________

4. Contok exception lainnya: Bagian ini akan memberikan contoh penggunaan


exception jenis lainnya, dimana exception muncul dan bagaimana digunakan.
1.

Apa saja yang bisa dilakukan oleh object StringTokenizer?

_________________________________

_________________________________

_________________________________
2.

Perhatikan constructor StringTokenizer

yang

memiliki

tiga

parameter. Apa fungsi dari tiga parameter tersebut?



_________________________________

_________________________________
3.

Compile Contoh4.java

4.

Execute Contoh4 sebagaimana berikut: java Contoh4 5.3+9.2

5.

Apa output yang dihasilkan?


_________________________________

6.

Execute Contoh4 sebagaimana berikut: java Contoh4 5.3+

7.

Apa output yang dihasilkan?


_________________________________

8.

Exception apa yang dilempar dan mengapa?


_________________________________

9.

Execute Contoh4 sebagaimana berikut: java Contoh4 5.3+a

10. Apa output yang dihasilkan?


_________________________________
11. Exception apa yang dilempar dan mengapa?
_________________________________

6. TUGAS SETELAH SESI LABORATORIUM


1. Ubah Contoh4.java sehingga mendukung proses penambahan (+),
pengurangan (-), perkalian (*), dan pembagian (/).
2. Ubah Contoh4.java sehingga semua input argumen dari command line bisa

dieksekusi (bukan hanya args[0] namun bisa juga args[1], args[2] dan seterusnya).
Program yang sudah diubah harus dapat digunakan untuk menangani tipe expresi
input yang berbeda. Sebagai contoh, program harus dapat mengeksekusi program
sebagaimana berikut: java Contoh4 5.0+4.1 3.2*9.1
3. Ubah Contoh4.java sehingga dapat menunjukkan operand mana yang bukan
angka. (Hint: Gunakan try-catch blok)

Anda mungkin juga menyukai