MODUL PEMROGRAMAN BERORIENTASI OBJEK
(CCC210)
MODUL 13
EXCEPTION HANDLING
DISUSUN OLEH
INDRIANI NOOR HAPSARI, ST, MT
UNIVERSITAS ESA UNGGUL
2020
Universitas Esa Unggul
http://esaunggul.ac.id 0 / 16
MODUL 13 - EXCEPTION HANDLING
A. Kemampuan Akhir Yang Diharapkan
Setelah mempelajari modul ini, diharapkan:
1. Mahasiswa memahami dan menjelaskan konsep exception handling.
2. Mahasiswa dapat memahami dan menjelaskan manfaat exception handling.
3. Mahasiswa dapat menerapkan konsep exception handling dalam program.
B. Outline Topik
1. Konsep Exception Handling...............................................................................................2
2. Java Try and Catch............................................................................................................. 3
3. Finally.................................................................................................................................... 5
4. Membuat Custom Exception dengan “throw”..................................................................6
5. Checked Exception..............................................................................................................8
6. Mendefinisikan Exception di header fungsi dengan “throws”....................................... 9
Universitas Esa Unggul
http://esaunggul.ac.id 1 / 16
C. Uraian
1. Konsep Exception Handling
Ketika menjalankan program, mungkin terjadi sejumlah error / kesalahan yang
menyebabkan program tidak dapat berfungsi sebagaimana mestinya. Kesalahan
dapat terjadi karena:
a. Kesalahan pada kode program yang dibuat oleh programmer
b. Kesalahan yang terjadi karena salah input
c. Kesalahan yang terjadi karena kondisi yang tidak terduga sebelumnya.
Ketika terjadi kesalahan, program akan berhenti dan menampilkan pesan kesalahan.
Atau dengan istilah lain, program akan “Throw an Exception” atau “melemparkan
kesalahan”.
Exception adalah sebuah objek yang merepresentasikan terjadinya error pada saat
program dijalankan (runtime error). Ketika program dikompilasi, maka error ini belum
terdeteksi sampai program dijalankan dan terjadi kesalahan dalam operasinya.
Contoh kesalahan yang dapat terjadi pada saat runtime adalah sebagai berikut:
a. Pembagian dengan 0
b. Memanggil substring dari sebuah string dengan index melebihi panjang string
c. Mencoba membaca input dengan tipe yang salah melalui Scanner
d. Mencoba membaca file yang tidak ada
Dapat kita katakan bahwa sebuah program dengan kesalahan akan melempar
(throw) sebuah exception. Dan kita dapat menangani/memperbaiki exception
tersebut dengan “menangkapnya (catch)”.
Universitas Esa Unggul
http://esaunggul.ac.id 2 / 16
2. Java Try and Catch
Statement try memungkinkan pemrogram mendefinisikan sebuah blok kode untuk
diuji kesalahannya saat program berjalan. Statement catch memungkinkan
pemrogram mendefinisikan sebuah kode untuk dijalankan jika terjadi kesalahan di
blok try.
Kata kunci try dan catch digunakan secara berpasangan sebagai berikut:
try {
// Block of code to try
} catch (Exception e) {
// Block of code to handle errors
}
Perhatikan contoh berikut ini. Contoh ini akan menghasilkan sebuah kesalahan,
karena myNumbers[10] tidak ada.
public class Main {
public static void main(String[ ] args) {
int[] myNumbers = {1, 2, 3};
System.out.println(myNumbers[10]); // error!
}
}
Apabila kesalahan tersebut tidak ditangani dalam penanganan exception, maka akan
ketika program dijalankan program akan berhenti dan melempar exception dengan
pesan berikut ini.
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 10
at Main.main(Main.java:4)
Universitas Esa Unggul
http://esaunggul.ac.id 3 / 16
Kita dapat menggunakan try...catch untuk menangkap kesalahan tersebut dan
menjalankan sejumlah kode untuk menanganinya.
public class Main {
public static void main(String[ ] args) {
try {
int[] myNumbers = {1, 2, 3};
System.out.println(myNumbers[10]);
} catch (Exception e) {
System.out.println("Something went wrong.");
}
}
}
Dengan menggunakan kode try...catch di atas, maka program tidak akan
keluar/berhenti dan hanya menampilkan pesan kesalahan sebagai berikut.
Something went wrong.
Universitas Esa Unggul
http://esaunggul.ac.id 4 / 16
3. Finally
Statement finally digunakan untuk mengeksekusi kode program setelah
try...catch apapun hasilnya (dengan atau tanpa adanya exception).
Berikut adalah contoh penggunaan finally.
public class Main {
public static void main(String[] args) {
try {
int[] myNumbers = {1, 2, 3};
System.out.println(myNumbers[10]);
} catch (Exception e) {
System.out.println("Something went wrong.");
} finally {
System.out.println("The 'try catch' is finished.");
}
}
}
Dengan menggunakan kode finally seperti yang dituliskan di kode program di
atas, maka ketika program menemukan kesalahan, program akan melempar
exception dan akan ditangkap oleh blok catch, sehingga program tidak akan berhenti
namun menampilkan pesan kesalahan “Something went wrong”. Setelah itu, kode
program di blok finally akan dijalankan, sehingga output program akan menjadi
seperti berikut ini.
Something went wrong.
The 'try catch' is finished.
Universitas Esa Unggul
http://esaunggul.ac.id 5 / 16
4. Membuat Custom Exception dengan “throw”
Statement throw digunakan untuk membuat custom error. Statement throw
digunakan bersama dengan tipe exception. Ada banyak tipe exception yang
tersedia di java, yaitu ArithmeticException, FileNotFoundException,
ArrayIndexOutOfBoundsException, SecurityException, dan lain
sebagainya.
Berikut ini adalah contoh kode program yang melempar sebuah exception ketika nilai
age di bawah 18 dengan mencetak pesan “Access denied”. Jika age bernilai 18
atau lebih, maka program akan mencetak pesan “Access granted”.
public class Main {
static void checkAge(int age) {
if (age < 18) {
throw new ArithmeticException("Access denied - You must
be at least 18 years old.");
}
else {
System.out.println("Access granted - You are old
enough!");
}
}
public static void main(String[] args) {
checkAge(15); // Set age to 15 (which is below 18...)
}
}
Ketika program di atas dijalankan, maka ketika fungsi checkAge(15) dipanggil,
program akan mengeksekusi fungsi checkAge, dan masuk ke kondisi age < 18,
kemudian melempar ArithmeticException yang akan membuat program
berhenti berjalan dan mengeluarkan pesan berikut ini.
Universitas Esa Unggul
http://esaunggul.ac.id 6 / 16
Exception in thread "main" java.lang.ArithmeticException: Access denied - You must be at
least 18 years old.
at Main.checkAge(Main.java:4)
at Main.main(Main.java:12)
Agar program hanya menampilkan kesalahan tanpa berhenti berjalan, maka fungsi
checkAge harus dipanggil dalam blok try...catch sehingga kesalahan dapat
ditangani.
Universitas Esa Unggul
http://esaunggul.ac.id 7 / 16
5. Checked Exception
Checked Exception adalah sebuah error yang harus ditangani oleh program
(apabila tidak ditangani, maka program tersebut tidak dapat dikompilasi). Jika
beberapa kode dalam sebuah fungsi melempar Checked Exception, maka fungsi
tersebut harus melakukan salah satu dari dua hal berikut:
1. menangani exception tersebut dengan menuliskan blok try...catch atau
2. mendefinisikan exception tersebut dengan melempar katakunci throws pada
header fungsi.
Sebagai contoh, pemrosesan Input/Output (I/O) file harus ditangani untuk
menghindari kegagalan I/O. Berikut ini adalah contoh program Java untuk membuka
file di lokasi “C:\ test\ a.txt” dan mencetak tiga baris pertama dari file tersebut.
import java.io.*;
class Main {
public static void main(String[] args) {
FileReader file = new FileReader("C:\\test\\a.txt");
BufferedReader fileInput = new BufferedReader(file);
// Print first 3 lines of file "C:\test\a.txt"
for (int counter = 0; counter < 3; counter++)
System.out.println(fileInput.readLine());
fileInput.close();
}
}
Program tersebut tidak dapat dikompilasi, karena fungsi main() menggunakan
FileReader dan FileReader melempar checked exception yaitu
Universitas Esa Unggul
http://esaunggul.ac.id 8 / 16
FileNotFoundException. Program tersebut juga menggunakan fungsi
readLine() dan close() dan kedua fungsi tersebut juga melempar checked
exception yaitu IOException.
Sehingga, ketika program dikompilasi, maka akan menghasilkan output sebagai
berikut.
Exception in thread "main" java.lang.RuntimeException: Uncompilable source code -
unreported exception java.io.FileNotFoundException; must be caught or declared to be
thrown
at Main.main(Main.java:5)
Untuk memperbaiki program di atas, maka kita harus mendefinisikan daftar
exception dengan menggunakan throws, atau perlu menambahkan blok
try...catch.
6. Mendefinisikan Exception di header fungsi dengan “throws”
Perhatikan kembali contoh program berikut ini.
import java.io.*;
class Main {
public static void main(String[] args) {
FileReader file = new FileReader("C:\\test\\a.txt");
BufferedReader fileInput = new BufferedReader(file);
// Print first 3 lines of file "C:\test\a.txt"
for (int counter = 0; counter < 3; counter++)
System.out.println(fileInput.readLine());
Universitas Esa Unggul
http://esaunggul.ac.id 9 / 16
fileInput.close();
}
}
Untuk memperbaiki program di atas agar dapat dikompilasi, maka kita harus
mendefinisikan daftar exception dengan menggunakan throws, atau perlu
menambahkan blok try...catch. Pada bagian ini, kita akan mendemonstrasikan
cara menggunakan throws di header fungsi.
Karena FileNotFoundException merupakan turunan dari kelas IOException,
maka kita dapat hanya mendefinisikan satu exception yaitu IOException di daftar
throws dan membuat kode program di atas menjadi bebas dari error / dapat
dikompilasi.
import java.io.*;
class Main {
public static void main(String[] args) throws IOException {
FileReader file = new FileReader("C:\\test\\a.txt");
BufferedReader fileInput = new BufferedReader(file);
// Print first 3 lines of file "C:\test\a.txt"
for (int counter = 0; counter < 3; counter++)
System.out.println(fileInput.readLine());
fileInput.close();
}
}
Pada kode program di atas, program akan melempar error dan berhenti apabila tidak
Universitas Esa Unggul
http://esaunggul.ac.id 10 /
16
menemukan file di url yang telah dituliskan. Agar program tetap berjalan walaupun
file tidak ditemukan, maka kita dapat menuliskan program tersebut ke dalam blok
try...catch sebagai berikut.
import java.io.*;
class Main {
public static void main(String[] args) {
try {
FileReader file = new FileReader("C:\\test\\a.txt");
BufferedReader fileInput = new BufferedReader(file);
// Print first 3 lines of file "C:\test\a.txt"
for (int counter = 0; counter < 3; counter++)
System.out.println(fileInput.readLine());
fileInput.close();
} catch (IOException ex)
{
System.out.println(“File not found.”);
}
}
}
Dengan menggunakan kode try...catch di atas, maka program tidak akan
keluar/berhenti dan akan menampilkan pesan kesalahan sebagai berikut ketika file
"C:\\test\\a.txt" tidak ditemukan.
File not found.
Universitas Esa Unggul
http://esaunggul.ac.id 11 /
16
7. Kontroversi Unchecked Exceptions
Karena Java tidak memerlukan fungsi untuk menangkap atau mendefinsikan
Unchecked Exceptions (seperti RuntimeException, Error, dan kelas
turunannya), programmer mungkin akan mencoba menulis kode yang hanya
melempar unchecked exception saja atau membuat custom exception yang
diturunkan dari kelas RuntimeException. Kedua jalan pintas ini memungkinkan
programmer menuliskan kode program tanpa terganggu oleh compiler error dan
tanpa harus mendefinisikan atau menangkap exception. Meskipun cara ini nampak
nyaman bagi programmer, namun hal ini akan menghindari niat untuk menangani
kesalahan tersebut atau menyebabkan persoalan bagi programmer lain yang
menggunakan kode yang Anda tuliskan.
Mengapa desainer memutuskan untuk memaksa sebuah fungsi dengan melempar
unchecked exception yang dapat dilemparkan di dalamnya? Exception yang
dilemparkan oleh fungsi tersebut merupakan bagian dari antarmuka program.
Program yang memanggil fungsi tersebut harus tahu tentang exception yang
mungkin dapat dilemparkan oleh fungsi tersebut sehingga mereka bisa menentukan
apa yang harus dilakukan untuk menanganinya. Exception ini merupakan bagian dari
antarmuka pemrograman fungsi seperti halnya parameter fungsi dan nilai yang
dikembalikannya.
Runtime exception hanya diperuntukkan untuk persoalan pemrograman yang mana
kode API client tidak dapat diharapkan memperbaiki persoalan tersebut atau
menangani persoalan tersebut dengan cara apapun. Persoalan ini meliputi:
1. Ekspresi aritmatika, seperti pembagian dengan 0
2. Pointer exception, seperti mencoba mengakses sebuah objek melalui null
reference.
3. Indexing exception, seperti mencoba mengakses sebuah elemen array dengan
index yang terlalu besar atau terlalu kecil.
Universitas Esa Unggul
http://esaunggul.ac.id 12 /
16
Runtime exception dapat terjadi dimanapun dalam program, dan dalam jumlah yang
banyak, sehingga pendefinisian runtime exception di setiap deklarasi fungsi dapat
membingungkan/mengurangi kejelasan program. Sehingga, compiler tidak
mengharuskan pemrogram untuk menangkap runtime exception (walaupun bisa
dilakukan).
Kasus dimana merupakan hal yang umum dilakukan untuk melempar
RuntimeException ketika user memanggil fungsi dengan cara yang tidak benar.
Sebagai contoh, fungsi dapat memeriksa apakah salah satu argumennya null. Jika
argumennya null, maka fungsi tersebut akan melempar NullPointerException
yang merupakan unchecked exception.
Kesimpulannya, jangan melempar sebuah RuntimeException atau membuat
turunan dari RuntimeException hanya karena Anda tidak ingin repot
mendefinisikan exception di fungsi yang dapat melempar kesalahan tersebut.
Apabila client dapat mengetahui dengan jelas apa yang harus dilakukan untuk
melakukan pemulihan dari sebuah exception, maka buatlah sebuah checked
exception. Jika client tidak dapat melakukan apapun untuk memulihkan dari sebuah
exception, maka buatlah unchecked exception.
Universitas Esa Unggul
http://esaunggul.ac.id 13 /
16
D. Latihan
1. Checked Exception adalah sebuah error yang harus ditangani oleh program
(apabila tidak ditangani, maka program tersebut tidak dapat dikompilasi).
a) Benar
b) Salah
c) Tidak diketahui
2. Unchecked Exception adalah sebuah error yang harus ditangani oleh program
(apabila tidak ditangani, maka program tersebut tidak dapat dikompilasi).
a) Benar
b) Salah
c) Tidak diketahui
3. Dengan menggunakan try...catch, maka bila terjadi exception, program
dapat tetap berjalan dan memperbaiki kesalahan dengan menjalankan kode
program yang dituliskan di blok “catch”.
a) Benar
b) Salah
c) Tidak diketahui
4. Pembagian dengan 0 merupakan contoh unchecked exception.
a) Benar
b) Salah
c) Tidak diketahui
5. Mencoba membaca sebuah file yang tidak ada merupakan contoh unchecked
exception.
a) Benar
b) Salah
c) Tidak diketahui
Universitas Esa Unggul
http://esaunggul.ac.id 14 /
16
E. Daftar Referensi
Stuart Reges and Marty Stepp, Building Java Programs : A Back to Basics Approach,
Pearson, 2019.
buildingjavaprograms.com
https://docs.oracle.com/javase/tutorial/essential/exceptions/definition.html
Universitas Esa Unggul
http://esaunggul.ac.id 15 /
16