I CLASS DAN OBJEK
1.1 Paradigma Objek Paradigma adalah suatu cara pandang atau cara berpikir. Paradigma objek adalah cara pandang yang memandang SEGALA SESUATU sebagai OBJEK. Semua aspek dalam Java programming dapat dianggap sebagai objek, -kecuali TIPE DATA PRIMITIF-, karena semua library dan objek dalam Java memiliki akar awal class java.lang.Object. Berbagai benda di sekitar kita adalah objek nyata yang dapat dilihat seperti : kucing, meja, rumah, orang, dll. Persoalannya, bagaimana memindahkan pemikiran objek di dunia nyata menjadi objek di dunia software atau pemrograman, khususnya Java. Ambil contoh objek nyata yang akan dipindahkan adalah objek orang.
1.2 Data Member atau variabel Setiap objek yang dinamakan „orang‟ pasti memiliki : nama, tinggi, badan, berat, badan, warna rambut, warna kulit, jenis kelamin, menggunakan kacamata, dll. Ciri-ciri tersebut dapat dipindahkan menjadi variabel-variabel dari class yang sering disebut sebagai : data member.
Contoh pemisalan objek orang nyata menjadi kode program dalam class Orang: Pemrograman Berorientasi Objek
1
Class Orang { String nama; int tinggiBadan; int beratBadan; String warnaRambut; String warnaKulit; String jenisKelamin boolean berkacamata; }
//nama orang //dalam cm //dlm kg //hitam, pirang, coklat //sawomatang, hitam, putih //pria atau wanita //bila berkacamata berarti true
Memindahkan Orang dari dunia nyata menjadi class Orang
Class dapat diumpamakan seperti spesifikasi atau blueprint. Dalam hal ini, Tuhan
menciptakan
manusia
dengan
spesifikasi
tertentu.
Jadi
dapat
diumpamakan bahwa Tuhan memiliki class Orang yang kemudian membuat banyak objek dari class Orang tsb, dan contoh objek tersebut adalah Anda sendiri. Objek dalam pemrograman adalah objek yang dibuat dari class tertentu. Dari definisi class Orang di atas kita bisa membuat objek-objek berdasar class tersebut. Objek-objek yang dibuat perlu disimpan dalam variabel yang akan menyimpan referensi/address dari objek yang dibuat. Proses pembuatan objek sering disebut sebagai instansiasi class, sedangkan objeknya disebut sebagai instance dari class.
1.3 Method
Pemrograman Berorientasi Objek
2
Selain memiliki atribut(STATE) yang diimplementasikan sebagai data member di atas, manusia juga dapat melakukan suatu aksi atau pekerjaan tertentu (BEHAVIOR). Contoh aksi/behavior yang umum adalah menangis dan tertawa Kedua behavior tsb bisa dipindahkan ke dalam bahasa pemrograman menjadi method sbb: void menangis() { System.out.println(“hik...hik…hiks”); } void tertawa() { System.out.println(“ha…ha…ha…ha”); }
Method merupakan perwujudan aksi atau tindakan dari dunia nyata di dalam pemrograman komputer. Method dalam dunia pemrograman juga “pasti melakukan sesuatu aksi”, misalnya menampilkan String di konsol. Terdapat 3 macam metode yang meliputi: 1. Metode kelas : Metode ini dapat dieksekusi walaupun tidak terdapat objek dalam kelas tersebut. Metode kelas ini dideklarasikan dengan menggunakan modifier static. 2. Metode objek : Metode ini hanya dapat dieksekusi sehubungan dengan objek tertentu. 3. Metode main : Metode ini digunakan pada saat aplikasi java dimulai, menggunakan keyword static
Class A ---------------------------------------------------------State Data member / variabel Pemrograman Berorientasi Objek ---------------------------------------------------------Behaviour method1() method2()
3
Ilustrasi perbedaan class dengan objek Dari gambar di atas dapat dipahami bahwa suatu class dapat memiliki banyak objek, dan setiap objek akan mewarisi data member dan method yang sama dari class. Untuk membuat objek Orang dari class Orang, gunakan keyword new sbb : Orang orang1 = new Orang(“Izzuddin A Afif”); Orang orang2 = new Orang(“Muhammad Fairuz”);
Setiap objek dapat memiliki state atau nilai data member yang berbeda (hanya nama dan tipe variabel yang sama). Class Orang ---------------------------------------------------------State nama variabel lain ---------------------------------------------------------Behaviour menangis() tertawa()
Orang1 Izzuddin A Afif
Orang2 Muhammad Fairuz
Ilustrasi pembuatan objek dari class
Pemrograman Berorientasi Objek
4
Pada saat objek dibuat, objek berisi semua variabel yang terdapat dalam kelas tersebut. Terdapat 2 macam variabel dalam kelas, yaitu: variabel kelas : variabel yang dideklarasikan di dalam kelas dan diberi modifier static. Sifat dari variabel static ini adalah melekat pada kelas dan tidak terpengaruh oleh proses instansiasi. variabel objek(instans) : variabel yang dideklarasikan di dalam kelas dan tidak memiliki modifier static. Berbeda dengan variabel kelas, pada proses instansiai kelas menjadi objek, variabel instans ini akan ikut dimiliki dan dapat diakses oleh objek. Deklarasi Class
Contoh
<modifier> class
{ [deklarasi_attribut] [deklarasi_konstruktor] [deklarasi_metode] }
public class Siswa { }
Ilustrasi deklarasi class
mo difi er
Deklarasi Atribut
contoh
<modifier> ;
public class Siswa {
nama class
public int nrp; atribut public String nama; }
Ilustrasi deklarasi atribut
Pemrograman Berorientasi Objek
5
Deklarasi Metode <modifier> ([daftar_argumen]) { [<statement>] }
ilustrasi deklarasi method Contoh: class mobil { String warna; int tahunProduksi; void isiData(String warnaMobil, int tahunProduksiMobil) { warna = warnaMobil; tahunProduksi=tahunProduksiMobil; } String ambilWarna() { return warna; } int ambilTahunProduksi(){ return tahunProduksi; } } public class kelasMobil2{ public static void main (String args[]) { mobil mobilku=new mobil(); mobilku.isiData("merah",2003); System.out.println("warna:"+mobilku.ambilWarna()); System.out.println("tahun:"+mobilku.ambilTahunProduksi()); } }
1.4 Variabel this Pemrograman Berorientasi Objek
6
Kata kunci this dipergunakan pada pembuatan kelas dan digunakan untuk menyatakan objek sekarang. void isiData(String warnaMobil, int tahunProduksiMobil) { warna=warnaMobil; tahunProduksi=tahunProduksiMobil; } Bisa ditulis menjadi : void isiData(String warna, int tahunProduksi) { this.warna=warnaMobil; this.tahunProduksi=tahunProduksiMobil; }
1.5 Konstruktor Metode konstruktor atau biasa disebut konstruktor saja adalah metode yang dapat digunakan untuk memberikan nilai awal saat objek diciptakan. Metode ini akan dipanggil secara otomatis oleh java ketika new dipakai untuk menciptakan instan kelas. Konstruktor mempunyai sifat/ciri: namanya sama dengan nama kelas. tidak memiliki nilai balik (termasuk tidak boleh ada kata kunci void). Contoh: class mobil { String warna; int tahunProduksi; mobil(String warnaMobil, int tahunProduksiMobil) { warna = warnaMobil; tahunProduksi=tahunProduksiMobil; } String ambilWarna() { return warna; } int ambilTahunProduksi() { return tahunProduksi; } } public class kontruktor {
Pemrograman Berorientasi Objek
7
public static void main (String args[]) { mobil mobilku=new mobil(“merah",2003); System.out.println("warna:"+mobilku.ambilWarna()); System.out.println("tahun:"+mobilku.ambilTahunProduksi()); } }
1.6 Overloading pada Konstruktor Overloading
terhadap
konstruktor
merupakan
suatu
mekanisme
pembuatan konstruktor yang memiliki bentuk lebih dari satu. Dalam hal ini pembeda antara konstruktor dengan konstruktor yang lain berupa jumlah parameter atau tipe parameter. Contoh: class mobil { private String warna; private int tahunProduksi; public mobil(String warnaMobil, int tahunProduksiMobil) { warna=warnaMobil; tahunProduksi=tahunProduksiMobil; } public mobil() { } public void info() { System.out.println(“warna :”+this.warna); System.out.println(“tahun :”+this.tahunProduksi); } } public class konstruktor { public static void main (String args []) { mobil mobilku=new mobil(“merah”, 2003); mobil.info(); mobil mobilmu=new mobil(); mobil.info(); } }
Hasil : Warna:merah Tahun:2003 Warna:null Tahun:0 Finished executing
1.7 Overloading pada Method Overloading juga dapat dikenali pada metode non konstruktor. Contoh: class matematika {
Pemrograman Berorientasi Objek
8
static public double kuadrat(double nilai) { return nilai*nilai; } static public int kuadrat (int nilai) { return nlai*nilai; } static public double kuadrat (string nilai) { double bilangan; bilangan=Double.parseDouble(nilai); return bilangan*bilangan; } } public class konstruktor { public static void main (string args[]) { System.out.println(matematika.kuadrat(25.0)); System.out.println(matematika.kuadrat(25)); System.out.println(matematika.kuadrat(“25”)); } } Hasil : 625.0 625 625.0 Finished executing
II INHERITANCE / PEWARISAN
Pemrograman Berorientasi Objek
9
Inheritance (Pewarisan) merupakan salah satu dari tiga konsep dasar OOP. Konsep inheritance ini mengadopsi dunia riil dimana suatu entitas/obyek dapat mempunyai entitas/obyek turunan. Dengan konsep inheritance, sebuah class dapat mempunyai class turunan. Suatu class yang mempunyai class turunan dinamakan parent class atau base class. Sedangkan class turunan itu sendiri seringkali disebut subclass atau child class. Suatu subclass dapat mewarisi apa-apa yang dipunyai oleh parent class. Karena suatu subclass dapat mewarisi apa-apa yang dipunyai oleh parent classnya, maka member dari suatu subclass adalah terdiri dari apa-apa yang ia punyai dan juga apa-apa yang ia warisi dari class parent-nya. Kesimpulannya, boleh dikatakan bahwa suatu subclass adalah tidak lain hanya memperluas (extend) parent class-nya. 2.1 Deklarasi Inheritance Dengan menambahkan kata kunci extends setelah deklarasi nama class, kemudian diikuti dengan nama parent class-nya. Kata kunci extends tersebut memberitahu kompiler Java bahwa kita ingin melakukan perluasan class. Deklarasi inheritance public class B extends A { ……… }
Semua class di dalam Java adalah merupakan subclass dari class super induk yang bernama Object. Misalnya saja terdapat sebuah class sederhana : public class A { …… }
Pemrograman Berorientasi Objek
10
Pada saat dikompilasi Kompiler Java akan membacanya sebagai subclass dari class Object. public class A extends Object { …… }
2.1.1 Kapan Kita Menerapkan Inheritance Kita baru perlu menerapkan inheritance pada saat kita jumpai ada suatu class yang dapat diperluas dari class lain. Misal terdapat class Pegawai : public class Pegawai { public String nama; public double gaji; }
Misal terdapat class Manager : public class Manajer { public String nama; public double gaji; public String departemen; }
Dari 2 buah class diatas, kita lihat class Manajer mempunyai data member yang identik sama dengan class Pegawai, hanya saja ada tambahan data member departemen. Sebenarnya yang terjadi disana adalah class Manajer merupakan perluasan dari class Pegawai dengan tambahan data member departemen. Disini perlu memakai konsep inheritance, sehingga class Manajer dapat kita tuliskan seperti berikut: public class Manajer extends Pegawai { public String departemen; }
Pemrograman Berorientasi Objek
11
Pada contoh diatas juga mewakili contoh dari single inheritance di mana suatu sub class memiliki 1 parent class.
2.1.2 Multilevel Inheritance Konsep inheritance yang ada di Java memperkenankan adanya multilevel inheritance. Konsep multilevel inheritance memperbolehkan suatu subclass mempunyai subclass lagi.
Single and Multilevel Inheritance Employee +name : String = “” +salary : double +birthdate : Date +getDetails() : String Engineer
Secretary Manager +departement: String=“”
Director +carAllowance: double +increaseAllowance()
Pengaksesan member yang ada di parent class dari subclass-nya tidak berbeda dengan pengaksesan member subclass itu sendiri. Misalnya di class Manajer kita ingin mengakses data member nama melalui sebuah function member IsiData(), sekaligus kita juga ingin mengakses data member departemen di class Manajer. Contoh: public class Manajer extends Pegawai { public String departemen;
Pemrograman Berorientasi Objek public void IsiData(String n, String d) { nama=n; departemen=d;
12
2.2 Access Control Dalam dunia riil, suatu entitas induk bisa saja tidak mewariskan sebagian dari apa-apa yang ia punyai kepada entitas turunan karena sesuatu hal. Demikian juga dengan konsep inheritance pada OOP. Suatu parent class dapat tidak mewariskan sebagian member-nya kepada subclass-nya. Sebagai contoh, kita coba untuk memodifikasi class Pegawai. public class Pegawai { private String nama; public double gaji; }
Coba untuk mengkompilasi class Manajer pada contoh sebelumnya. Apa yang terjadi? Pesan kesalahan akan muncul seperti ini :
Ini membuktikan bahwa class Manajer tidak mewarisi data member nama dari parent class-nya (Pegawai). Berikut ini dijelaskan mengenai Access Control lebih lanjut:
Pemrograman Berorientasi Objek
13
2.2.1 private Variabel dan method yang dideklarasikan private hanya bisa diakses oleh class yang mendeklarasikan variabel dan method tersebut. Contoh 1: mengakses private variabel dari class lain.
Contoh 2: mengakses private variabel dari subclass.
Pemrograman Berorientasi Objek
14
2.2.2 default default bukan merupakan Java keyword. Merupakan jenis akses kontrol jika kita tidak menuliskan akses kontrol secara eksplisit. Semua feature class-class yang ada dalam satu package bisa diakses oleh semua yang ada dalam package tersebut. Class diluar package boleh melakukan subclass, tetapi subclass tersebut tidak bisa mengakses feature superclass. Contoh 1: default
Contoh 2: default
Pemrograman Berorientasi Objek
15
2.2.3 protected Protected mempunyai kemampuan akses yang lebih besar daripada private dan default. Protected feature dari suatu class bisa diakses oleh semua class dalam satu package. Class diluar package boleh melakukan melakukan subclass, dan subclass tersebut bisa mengakses feature superclass. Contoh 1: protected
Ringkasan dari masing-masing akses kontrol:
Pemrograman Berorientasi Objek
16
2.3 super Kata kunci super dipakai untuk merujuk pada member dari parent class. Sebagaimana kata kunci this yang dipakai untuk merujuk pada member dari class itu sendiri. Format penulisannya adalah sebagai berikut:
super.data_member
merujuk pada data member pada parent class. super.function_member()
merujuk pada function member pada parent class. super()
merujuk pada konstruktor pada parent class.
Contoh: super
Pemrograman Berorientasi Objek
17
Keterangan:
x > merujuk pada x terdekat, yaitu parameter Info(). this.x > merujuk pada data member dari class-nya sendiri, yaitu data member pada class Child super.x > merujuk pada data member dari parent class-nya yaitu data member pada class Parent
2.4 Konstruktor tidak diwariskan Konstruktor dari parent class tidak dapat diwariskan ke subclass-nya. Konsekuensinya, setiap kali kita membuat suatu subclass, maka kita harus memanggil konstruktor parent class di konstruktor subclass. Pemanggilan konstruktor parent harus dilakukan pada baris pertama dari konstruktor subclass. Jika kita tidak mendeklarasikannya secara eksplisit, maka kompiler Java akan menambahkan deklarasi pemanggilan konstruktor parent class di konstruktor subclass. Sebelum subclass menjalankan konstruktornya sendiri, subclass akan menjalankan constructor superclass terlebih dahulu. Hal ini terjadi karena secara implisit pada constructor subclass ditambahkan pemanggilan super()yang bertujuan memanggil constructor superclass oleh kompiler. Misalnya saja kita mempunyai dua buah class sebagai berikut: public class Parent {
public class Child extends Parent {
}
}
Pemrograman Berorientasi Objek
18
Pada saat program tersebut dikompilasi, maka kompiler Java akan menambahkan: konstruktor class Parent. konstruktor class Child. pemanggilan konstruktor class Parent di kostruktor class Child.
Sehingga program tersebut sama saja dengan yang berikut ini: public class Parent { public Parent() { } }
public class Child extends Parent { public Child() { super(); } }
Pemanggilan konstruktor class Parent
pemanggilan super yang dibenarkan (kanan).
Contoh:
Pemrograman Berorientasi Objek
19
III ENCAPSULATION
3.1 Enkapsulasi Enkapsulasi adalah pembungkus, pembungkus disini dimaksudkan untuk menjaga suatu proses program agar tidak dapat diakses secara sembarangan atau di intervensi oleh program lain. Konsep enkapsulasi sangat penting Pemrograman Berorientasi Objek
20
dilakukan untuk menjaga kebutuhan program agar dapat diakses sewaktuwaktu, sekaligus menjaga program tersebut. Dalam kehidupan sehari hari enkapsulasi dapat dimisalkan sebagai arus listrik pada generator, dan sistem perputaran generator untuk menghasilkan arus listrik. Kerja arus listrik tidak mempengaruhi kerja dari sistem perputaran generator, begitu pula sebaliknya. Karena didalam arus listrik tersebut, kita tidak perlu mengetahui bagaimana kinerja sistem perputaran generator, apakah generator berputar kebelakang atau ke depan atau bahkan serong. Begitu pula dalam sistem perputaran generator, kita tidak perlu tahu bagaimana arus listrik, apakah menyala atau tidak. Begitulah konsep kerja dari enkapsulasi, dia akan melindungi sebuah program
dari
akses
ataupun
intervensi
dari
program
lain
yang
mempengaruhinya. Hal ini sangat menjaga keutuhan program yang telah dibuat dengan konsep dan rencana yang sudah ditentukan dari awal.
Contoh dalam program Belajar.Java class belajar
{
public String x =”Pintar”; private String y = “Java”; }
Pintar.Java public class Pintar{ public static void main(String[]args){ Coba panggil = new Belajar( ); System.out.println(“Panggil X : “+panggil.x); Pemrograman Berorientasi Objek
21
System.out.println(“Panggil Y : “+panggil.y); } }
Tipe public dan private mempunyai fungsi yang berbeda. Fungsi public yang terdapat dalam class Coba pada variable x, memungkinkan nilai dari variable x dapat diakses oleh class Belajar. Sedangkan variable y yang menggunakan fungsi private tidak dapat dipanggil didalam class Belajar.
IV POLYMORPHISM 4.1 Overriding Subclass yang berusaha memodifikasi tingkah laku yang diwarisi dari superclass. Tujuannya agar subclass memiliki tingkah laku yang lebih spesifik. Dilakukan dengan cara mendeklarasikan kembali method milik parent class di subclass. Deklarasi method pada subclass harus sama dengan yang terdapat di super class. Kesamaan pada: Nama Pemrograman Berorientasi Objek
22
Return type Daftar parameter Method pada parent class disebut overriden method, dan method pada subclass disebut overriding method. Contoh: overriding public class Employee { protected String name; protected double salary; protedted Date birthDate; public String getDetails() { return “Name: “+name+ “\n” + “Salary: “+salary; public class Manager extends Employee { protected String depatement; public String getDetails() { return “name: “ +name + “\n” + “Salary:” +salary+”\n” + “manager of: “ +departement; } }
Contoh: overriding dengan keyword super
Aturan overriding: Pemrograman Berorientasi Objek
23
Mode akses overriding method harus lebih luas atau minimal sama dari pada overriden method. Subclass hanya boleh meng-override method superclass satu kali saja, tidak boleh ada lebih dari satu method pada kelas yang sama yang sama persis. Overriding method tidak boleh throw checked exceptions yang tidak dideklarasikan oleh overridden method.
4.2 Overloading Menuliskan kembali method yang sama pada suatu class. Tujuan : memudahkan penggunaan/pemanggilan method dengan fungsionalitas yang mirip. Aturan overloading: Nama method harus sama. Daftar parameter harus berbeda. Return type boleh sama, juga boleh berbeda. Perbedaan daftar parameter bukan hanya terjadi pada perbedaan banyaknya parameter, tetapi juga urutan dari parameter tersebut. Misalnya saja dua buah parameter berikut ini: function_member(int x, String n) function_member(String n, int x)
Dua parameter tersebut juga dianggap berbeda daftar parameternya. Daftar parameter tidak terkait dengan penamaan variabel yang ada dalam parameter. Misalnya saja 2 daftar parameter berikut: function member(int x) function_member(int y)
Pemrograman Berorientasi Objek
24
Dua daftar parameter diatas dianggap sama karena yang berbeda hanya penamaan variabel parameternya saja. Contoh:
4.3 Constructor Overloading Seperti halnya method, constructor juga bisa di-overloading. Dengan syarat: nama yang sama dan daftar parameter yang berbeda. Anda bisa gunakan keyword this pada baris awal badan constructor untuk memanggil constructor yang lain. Contoh:
Pemrograman Berorientasi Objek
25
Contoh: memanggil parent class constructor
4.4 Polymorphism Polymorphism adalah kemampuan untuk mempunyai beberapa bentuk yang berbeda. Contoh: Manager adalah Employee
Saat melakukan pemanggilan: Employee emp = new Manager();
Pemrograman Berorientasi Objek
26
Maka : reference variable dari emp adalah Employee. Bentuk emp adalah Employee. Yang perlu diingat adalah: Satu obyek hanya boleh mempunyai satu bentuk saja, yaitu bentuk yang diberikan ketika obyek dibuat. Reference variable bisa merujuk ke bentuk yang berbeda.
V EXCEPTION HANDLING
5.1 Objectives Di akhir session, peserta diharapkan mampu untuk: Mendefinisikan exception Menangani exception dengan menggunakantry-catch-finally block Membuat class Exceptions sendiri Pemrograman Berorientasi Objek
27
5.2 Exceptions • Sebuah event yang akan menginterupsi alur proses program normal dari sebuah program • Akan mengakibatkan program terminate abnormally • Error tidak harus selalu ditangani dengan exception handling (namun exception mempermudah penanganan error) • Exception handling di Java bekerja dengan cara mengubah alur eksekusi program, sambil melempar suatu objek tertentu sebagai informasi untuk alur yang baru
5.2 Runtime exception • Exception yang diturunkan dari RuntimeException tidak akan diperiksa pada saat kompilasi. Exception jenis ini baru dapat terdeteksi pada saat eksekusi. Contoh: NullPointerException, IndexOutOfBoundsException, dsb. Contoh Exceptions : - ArrayIndexOutOfBounds exception, akan terjadi jika kita mengakses suatu array di index yang tidak valid - NumberFormatException, akan terjadi jika kita melakukan passing parameter non-number ke method Integer.parseInt() Penanganan Exceptions : Untuk menangani exceptions di Java digunakan blok try-catch-finally Statement program yang memungkinkan terjadinya exceptions harus diletakkan dalam blok try-catch-finally.
Blok try-catch-finally. Pemrograman Berorientasi Objek
28
Bentuk umum dari blok try-catch-finally: try { //write the statement that can generate an exceptions //in this block } catch(<exceptionType1> ){ //write the action your program will do if an exception of certain type occured } …} catch(<exceptionTypen> ){ //write the action your program will do if an exception of certain //type occured } finally{ //add more cleanup code here }
Alur Program
Pemrograman Berorientasi Objek
29
Alur Normal (tanpa exception) try { aksi_1(); aksi_2(); aksi_3(); } catch (ExceptionClassName name){ //penanganan error (tidak dieksekusi) } aksi_4(); aksi_5(); Exception Dilempar aksi_2() try { aksi_1(); aksi_2(); aksi_3(); //tidak dieksekusi } catch (ExceptionClassName name){ //penanganan error (dieksekusi) } aksi_4(); aksi_5();
Contoh Penggunaan Exception import java.util.Scanner; /*JDK 1.5*/ Pemrograman Berorientasi Objek
30
class ContohException { public static void main (String args[]) { Scanner sc = new Scanner(System.in); try { System.out.print("Masukkan Angka:"); int num = sc.nextInt(); if (num>10) throw new Exception(); System.out.println(“Angka kurang dari atau sama dengan 10”); } catch (Exception s) System.out.println( "Angka Lebih dari 10"); } System.out.println( "Selesai"); } }
Catatan Dalam statement - throw
new
Exception(), sebuah instans dari kelas Exception()
diciptakan (konstruktor defaultnya dipanggil) Jika kelas memiliki konstruktor yang lain, konstruktor itu dapat dipanggil: - throw new Exception(“lebih dari 12”);
Dalam catch, method kelas exception dapat dipanggil: - System.out.println(e.getMessage());
Nested Exception Handling Boleh ada blok try-catch lain dalam suatu try-catch, penangkap adalah blok terdekat. try { fungsi_a( ); try { fungsi(b); } catch (NumberException n){ } } catch (FatalException fatal){ } }
Pemrograman Berorientasi Objek
31
Melempar kembali exception • Dalam catch, exception bisa dithrow: catch (Exception e) {throw e;} • Exception baru bisa dibuat: catch (FileNotFoundException e) { throw new FatalException(); }
• Gunanya melempar kembali agar exception ditangkap oleh klausa exception terluar, atau method yang memanggil method ini.
Exception pada method void connect_internet() throws connect_exception{ //coba melakukan koneksi if (error) throw new connect_exception(“error”); //.... } //... //bagian main try { connect_internet( ); } catch (connect_exception e) { /*do something*/ }
Catatan: Exception adalah nama kelas exception standar milik Java Programmer
bisa
membuat
sendiri
kelas
Exception
dengan
mengimplementasikan Throwable, atau (yang lebih disarankan) menurunkan dari java.lang.Exception
Membuat Class Exceptions Buat class exception yang diturunkan dari class exception lain yang lebih umum. - Misal class OutOfDiskSpaceException bisa diturunkan dari IOException Pemrograman Berorientasi Objek
32
Sebaiknya turunkan dari class Exception karena sudah memiliki method untuk mencatat pesan exception
Contoh: SmallIntExcept class SmallIntExcept extends Exception { private static int num_except; SmallIntExcept(String msg){ super(msg); num_except++; } static int numException (){ return num_except; } void response (){ System.out.println(getMessage()); } }; class SmallInt{ int value; SmallInt(int val){ value = val; } void plus(SmallInt X) throws SmallIntExcept{ value = value + X.value; if (value > 10) throw new SmallIntExcept (“TOO BIG”); if (value < 0) throw new SmallIntExcept (“TOO SMALL”); } public String toString() { return Integer.toString(value); } void ReadVal ( ) { Scanner s = new Scanner(Sytem.in); value = s.nextInt( ); } }
*Main Program class SmallIntExample { public static void main (String args[]) { System.out.println("start of smallint ..."); SmallInt S1= new SmallInt(1); SmallInt S = new SmallInt(); S.ReadVal (); try { Pemrograman Berorientasi Objek
33
S1.plus (S); System.out.println("hasil S1= S1+S ="+S1); }catch (SmallIntExcept e) { e.response (); } } }
Summary Mendefinisikan exception Menangani exception dengan menggunakan blok try-cath-finally Membuat class exception SmallIntExcept subclass dari Exception
Pemrograman Berorientasi Objek
34