Laporan 6
Laporan 6
Disusun untuk Memenuhi Matakuliah Praktikum Pemrograman Berbasis Objek Yang Dibimbing
oleh Bapak Azhar Ahmad Smaragdina,
Asisten Praktikum:
Tantri Hari Mukti
Endah Puji Rohmawati
Wildan Setyo
oleh :
YUSI NUR AISYAH
130533608107
S1 PTI F 2013
LAPORAN VI
EXCEPTION HANDLING
A. TUJUAN
1. Mahasiswa mengetahui penanganan kesalahan program dengan exception handling.
2. Mahasiswa mampu menerapkan exception handling.
3. Mahasiswa mampu membedakan penerapan jenis exception handling.
4. Mahasiswa mampu membuat class exception sendiri.
5. Mahasiswa mampu melakukan input data melalui keyboard.
B. DASAR TEORI
1. Exception Handling
Exception adalah suatu keadaan yang menyebabkan program hang atau keluar dari alur
normal pada saat program dijalankan. Exception handling merupakan mekanisme untuk
menangkap bug atau kesalahan pada saat program sedang berjalan.
Exception juga bisa dikatakan sebagai sebuah peristiwa yang menjalankan alur proses
normal pada program. Peristiwa ini biasanya berupa kesalahan(error) dari beberapa bentuk.
Ini disebabkan program kita berakhir tidak normal. Beberapa contoh dari exception yang
Anda mungkin jumpai pada latihan-latihan sebelumnya adalah: exception
ArrayIndexOutOfBounds, yang terjadi jika kita mencoba mengakses elemen array yang
tidak ada, atau NumberFormatException, yang terjadi ketika kita mencoba melalui
parameter bukan angka dalam method Integer.parseInt.
Exception adalah suatu keadaan yang menyebabkan program hang atau keluar dari alur
normal pada saat program dijalankan. Exception handling merupakan mekanisme untuk
menangkap bug atau kesalahan pada saat program sedang berjalan.
Exception ini dipicu oleh Runtime Error yakni error yang terjadi pada saat program dieksekusi
oleh interprenter. Untuk mengantisipasi dapat ditambah statement yang akan memeriksa data
yang menyebabkan Runtime Error. Meskipun statement tambahan ini bersifat optional, namun
statement ini berguna untuk mencegah program menjadi hang atau quit hanya karena user salah
memasukkan data.
Ada beberapa subkelas yang diturunkan dari kelas exception, yaitu :
- ClassNotFoundException
Terjadi bila ingin menggunakan kelas yang tidak ada atau belum dibuat.
- CloneNotSupportedException
Terjadi bila ingin meng-clone atau menggandakan suatu kelas yang tidak didukung oleh
method clone
- RuntimeException
- NullPointerException
- ArrayIndexOutOfBoundsException
- ArithmeticException
Khusus untuk operasi aritmatika integer. Seperti pembagian suatu bilangan integer dengan 0
- IOException
Terjadi bila ada I/O error, seperti gagal menemukan dan membuka file. User memasukkan
input yang tidak valid. Subkelas ini memiliki beberapa subkelas lain, seperti
InterruptedIOException, EOFException, serta FileNotFoundException.
1
S1 Pend. Teknik Informatika 2013 OFF F
//tulis aksi apa dari program Anda yang dijalankan jika ada
//exception tipe tertentu terjadi
}
finally{
//tambahkan kode terakhir di sini
}
Exception dilemparkan selama eksekusi dari blok try dapat ditangkap dan ditangani
dalam blok catch. Kode dalam blok finally selalu di-eksekusi. Berikut ini adalah aspek kunci
tentang sintak dari konstruksi try-catch-finally:
Notasi blok bersifat perintah
Setiap blok try, terdapat satu atau lebih blok catch, tetapi hanya satu blok finally.
Blok catch dan blok finally harus selalu muncul dalam konjungsi dengan blok try, dan
diatas urutan
Blok try harus diikuti oleh paling sedikit satu blok catch ATAU satu blok finally, atau
keduanya.
Setiap blok catch mendefinisikan sebuah penanganan exception. Header dari blok catch
harus membawa satu argumen, dimana exception pada blok tersebut akan ditangani.
Exception harus menjadi class pelempar atau satu dari subclassesnya.
2
S1 Pend. Teknik Informatika 2013 OFF F
Marilah mengambil contoh kode yang mencetak argumen kedua ketika kita mencoba
menjalankan kode menggunakan argumen command-line. Perkirakan, tidak ada pengecekan
dalam kode Anda untuk angka dari argumen dan kita hanya mengakses argumen kedua
args[1] segera, kita akan mendapatkan exception berikut.
Exception in thread "main"
java.lang.ArrayIndexOutOfBoundsException: 1
at ExceptionExample.main(ExceptionExample.java:5)
Untuk mencegah kejadian ini, kita dapat menempatkan kode ke dalam blok try-catch.
Blok finally hanya sebagai pilihan lain saja. Sebagai contoh, kita tidak akan menggunakan
blok finally.
public class ExceptionExample
{
public static void main( String[] args ){
try{
System.out.println( args[1] );
}catch( ArrayIndexOutOfBoundsException exp ){
System.out.println("Exception caught!");
}
}
}
Jadi kita akan menjalankan program lagi tanpa argumen, keluarannya akan menjadi,
Exception caught!.
C. LATIHAN
1. Latihan 1 : Tanpa Exception Handling
Source code : DivByZero.java
class DivByZero {
public static void main(String args[]){
System.out.println(5/0);
System.out.println("Ini adalah keluaran program");
3
S1 Pend. Teknik Informatika 2013 OFF F
}
}
Blok script program yang berpotensi menimbulkan exception, tidak di dalam blok try.
Tidak ada blok cacth yang berguna untuk menangkap exception yang terjadi, yang berisi
blok kode program yang akan dijalankan agar program tetap berjalan serta dicantumkan
jenis exceptionnya.
Deskrisi Program:
Pada contoh program latihan 1, terdapat blok program yang menimbulkan exception, namun
tidak terdapat exception handling yang dilakukan. Sehingga ketika kita menjalankan
programnya langsung berhenti serta output program selanjutnya tidak ditampilkan dan terdapat
warning jenis exception yang terjadi oleh compiler. Pesan eror yang muncul tersebut
menginformasikan tipe exception yang terjadi pada baris dimana exception itu berasal. Inilah
aksi default yang terjadi bila terjadi exception yang tidak tertangani. Jika tidak terdapat kode
yang menangani exception yang terjadi, aksi default akan bekerja otomatis. Aksi tersebut
pertama-tama akan menampilkan deskripsi exception yang terjadi. Kemudian akan
ditampilkan stack trace yang mengindentifikasi method dimana exception terjadi. Pada bagian
akhir, aksi default tersebut akan menghentikan program secara paksa.
Deskripsi Program:
Di dalam program latihan 2 ini terdapat penggunaan konsep exception handling dimana
terdapat blok program yang akan menimbulkan exception di dalam try berupa pembagian
bilangan dengan nol. Sehingga program yang seharusnya terminated sudah di catch bertipe
arithmaticException lalu output program yang seharusnya ada di dalam blok try akan di skip
setelah terjadi kesalahan menjadi hasil dari blok catch dan blok setelah try-catch itu sendiri
namun program tetap berjalan.
5
S1 Pend. Teknik Informatika 2013 OFF F
b. Ketika melakukan running program, tambahlah argument berupa String Nama kota
kelahiran anda!
Source code : lahir.java
public class lahir {
public static void main (String args []) {
try {
int a=5/0; //berpotensi untuk menimbulkan kesalahan yaitu pembagian
dengan bilangan 0
int num = Integer.parseInt ("MALANG"); //penambahan kota kelahiran
System.out.println("perintah selanjutnya..");
}
catch(ArrayIndexOutOfBoundsException e){
}
catch (NullPointerException e) {
}
catch (Exception e){
}
}
}
e) selalu
aturan subclass dari kelas exception jenis Exception e ini memang berada di bawah. Jadi
untuk aturan pada syntax harus menyesuaikan dengan hirarki pada subkelas tersebut.
Deskripsi Program:
Dalam latihan 3 ini terdapat contoh program exception handling yang di dalamnya terdapat 2
statement throw yang melempar ke 2 catch yang berbeda, namun yang bisa menangkap hanya
exception yang hanya sesuai dengan tipe exceptionnya. ArrayIndexOutOfBoundsException
dilemparkan ketika mengakses array dengan index yang tidak valid .
NullPointerException dilemparkan ketika kita mengakses suatu reference variable yang
null.
4. Latihan 4 : Try-Catch-Finally
Source code : TCF.java
public class TCF
{
public TCF(){
}
public static void main(String args[])
{
int nol = 0 ;
int angka = 10;
try {
int hasil = angka/nol;
System.out.println("Hasil = "+hasil);
}
catch (ArithmeticException e)
{
System.out.println("Terjadi pembagian dgn nol.Exception
ditangkap");
}
finally{
System.out.println("Kalimat di blok finally");
}
System.out.println("Kalimat diluar blok try-catch-finally");
}
}
System.out.println("After throwing");
} catch (RuntimeException e) {
System.out.println("Exception caught here.");
System.out.println(e);
}
Output program:
Deskripsi Program:
Dalam latihan 5 ini terdapat contoh pelemparan Exception dengan keyword throw new di
dalam blok Try kemudian akan langsung ditangkap dalam blok catch.
10
S1 Pend. Teknik Informatika 2013 OFF F
Program 2
Source code : DataMhs.java
class DataMhs
private
private
private
{
String nim;
String nama;
double nilai;
11
S1 Pend. Teknik Informatika 2013 OFF F
Output program:
Deskripsi Program:
Pada latihan 5.1 ini terdapat contoh throw exception yang lain di dalam blok try, namun
tidak ditangkap karena di dalam blok try tidak terjadi kesalahan sehingga tidak dilempar
menuju blok catch.
5.2 Keyword Throws
Source code : DemoThrows2.java
public class DemoThrows2 {
public static void uji(int angka)
throws NullPointerException, ArithmeticException {
if (angka < 0) {
throw new NullPointerException("KESALAHAN: null pointer
exception");
} else {
throw new ArithmeticException("KESALAHAN: arithmetic
exception");
}
}
public static void main(String[] args) {
try {
//uji(-12); // menimbulkan eksepsi NullPointerException
uji(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");
}
}
Output program:
Deskripsi Program:
Dalam latihan 5.2 ini terdapat contoh program ini terdapat 2 statement throw yang melempar
ke 2 catch yang berbeda, namun yang bisa menangkap hanya exception yang hanya sesuai
dengan tipe exception-nya.
12
S1 Pend. Teknik Informatika 2013 OFF F
13
S1 Pend. Teknik Informatika 2013 OFF F
Deskripsi Program:
Dalam latihan 6 ini terdapat contoh pembuatan exception sendiri, dengan membuat class
yang berisi method-method yang diturunkan dakelas exception dalam java. Kemudian akan
digunakan di kelas lain yang menggunakannya.
D. MELAKUKAN INPUT
1. Membaca input berupa karakter
Source code : DemoInputKarakter.java
import java.io.*;
class DemoInputKarakter {
public static void main(String[] args) throws IOException {
System.out.println("Masukan sembarang karakter: ");
char ch;
InputStreamReader isr = new InputStreamReader(System.in);
BufferedReader br = new BufferedReader(isr);
ch = (char) br.read();
System.out.println("Karakter yang dimasukan adalah \'" +ch+ "\'");
}
}
Deskripsi program:
Program yang melakukan pembacaan data dari input user. Pada program ini ia membaca
inputan data berupa karakter dan menggunakan metode Buffered Reader untuk menginputkan
datanya.
2. Membaca input data string
Source code : DemoInputString.java
import java.io.*;
class DemoInputString {
public static void main(String[] args) throws IOException {
System.out.print("Masukan nama anda : ");
String nama;
InputStreamReader isr = new InputStreamReader(System.in);
BufferedReader br = new BufferedReader(isr);
nama = br.readLine();
14
S1 Pend. Teknik Informatika 2013 OFF F
Deskripsi program:
Program yang melakukan pembacaan data dari input user. Pada program ini ia membaca
inputan data berupa string atau kata. Disini program menggunakan metode Buffered Reader
untuk menginputkan datanya.
3. Membaca input data numeric
Source code : DemoInputNumerik1.java
import java.io.*;
class DemoInputNumerik1 {
public static void main(String[] args) throws IOException {
System.out.print("Masukan sebuah bilangan bulat : ");
String temp;
int bilangan=0;
InputStreamReader isr = new InputStreamReader(System.in);
BufferedReader br = new BufferedReader(isr);
// input data dianggap sebagai string
temp = br.readLine();
try {
// konversi dari string ke interger
bilangan = Integer.parseInt(temp);
} catch (NumberFormatException nfe) {
System.out.println("Data yang dimasukan bukan bilangan bulat");
System.exit(1);
}
System.out.println("Bilangan yang dimasukan " +"adalah "+bilangan);
}
}
15
S1 Pend. Teknik Informatika 2013 OFF F
Deskripsi program:
Program yang melakukan pembacaan data dari input user. Pada program ini ia membaca
inputan data berupa numerik dan menggunakan metode Buffered Reader untuk menginputkan
datanya. Perbedaan numerik1 dan numerik2 adalah pada jenis tipe data yang digunakan. Pada
numerik1 ia menggunaka tipe data integer sehingga hasilnya 12. Sedangkan pada numerik2 ia
menggunakan tipe data floating point sehinggan hasilnya adalah 12.0
E. TUGAS PRAKTIKUM
1. Buatlah program yang hanya bisa menerima input berupa angka saja. Bila diinputkan selain
angka (numerik) maka akan ditangkap oleh blok catch
Source code : tp.java
import java.io.*;
class tp {
public static void main (String[] args) throws IOException {
System.out.println(" ");
System.out.println("+----------------------------------+");
System.out.println("+
Memasukkan Data Berupa Angka
+");
System.out.println("+
Yusi Nur Aisyah 130533608107
+");
System.out.println("+----------------------------------+\n");
System.out.print("Masukkan sebuah angka : ");
String temp;
int angka = 0;
InputStreamReader isr = new InputStreamReader(System.in);
BufferedReader br = new BufferedReader(isr);
//input data dianggap sebagai string
temp = br.readLine();
try {
//konversi dari string ke integer
angka = Integer.parseInt(temp);
}catch (NumberFormatException nfe){
System.out.println("Data yang Anda masukan bukan berupa angka");
System.exit(1);
}
System.out.println("Bilangan yang dimasukkan " +"adalah "
+angka);
16
S1 Pend. Teknik Informatika 2013 OFF F
}
}
2. Berdasarkan program diatas tambahkan blok finally untuk menyatakan bahwa telah dilakukan
pengecekan terhadap data yang diinputkan
import java.io.*;
class tp {
public static void main (String[] args) throws IOException {
System.out.println(" ");
System.out.println("+----------------------------------+");
System.out.println("+
Memasukkan Data Berupa Angka
+");
System.out.println("+
Yusi Nur Aisyah 130533608107
+");
System.out.println("+----------------------------------+\n");
System.out.print("Masukkan sebuah angka : ");
String temp;
int angka = 0;
InputStreamReader isr = new InputStreamReader(System.in);
BufferedReader br = new BufferedReader(isr);
17
S1 Pend. Teknik Informatika 2013 OFF F
Output program
Deskripsi program:
Program ini program yang digunakan untuk memasukkan data berupa angka. Ketika data
yang dimasukkan bukan berupa angka maka muncul tampilan Data yang Anda masukkan
bukan berupa angka. Disini menggunakan eksepsi jenis IOException yang merupakan
penanganan terhadap kesalahan inputan. Untuk mengatur input berupa angka yaitu String
temp; dan int angka = 0; . Ketika input data dianggap sebagai suatu string maka akan
langsung dilempar ke IOException yang diterima oleh NumberFormatException dan
menampilkan pesan kesalah tadi.
Penambahan blok finally hanya melakukan pengecekan terhadap data yang diinputkan. Ketika
data sudah benar maka akan ditampilkan pesan dari data yang sudah diinputkan tadi. Apabila
inputan salah maka akan ditampilkan juga pesan kesalahannya dan hasil inputan dinyatakan
sebagai nol (0). Blok finally tetap di eksekusi baik data yang diinputkan sudah benar maupun
salah.
F. TUGAS RUMAH
Buat program exception handling sendiri dengan spesifikasi :
1. Menggunakan exception handling multiple catch
2. Minimal 2 multiple catch
3. Dimana catchnya bukan dari bawaan Java, tetapi kalian buat ekspresi catch sendiri selain
contoh di Latihan 6!
Source code : Eksepsi.java
//kelas Eksepsi merupakan kelas eksepsi yang dibuat sendiri
class Eksepsi extends Exception{
18
S1 Pend. Teknik Informatika 2013 OFF F
Deskripsi program :
Program pada tugas rumah ini adalah program exception handling jenis multiple catch. Multiple
catch pada program ditunjukkan dengan adanya :
try {
methodKu();
}
catch (Eksepsi e) {
System.out.println("Terjadi eksepsi! \ndari " + e);
}
catch (Exception e){ //Catch dengan objek Exception
System.out.println("I hate Eksepsi " + e);
}
Disini multiple catch yang pertama menggunakan metode eksepsi buatan sendiri dengan nama
Eksepsi. Kita menggunakan juga keyword exception handling yaitu throw yang digunakan untuk
melempar eksepsi yang terjadi. Eksepsi di lempar kepada Eksepsi. Karena yang ditangkap adalah
blok methodKu maka ketika terjadi eksepsi langsung dilemparkan kepada Eksepsi dan ditangkap
oleh catch yang pertama yang berbunyi terjadi eksepsi dari Isi Eksepsi.
7. KESIMPULAN
Menjalankan perintah
Selain menangkap exception, java juga memungkinkan untuk melemparkan exception agar
dapat ditangkap oleh blok catch, yakni menggunakan keyword throw
Blok try akan mencoba memanggil statement-statement dari method yang dideklarasikan dengan
exception dan blok catch digunakan untuk memproses bila terjadi exception, bila pada saat
mengeksekusi blok try ada statement yang menyebabkan exception, maka Interpenter akan langsung
keluar dari blok try, kemudian mencari blok catch yang bersesuaian dengan exception yang terjadi.
DAFTAR RUJUKAN
-
20
S1 Pend. Teknik Informatika 2013 OFF F