• Tidak ada hasil yang ditemukan

Paket dan Interface. 15 th week Estu Sinduningrum ST,MT

N/A
N/A
Protected

Academic year: 2021

Membagikan "Paket dan Interface. 15 th week Estu Sinduningrum ST,MT"

Copied!
60
0
0

Teks penuh

(1)

Paket dan Interface

15th week

(2)

Mengimpor paket yang Telah

Dibuat ke dalam program

(3)

Langkah-langkah

Mengimpor paket yang Telah

Dibuat ke dalam program

Berikut ini contoh kode program yang akan menunjukkan cara

pembuatan paket.

Di sini, kita akan menyimpan file kode program ke dalam paket

contohpkg, yang secara fisik diisimpan dalam direktori

ContohPkg. Ikuti langkah-langkah berikut:

(4)
(5)

Estu Sinduningrum, ST, MT

set CLASSPATH dari direktori kerja Anda. sebagai contoh, apabila Anda, bekerja di direktori E:\Latihan_OOP, maka Anda dapat menuliskan perintah berikut pada command-prompt.

Aktifkan direktori kerja Anda dan buat direktori baru

dengan nama ContohPkg di dalamnya melalui

(6)

Buat file baru dengan nama

Lingkaran.java

dan simpan ke

dalam direktori

Contohpkg.

lsikan kode berikut ke dalamnya.

Estu Sinduningrum, ST, MT

package ContohPkg;

