Tujuan Intruksional

advertisement
2017-05-17
Badiyanto, S.Kom, M.Kom
Tujuan Intruksional
 Mampu menjelaskan tentang event handling
 Mampu menjelaskan tentang method
 Mampu menggunakan event handling
 Mampu membuat method
2
1
2017-05-17
Sub Pokok Bahasan
 Keyboard & mouse event
 Membuat method
 try..catch
3
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.
2
2017-05-17
Pengertian Eksepsi
 Eksepsi adalah suatu kondisi abnormal yang terjadi pada saat
pengeksekusian suatu perintah.
 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.
3
2017-05-17
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
4
2017-05-17
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.
Keywords
 try
 catch
 finally
 throw
 throws
5
2017-05-17
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*/
}
 try :
 Blok digunakan untuk menempatkan kode-kode program java yang
mengandung kode program yang mungkin melemparkan exception.
 catch :
 Blok digunakan untuk menempatkan kode-kode program java yang
digunakan untuk menangani sebuah exception tertentu.
 finally :
 Blok digunakan untuk menempatkan kode-kode program yang pasti akan
selalu dieksekusi baik terjadi atau tidak terjadi eksepsi
6
2017-05-17
7
2017-05-17
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
8
2017-05-17
UnCheck Exception
 Semua eksepsi yang bertipe RuntimeException dan
turunannya tidak harus ditangani secara eksplisit.
 Mengindikasikan kesalahan implementasi atau desain
program.
 Contoh : ArrayIndexOutOfBoundsException
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
9
2017-05-17
Misal terdapat algoritma program:
Fungsi bacaFile
 BukaFile
 BacaBarisFileSampaiHabis
 TutupFile
Masalah
 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.
10
2017-05-17
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
}
11
2017-05-17
Try dengan 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
12
2017-05-17
 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
13
2017-05-17
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.
14
2017-05-17
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) {
………..
}
15
2017-05-17
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{
Melempar obyek eksepsi secara eksplisit
public static void methodLain(){
try{
throw new ArrayIndexOutOfBoundsException(1);
}catch(ArrayIndexOutOfBoundsException e){
System.out.println("Penanganan Eksepsi dlm methodlain()");
throw e;
}
}
public static void main(String arg[]){
try{
Obyek eksepsi dilempar lagi ke luar method
methodLain();
}catch(ArrayIndexOutOfBoundsException e){
System.out.println("Penanganan Eksepsi dlm method main()");
}
}
}
16
2017-05-17
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.
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 {
………..
}
17
2017-05-17
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;
}
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()");
}
}
}
C:/ java DemoEksepsi8 Param1
Buka file
Proses file
Tutup File
Kode ini tidak akan
dieksekusi jika terjadi
eksepsi pada blok try
C:/ java DemoEksepsi8
Buka file
Proses file
Penanganan Eksepsi dlm methodLain
Penanganan Eksepsi dalam method main()
18
2017-05-17
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()");
}
}
}
19
2017-05-17
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);
}
}
}
20
Download