public class Lingkaran {

private final double PI = 3.1416;

private double r;

public Lingkaran(double r) {

this.r = r;

}

public double luas() {

return (PI * r * r);

}

public double keliling() {

return (2 * PI * r);

(7)

Buat file baru dengan nama

Segitiga.java

dan simpan ke

dalam direktori

Contohpkg

. lsikan kode berikut ke dalamnya.

Estu Sinduningrum, ST, MT

package ContohPkg;

public class Segitiga {

private double tinggi;

private double alas;

public Segitiga(double tinggi, double alas) {

this.tinggi = tinggi;

this.alas = alas;

}

public double luas() {

return ((tinggi * alas)/2);

}

}

(8)

Buat file baru dengan nama

DemoPanggilPaket

.java dan

simpan ke dalam direktori

Latihan_OOP

.

lsikan kode berikut ke dalamnya.

Estu Sinduningrum, ST, MT

// mengimpor semua kelas yang terdapat pada paket ContohPkg

import ContohPkg.*;

class DemoPanggilPaket {

public static void main(String[] args) {

Lingkaran obLingkaran = new Lingkaran(7);

Segitiga obSegitiga = new Segitiga(4, 3);

System.out.println("Luas lingkaran : " +

obLingkaran.luas());

System.out.println("Keliling lingkaran : " +

obLingkaran.keliling());

System.out.println("Luas Segitiga : " +

obSegitiga.luas());

} }

(9)

Paket di dalam Paket

Estu Sinduningrum, ST, MT

(10)

Peranan Tingkat Akses

di dalam Paket

Java membagi empat kategori dari keberadaan sebuah anggota

kelas, yaitu sebagai berikut:

Kelas turunan di dalam paket yang sama.

Bukan kelas turunan di dalam paket yang sama.

Kelas turunan di dalam paket yang berbeda.

Bukan kelas turunan dan juga berada di dalam paket yang

berbeda

(11)

Tabel berikut ini akan menunjukkan apakah anggota kelas

dengan tingkat akses tertentu dapat diakses

oleh bagian-bagian di atas atau tidak.

Tingkat Akses private Tingkat Akses protected Tingkat Akses public Tanpa Tingkat Akses

Kelas yang sama Ya Ya Ya Ya Kelas turunan Paket sama Tidak Ya Ya Ya Bukan Kelas turunan Paket sama Tidak Ya Ya Ya Kelas turunan Paket berbeda Tidak Ya Ya Tidak Bukan Kelas turunan Paket berbeda

Tidak Tidak Ya Tidak

(12)

Contoh hirarki kelas dan interface

Estu Sinduningrum, ST, MT

Kelas AlatMusikPetik, AlatMusikTiup,

dan AlatMusikpukul

mengimplementaskan interface

AlatMusik.

Dengan demikian,

keras-kelas ini harus

mengimplementasikan

semua method yang

terdapat pada interface

AlatMusik.

selanjutnya, kita menurunkan

kelas AlatMusikPerik menjadi dua

kelas turunan lainnya, yaitu kelas

Gitar dan Bass.

Melalui cara ini, kelas Gitar akan

mewarisi sifat-sifat yang terdapat

pada kelas AlatMusikPetik

(13)

DemoInterface.java

(14)

Estu Sinduningrum, ST, MT interface AlatMusik { void mainkan(); void setelNada(); String ambilNama(); }

class AlatMusikPetik implements AlatMusik { protected String nama;

public void mainkan() {

System.out.println(ambilNama() + " dimainkan dengan cara petik");

}

public void setelNada() {

System.out.println("Setel nada pada " + ambilNama()); }

public String ambilNama() { return nama;

} }

class AlatMusikTiup implements AlatMusik { protected String nama;

public void mainkan() {

System.out.println(ambilNama() +" dimainkan dengan cara tiup");

}

public void setelNada() {

System.out.println("Setel nada pada " + ambilNama()); }

public String ambilNama() { return nama;

} }

class AlatMusikPukul implements AlatMusik { protected String nama;

public void mainkan() {System.out.println(ambilNama() + " dimainkan dengan cara pukul");

}

public void setelNada() {

System.out.println("Setel nada pada " + ambilNama()); }

public String ambilNama() { return nama;

} }

class Gitar extends AlatMusikPetik { Gitar(String nama) {

this.nama = nama; } }

class Bass extends AlatMusikPetik { Bass(String nama) {

this.nama = nama; } }

class DemoInterface {

public static void main(String[] args) { AlatMusikPetik gitar, bass;

gitar = new Gitar("Gitar"); bass = new Bass("Bass");

gitar.mainkan(); gitar.setelNada(); System.out.println(); bass.mainkan(); bass.setelNada(); } }

(15)

Membuat Referensi ke

Tipe Interface

Selain ke tipe kelas, kita juga dapat membuat sebuah referensi

objek ke tipe interface.

Sebagai contoh, kita dapat membuat referensi ke interface

AlatMusik untuk memanggil method yang terdapat pada kelas

Gitar dan Bass.

Perhatikan contoh potongan kode program berikut ini.

(16)

Variabel di dalam Interface

Sebuah interface tidak hanya dapat berisi sekumpulin method saja,

akan tetapi juga berisi deklarasi variabel-variabel di dalamnya.

Hal yang perlu diperhatikan di sini, bahwa variabel-variabel

tersebut akan memiliki sifat statis dan final.

Ini berarti bahwa variabel-variabel tersebut akan dianggap sebagai

konstanta yang nilainya tidak dapat diubah oleh kelas-kelas yang

mengimplementasikannya.

(17)

DemoVarInterface.java

(18)

Estu Sinduningrum, ST, MT import java.io.*; interface Hari { int MINGGU = 1; int SENIN = 2; int SELASA = 3; int RABU = 4; int KAMIS = 5; int JUMAT = 6; int SABTU = 7; }

class DemoVarInterface implements Hari { public static void main(String[] args) { String sInput = null;

System.out.print("Masukkan nomor hari (1..7): ");

InputStreamReader isr = new InputStreamReader(System.in);

BufferedReader br = new BufferedReader(isr);

try {

sInput = br.readLine();

int i = Integer.parseInt(sInput); String namaHari = null;

switch (i) {

case MINGGU : namaHari = "Minggu"; break; case SENIN : namaHari = "Senin"; break; case SELASA : namaHari = "Selasa"; break; case RABU : namaHari = "Rabu"; break; case KAMIS : namaHari = "Kamis"; break; case JUMAT : namaHari = "Jumat"; break; case SABTU : namaHari = "Sabtu"; break; }

System.out.println("Hari ke-" + i + " adalah " + namaHari);

} catch (IOException ioe) { ioe.printStackTrace(); }

} }

(19)

Interface Dapat Diturunkan

Menjadi Interface Lain

Sama halnya dengan kelas, interface }uga dapat diturunkan

menjadi interface lain dengan menggunakan kata kunci extends.

Namun terdapat satu hal yang harus diperhatikan yaitu pada saat

kita mengimplementasikan interface turunan, kita juga harus

mengimplementasikan semua method yang didefinisikan pada

interface induk.

(20)

DemoInterfaceTurunan.java

(21)

Estu Sinduningrum, ST, MT

interface IInduk {

double tambah(double a, double b); double kurang(double a, double b); }

interface ITurunan extends IInduk { double kali(double a, double b); double bagi(double a, double b); }

class Aritmetika implements ITurunan { private double x; private double y; Aritmetika(double x, double y) { this.x = x; this.y = y; }

public double tambah(double a, double b) { return (a + b);

}

public double kurang(double a, double b) { return (a - b);

}

public double kali(double a, double b) { return (a * b);

}

public double bagi(double a, double b) { return (a / b);

}

public void cetakHasil() {

System.out.println("x = " + x); System.out.println("y = " + y); System.out.println();

System.out.println("x + y = " + tambah(x, y)); System.out.println("x - y = " + kurang(x, y)); System.out.println("x * y = " + kali(x, y)); System.out.println("x / y = " + bagi(x, y)); } }

class DemoInterfaceTurunan {

public static void main(String[] args) {

// membuat objek Aritmetika dengan x=10.0 dan y=2.5

Aritmetika obj = new Aritmetika(10.0, 2.5);

obj.cetakHasil(); } }

(22)
(23)

Penjebakan Eksepsi

Hal terburuk dan paling dihindari dalam dunia pemrograman

adalah bug (kesalahan) pada saat proses eksekusi di dalam program

yang kita buat.

Secara umum, kesalahan tersebut disebut juga dengan eksepsi.

Menurut definisi umum, eksepsi adalah suatu kondisi abnormal

yang terjadi pada saat runtime.

Pada bahasa pemprogaman lain yang belum mendukung

mekanisme penanganan eksepsi, kesalahan-kesalah yang terjadi

harus diperiksa secara manual (biasanya melalui kode error

(24)

Cara seperti itu tentu memiliki kelemahan karena proses

pelacakannya masih sulit dilakukan.

Untuk mengatasi permasalahan tersebut, Java menyediakan sebuah

mekanisme penanganan kesalahan yang biasa disebut dengan

exception-handling.

Setiap kesalahan akan dibentuk menjadi sebuah objek.

Estu Sinduningrum, ST, MT

(25)

Dalam Java, runtime error (kesalahan-kesalahan yang terjadi pada saat

program sedang berjalan) direpresentasikan dengan eksepsi.

Eksepsi adalah suatu objek yang dibuat pada saat program mengalami suatu

kondisi yang tidak wajar (abnormal).

Pada

saat

eksepsi

terjadi

maka

dikatakan

eksepsi

telah

dibangkitkan/dilempar - thrown.

Apabila terjadi, maka eksepsi tersebut haruslah ditangkap - caught.

Eksepsi dapat dibangkitkan secara otomatis oleh sistem Java runtime secara

manual oleh kita sendiri melalui kode yang kita tulis.

Estu Sinduningrum, ST, MT

(26)

Terdapat lima buah kata kunci yang disediakan oleh Java

menangani eksepsi, yaitu: try, catch, throw, throws, dan finally.

Kegunaan dari kelima kata kunci tersebut akan kita kaji lebih

detail pada slide ini.

Estu Sinduningrum, ST, MT

(27)

Blok throw, try dan catch

Untuk menanggapi Exception, pemanggilan terhadap metode yang

menghasilkan Exception harus ditempatkan di dalam blok try.

Blok try adalah blok kode yang dimulai kata kunci try diapit

pasangan kurung kurawal ({ ... }).

Setiap blok try diasosiasikan dengan satu blok catch atau lebih.

(28)

Contoh:

trv {

// Pemanggilan metode yang menghasilkan exception

// dilakukan di sini

}

Jika metode dimaksudkan untuk menangkap Exception yang dilempar

metode yang dipanggil,maka pemanggilan harus ditempatkan di blok try.

Jika Exception dilempar, Exception itu ditangani oleh blok catch.

Blok-blok catch menangani tipe tipe Exception berbeda. Berikut ini

adalah blok try dan cacth untuk menangani Exception dengan tipe

Exception.

Estu Sinduningrum, ST, MT

(29)

Contoh:

Try {

// Pemanggilan metode yang menghasilkan exception

// dilakukan di sini

} catch (Excepflon e) {

// Penanganan terhadap exception

// dilakukan di sini

}

Blok throw, try dan catch

(30)

Tahap-tahap Kejadian:

1.

Ketika suatu metode di blok try melemparkan sembarang tipe

Exception, eksekusi blok try tersebut dihentikan.

2.

Kendali program segera dilewatkan ke blok catch yang

diasosiasikan.

3.

Jika blok catch menangani tipe Exception yang diberikan, maka

blok catch akan mengambil alih kendali eksekusi.

4.

Jika blok catch tidak dapat menangani Exception, rnaka

Exception dilewatkan ke pemanggil metode itu.

5.

Di aplikasi, proses ini berlanjut sampai blok catch dapat

menangkap Exception atau Exception mencapai metode main()

dan tidak ditangkap sehingga menyebabkan aplikasi diakhiri.

Estu Sinduningrum, ST, MT

(31)

Penanganan Exception dilakukan di blok catch. Penanganan kesalahan

ini untuk menghindari Exception ditangani oleh sistem Java yang

secara default segera menghentikan program aplikasi dan mencetak

stack pemanggilan

Terdapat tiga manfaat penanganan Exception sendiri, yaitu :

1.

memungkinkan kita meniadakan kesalahan

2.

mencegah program dihentikan sistem Java secara otomatis

3.

dapat irember'ikan tambahan informasi yang berguna untuk

pemakai aplikasi atau untuk kegiatan debugging.

Blok throw, try dan catch

(32)

DemoInterfaceTurunan.java

(33)

Latihan

88

/* * DivByZeroNextToy.java * * Created on June 1, 2003, 7:12 AM */ /** */

public class DivByZeroNextToy {

/** Creates a new instance of DivByZeroNextToy */ public DivByZeroNextToy() {

}

public static void main (String args[]) { int zeroInt = 0;

int anInt = 10; try {

int divResult = anInt / zeroInt;

System.out.println("Hasilnya adalah " + divResult); } catch (ArithmeticException e) {

//menangkap kesalahan div-by-zero

System.out.println("Terjadi pembagian dengan nol"); System.out.println("Diatasi blok penanganan sendiri");

}

System.out.println("Kalimat setelah catch");

(34)

/*

* DivByZeroNextNextToy.java */

public class DivByZeroNextNextToy {

/** Creates a new instance of DivByZeroNextNextToy */ public DivByZeroNextNextToy() {

}

public static void main (String args[]) { int anInt = 10;

for (int zeroInt =-1;zeroInt<2;zeroInt++){ try {

int divResult = anInt / zeroInt;

System.out.println("Hasilnya adalah " + divResult); }catch (ArithmeticException e) {

//menangkap kesalahan div-by-zero

System.out.println("Terjadi pembagian dengan nol"); System.out.println("Diatasi blok penanganan sendiri");

}

System.out.println("Kalimat setelah catch"); } } }

Estu Sinduningrum, ST, MT

Latihan

89

(35)

/*

* DivByZeroNextNextNextToy.java */

public class DivByZeroNextNextNextToy {

/** Creates a new instance of DivByZeroNextNextNextToy */ public DivByZeroNextNextNextToy() {

}

public static void main (String args[]) { int anInt = 10;

for (int zeroInt =-1;zeroInt<2;zeroInt++){ try {

int divResult = anInt / zeroInt;

System.out.println("Hasilnya adalah " + divResult); }catch (ArithmeticException e) {

//menangkap kesalahan div-by-zero System.out.println("Pesan di exception: "+e); System.out.println("Terjadi pembagian dengan nol"); System.out.println("Diatasi blok penanganan sendiri");

}

System.out.println("Kalimat setelah catch");

} } } Estu Sinduningrum, ST, MT

Latihan

90

(36)

Metode dapat merrpuriyai blok untuk menangkap beberapa tipe

Exception sekaligus.

Java mendukung banyak blok catch. Masing-masing blok catch

harus menspesifikasikan tipe Exception yang berbeda.

Banyak Blok catch

(37)

Banyak Blok catch

Contoh:

try {

 // Pemanggilan metode yang menghasilkan exception  // dilakukan di sini

 }

 catch (ExceptionClassA e) {

 // Penanganan terhadap exceplionOlassA  // dilakukan di sini

 }

 catch(ExceptionClassB e) {

 // Penanganan terhadap excepllonClassB  // dilakukan di sini

}

Catch (ExceptionClassC e) {

// Penanganan terhadap exceptionClassC // dilakukan di sini

 }

(38)

Ketika Exception dilempar di blok try, Exception ditangkap lebih dulu

oleh blok catch pertama yang cocok.

Hanya satu blok catch yang dapat dieksekusi.

Kemampuan banyak catch ini dikarenakan pada beberapa kasus,

metode-metode di blok try dapat menerbitkan lebih dari satu Exception.

Bahkan satu metode yang dipanggil pun dapat mengirim lebih dari satu

Exception berbeda.

Dengan kemampuan mempunyai lebih dari satu klausa catch maka kita

dapat menangani bermacam-macam macam tipe Exception berbeda.

Begitu dijumpai satu kalimat catch yang cocok maka yang lainnya

dilompati menuju kode di bawah

blok try/catch.

Banyak Blok catch

(39)

/*

* DivByZeroNextNextNextNextToy.java */

public class DivByZeroNextNextNextNextToy { public DivByZeroNextNextNextNextToy() {

}

public static void main (String args[]) { int anInt = 10;

try {

int divBy = args.length; int divResult = anInt / divBy;

System.out.println("Hasilnya adalah " + divResult); int c[] = {1};

c[10] = 100;

}catch (ArithmeticException e) { //menangkap kesalahan div-by-zero

System.out.println("Terjadi pembagian dengan nol"); System.out.println("Diatasi blok penanganan A");

} catch (ArrayIndexOutOfBoundsException e) { //menangkap kesalahan out of bounds

System.out.println("Terjadi indeks array di luar batas"); System.out.println("Diatasi blok penanganan B"); }

System.out.println("Kalimat setelah catch");

} } Estu Sinduningrum, ST, MT

Latihan

91

(40)

Ketika kita menggunakan banyak klausa catch, maka kita harus

menyusun subkelassubkelas.

Exception muncul lebih dulu sebelum induk-induk superkelasnya.

Penyusunan ini karena pernyataan catch yang menggunakan

superkelas akan menangkap Exception dari tipe kelasnya ditambah

semua tipe subkelasnya.

Dengan demikian, catch terhadap Exception subkelas tidak pernah

dicapai bila lebih dulu terdapat klausa catch terhadap Exception

superkelas.

Kita tidak usah kawatir karena dibantu kompilator Java. Kode yang

tidak dapat dicapai (unreachable code) akan dilaporkan sebagai

kesalahan saat kompilasi

Banyak Blok catch

(41)

/*

* DivByZeroNextNextNextNextNextToy.java */

public class DivByZeroNextNextNextNextNextToy {

public DivByZeroNextNextNextNextNextToy() { }

public static void main (String args[]) { int anInt = 10;

try {

int divBy = args.length; int divResult = anInt / divBy;

System.out.println("Hasilnya adalah " + divResult); int c[] = {1};c[10] = 100;

}catch (Exception e) { //menangkap kesalahan

System.out.println("Terjadi kesalahan"); System.out.println("Diatasi blok penanganan A");

}catch (ArithmeticException e) { //menangkap kesalahan div-by-zero

System.out.println("Terjadi pembagian dengan nol"); System.out.println("Diatasi blok penanganan B");

}

System.out.println("Kalimat setelah catch");

} } Estu Sinduningrum, ST, MT

Latihan

93

(42)

Jika kita melakukan kompilasi program ini, kita akan memperoleh

pesan kesalahan menyatakan kalimat catch kedua tidak akan pernah

dicapai karena Exception telah ditangkap kalimat catch pertama.

Hal ini disebabkan AritmeticException merupakan subkelas

Exception, kalimat catch pertama akan menangani semua kesalahan

yang menyebabkan Exception.

Dengan demikian kalimat catch kedua tidak akan pernah

dieksekusi.

Untuk membenarkan program itu, kita tinggal melakukan

penyusunan kalimat catch pertama menjadi kalimat catch kedua.

(43)

/*

* DivByZeroNextNextNextNextNextNextToy.java */

public class DivByZeroNextNextNextNextNextNextToy { public DivByZeroNextNextNextNextNextNextToy() {

}

public static void main (String args[]) { int anInt = 10;

try {

int divBy = args.length; int divResult = anInt / divBy;

System.out.println("Hasilnya adalah " + divResult); int c[] = {1};

c[10] = 100;

}catch (ArithmeticException e) { //menangkap kesalahan div-by-zero

System.out.println("Terjadi pembagian dengan nol"); System.out.println("Diatasi blok penanganan A");

}catch (Exception e) { //menangkap kesalahan

System.out.println("Terjadi kesalahan"); System.out.println("Diatasi blok penanganan B");

}

System.out.println("Kalimat setelah catch");

} } Estu Sinduningrum, ST, MT

Latihan

94

(44)

Berikut ini bentuk umum penanganan eksepsi di dalam Java

try {

// kumpulan statemen yang mungkin menimbulkan eksepsi

} catch (TipeEksepsi1 objekEksepsi1){

// penanganan untuk tipe eksepsi1

) catch (TipeEksepsi2 objekEksepsi2) {

/ / penanganan untuk tipe eksepsi2

}

…………

Finally{

//statemen tambahan yang pasti akan dieksekusi

}

Estu Sinduningrum, ST, MT

(45)

Pada situasi normal (yaitu tidak ada Exception yang dilempar),

blok Finally dieksekusi segera setelah blok try.

Ketika Exception dilempar, blok finally dieksekusi setelah blok

catch yang menangani Exception dilakukan.

(46)

/*

* DivByZeroNextNextNextNextNextNextNextToy.java */

public class DivByZeroNextNextNextNextNextNextNextToy {

DivByZeroNextNextNextNextNextNextNextToy */ public DivByZeroNextNextNextNextNextNextNextToy() {

}

public static void main (String args[]) { int zeroInt = 0;

int anInt = 10;

try {

int divResult = anInt / zeroInt;

System.out.println("Hasilnya adalah " + divResult); } catch (ArithmeticException e) {

//menangkap kesalahan div-by-zero

System.out.println("Terjadi pembagian dengan nol"); System.out.println("Diatasi blok penanganan sendiri");

} finally {

System.out.println("Kalimat di finally"); }

System.out.println("Kalimat di luar blok try-catch-finally"); } }

Estu Sinduningrum, ST, MT

Latihan

95

(47)

Di sini, TipeEksepsi adalah tipe dari eksepsi yang terjadi.

Tipe tersebut direpresentasikan dengan sebuah kelas, misalnya :

NullPointerException,ArithmeticException,ArrayIndexOutOf

BoundsException, dan sebagainya

Estu Sinduningrum, ST, MT

(48)
(49)
(50)

Menggunakan Kata Kunci try

dan catch

Pada subbab sebelumnya kita telah melihat bagaimana Java mencegr

eksepsi secara default. Namun, pada umumnya, pencegahan ekseps

dilakukan oleh kita sendiri, sebagai programmer.

Untuk melakukan hal tersebut, kita perlu mendefinisikan blok

try-catch.

Berikut ini contoh : program yang merupakan perbaikan dari

program sebelumnya

(51)

throw

Kata kunci throw digunakan di program untuk melempar (throw)

terhadap Exception secara eksplisit.

Bentuk umum kalimat adalah throw ThrowableInstance;

Instan Throwable harus merupakan objek dengan tipe Throwable atau

subkelas dari Throwable.

Terdapat dua cara kita memperoleh objek Throwable, yaitu:

1.

Menggunakan parameter di klausa catch.

2.

Menciptakan salah satu dengan menggunakan operator new().

(52)

Eksekusi program akan dihentikan segera setelah kalimat throw,

kalimat-kalimat setelah kalimat throw tidak dieksekusr.

Java akan melakukan inspeksi blok try terdekat untuk

menen-rukan kalimat catch yang cocok dengan tipe Exception yang

dilempar.

Jika Java menemukannya, maka kendali program ditransfer ke

kalimat itu.

Jika tidak ditemukan, maka Java akan melakukan penelusuran ke

blok try berikutnya sampai ke puncak stack dan bila tetap tidak

ditemukan,maka penanganan Exception secara default akan

melakukan tugasnya menghentikan program dan mencetak iejak

penelusuran stack.

Estu Sinduningrum, ST, MT

(53)

public class ThrowToy { public ThrowToy() {

}

static void throwException() throws Exception{ try {

// Dilemparkan exception

throw new Exception("Demo terhadap kalimat throw"); } catch (Exception e) {

System.out.println("Penangkapan exception di test"); throw e;

// Exception kembali dilemparkan} } }

static void test(){ try {

throwException(); }catch (Exception e) { //menangkap exception

System.out.println("Kembali ditangkap exception: " + e);} }

public static void main (String args[]) { test();

} } Estu Sinduningrum, ST, MT

Latihan

96

(54)

Program di atas memperoleh dua kesempatan penanganan kesalahan. Di metode

throwException().

Exception yang dilemparkan telah ditangani di kalimat catch di metode itu.

Kemudian Exception yang telah ditangkap kembali dilemparkan sehingga

ditangkap metode main().

Kalimat yang melakukan penciptaan dan pelemparan Exception yang baru

sekaligus adalah sebagai berikut:

throw new Exception("Demo terhadap kalimat throw"), yaitu melakukan

penciptaan dengan perintah new Exception sehingga diperoleh instan objek

Exception, terus segera instan langsung dilemparkan dengan perintah throw.

Estu Sinduningrum, ST, MT

(55)

Terdapat dua contrutor di Exception, yaitu:

1.

Constructor tanpa argumen.

2.

Constructor dengan argumen String yang mendeskripsikan

Exception.

String ini dapat ditampilkan menggunakan print() atau

println() sebagai argumen atau diperoleh dengan memanggil

getMessage() yang didefinisikan di Throwable

throw

(56)

throws

Jika metode menghasilkan Exception, maka metode itu harus

menspesifikasikan perilaku ini sehingga pemanggil metode itu dapat

dijaga agar menghadapi Exception ini.

Kita melakukan ini dengan memberi klausa throws di deklarasi metode.

Klausa throws mendaftarkan tipe-tipe Exception yang dapat dilempar

metode.

Hal ini diperlukan agar diketahui semua Exception yang mungkin

dilempar metode atau subkelas-subkelasnya, kecuali tipe Error atau

RuntimeException yang dilakukan sistem Java secara otomatis bila

menemui pelanggaran aturan-aturan bahasa Java.

Semua Exception yang hendak dilempar metode harus dideklarasikan dr

klausa throws.

(57)

Bentuk umurrdeklarasi metode yang memasukkan klausa throws

adalah.

<method-modifier> type method-name throws exception-list.

{

// badan metode

}

Exception-list adalah daftar Exception yang dipisahkan dengan koma

berisi daftar Exception yang dapat dilempar oleh metode.

throws

(58)

public class ThrowsToy {

/** Creates a new instance of ThrowsToy */ public ThrowsToy() {

}

static void throwsException() throws IllegalAccessException { System.out.println("Di dalam throwsException.");

throw new IllegalAccessException("Exception di throwsException"); }

public static void main (String args[]) { try {throwsException();

}catch (IllegalAccessException e) { //menangkap exception

System.out.println("Ditangkap exception: " + e); } } } Estu Sinduningrum, ST, MT

Latihan

97

(59)

public class ThrowsNextToy {

/** Creates a new instance of ThrowsNextToy */ public ThrowsNextToy() {

}

static void throwsException() throws IllegalAccessException { System.out.println("Di dalam throwsException.");

throw new IllegalAccessException("Exception di throwsException()"); }

public static void main (String args[]) { throwsException(); } } Estu Sinduningrum, ST, MT

Latihan

98

(60)

THANK YOU

Gambar

Tabel berikut ini akan menunjukkan apakah anggota kelas   dengan tingkat akses tertentu dapat diakses

Referensi

Dokumen terkait