Modul PBO1-7.doc
-
Upload
rio-dharmawan -
Category
Documents
-
view
141 -
download
4
description
Transcript of Modul PBO1-7.doc
MODUL 1
EXCEPTION 1
1. TUJUAN
Mampu mengimplementasikan konsep exception
2. TEORI
Dalam pembuatan program seringkali dijumpai error atau kesalahan. Oleh karena
itu, diperlukan suatu mekanisme yang membantu menangani error atau kesalahan yang
terjadi, baik saat pembuatan maupun implementasi program. Java menyediakan
mekanisme dalam pemrograman untuk menangani hal-hal tersebut yang disebut dengan
exception.
Exception adalah event yang terjadi ketika program menemui kesalahan pada saat
instruksi program dijalankan. Banyak hal yang dapat menimbulkan event ini, misalnya
crash, harddisk rusak dengan tiba-tiba, sehingga program-program tidak bisa mengakses
file-file tertentu. Programmer pun dapat menimbulkan event ini, misalnya dengan
melakukan pembagian dengan bilangan nol, atau pengisian elemen array melebihi jumlah
elemen array yang dialokasikan dan sebagainya.
Exception terdiri dari dua macam kelompok, yaitu :
Exception yang merupakan subclass RunTimeException
Exception yang bukan subclass RunTimeException
RunTimeException biasanya disebabkan oleh kesalahan program atau pada desain
program. Misalnya NullPointerException yang disebabkan oleh proses inisialisasi
program yang tidak sempurna dan ArrayIndexOutOfBoundsException yang disebabkan
akses array yang melebihi kapasitas array yang ada.
Dalam bahasa Java, ketika terjadi kesalahan, otomatis akan dilemparkan sebuah
objek yang disebut exception, yang kemudian dapat diproses lebih lanjut oleh fungsi-
fungsi yang siap menangani kesalahan tersebut. Proses pelemparan exception tersebut
sering dikenal dengan istilah throwing exception, sedangkan proses penerimaan
exception yang bersangkutan dikenal dengan istilah catch exception
Ada lima kata kunci yang digunakan oleh Java untuk menanngani exception
ini, yaitu, try, catch, finally, throw, dan throws.
Situasi yang menyebabkan exception dibagi menjadi 3 kategori yaitu,
Kesalahan kode atau data. Contohnya jika kode berusaha mengakses
suatu indeks dari array yang di luar batas array.
Metode standar exception. Contohnya, metode substring() dalam kelas
String, dapat memunculkan pesan dalam bentuk
StringIndexOutofBoundsException.
1
Kesalahan Java. Hal ini merupakan kesalahan dalam mengeksekusi Java
Virtual Machine yang dijalankan pada saat kompilasi.
Istilah exception digunakan untuk menunjukkan kesalahan pada hardware,
software, serta algoritma. Suatu exception adalah obyek dari kelas standar Throwable,
yang mempunyai turunan terdiri dari :
Error. Exception yang didefinisikan dalam keas ini mempunyai
karakteristik bahwa kondisi yang terjadi tidak dapat diubah. Terdapat
tiga macam subclass yang berada dibawahnya yaitu, ThreadDeath,
Linkage Error, VirtualMachineError.
Exception. Untuk kelas yang diturunkan dari exception kompiler
memeriksa bahwa kita bisa menangani exception dengan metode yang
ada.
Kelas exception mempunyai banyak kelas turunan. Dua kelas yang penting yaitu,
IOException
RuntimeException
Tabel Subkelas dari RunTime Exception
Kelas Keterangan
ArithmeticException Kesalahan pada operasi aritmatika
IndexOutofBoundsException Beberapa jenis indeks di luar batas
NegativeArraySizeException Array diciptakan dengan ukuran negatif
NullPointerExcepotion Penggunaan acuan null yang tidak valid
ArrayStroreException Penyimpanan array dengan tipe data yang
tidak sesuai.
ClassCastException Cast yang tidak valid
IllegalArrayArgumentException Argumen yang tidak benar
SecurityException Aturan sekuriti yang dilanggar
IllegalMonitorStateException Operasi monitor ilegal
IllegalStateException Lingkungan yang tidak benar
UnsupportedOperationException Operasi yang tidak didukung
3. PELAKSANAAN
Macam penanganan exception exception menggunakan kata kunci try,
catch, dan finally sebagai berikut :
Kode yang akan dimonitor exception-nya diletakkan dalam blok try. Jika terjadi
exception dalam blok tersebut, maka exception dilemparkan.
Blok yang diawali dengan catch menangani exception tersebut.
Blok yang diawali dengan finally pada umumnya dieksekusi sebelum methode
berakhir.
2
Sintaks blok try .. catch adalah sebagai berikut :
try{
//kode yang dapat memunculkan exception}
catch
{
//kode untuk menangani exception
}
Sintaks blok try .. catch ..finally adalah sebagai berikut :
try{
//kode yang dapat memunculkan exception}
catch
{
//kode untuk menangani exception
}
finally
{
//blok kode yang selalu dieksekusi
}
Praktik 1 : try .. catch
public class TryCatch { public static void main(String[] args) { int i=1; int j=0; try { System.out.println("i="+i+"j="+j); System.out.println(i/j); System.out.println("Blok Terakhir dari try"); } catch (ArithmeticException e){ System.out.println("Keterangan exception = "+e); } System.out.println("Setelah blok try"); return; } }
- Jalankan dan amati hasilnya.
- Jelaskan maksud dari hasil program tersebut
3
Praktik 2 : try .. catch .. finally
public class TryFinal { public TryFinal() { } public static void main(String[] args) { int i=1; int j=0; try { System.out.println("i="+i+"j="+j); System.out.println(i/j); System.out.println("Blok Terakhir dari try"); } //catch exception catch (ArithmeticException e){ System.out.println("Keterangan exception = "+e); } finally{ System.out.println("Dieksekusi setelah Blok try"); } } }
- Jalankan dan amati hasilnya.
- Jelaskan maksud dari hasil program tersebut
4. LATIHAN
1. Buatlah program untuk kelas RunTimeException berdasarkan tabel di atas!
5. TUGAS
1. Buatlah program Java yang memiliki/menggunakan blok catch lebih
dari satu !
4
MODUL 2
THROW DAN THROWS
1. TUJUAN
Mampu mengimplementasikan konsep exception dengan perintah throw dan throws.
2. TEORI
Kata kunci throw digunakan di program untuk melempar (throw)
exception secara eksplisit. Bentuk umum kalimat adalah,
Throw ThrowableInstance;
Instan Throwable harus merupakan obyek dengan tipe Throwable atau subkelas dari
Throwable. Terdapat dua cara untuk memperoleh obyek Throwable, yaitu,
1. Menggunakan parameter di klausa catch
2. Menciptakab salah satu dengan menggunakan operator new()
Eksekusi program akan dihentikan segera setelah kalimat throw, kalimat-kalimat
setelah kalimat throw tidak dieksekusi. Java akan melakukan inspeksi blok try
terdekat untuk menemukan catch yang cocok dengan 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 berikutnya dan
bila tetap tidak ditemukan, maka penanganan exception secara default akan
menghentikan programnya.
Penggunaan kata kunci throws berhubungan erat dengan penggunaan
exception yang dicek oleh Java. Klausa throws mendaftarkan tipe-tipe exception yang
dapat dilempar method. Hal ini diperlukan agar diketahui semua exception yang
mungkin dilempar method atau subkelasnya, kecuali tipe Error atau
RunTimeException yang dilakukan sistem Java secara otomatis bila menemui
pelangggaran aturan-aturan Java. Semua exception yang hendak dilempar method
harus dideklarasikan di klausa throws. Jika method melemparkan exception yang
tidak dideklarasikan di deklarasi method, maka kompilator akan memberi pesan
kesalahan
3. PELAKSANAAN
Secara umum, penggunaan kata kunci throw, yaitu,
Throw ObjekEksepsi;
ObjekEksepsi disini adalah semua obyek yang merupakan turunan dari class
throwable.
5
Praktik 1. kata kunci throw
Contoh.
public class DemoEksepsi {
public static void methodLain() {
try
{
throw new ArrayIndexOutOfBoundsException(1);
}
catch (ArrayIndexOutOfBoundsException e){
System.out.println("Penanganan eksepsi dalam Method MethodLain()");
throw e;
}
}
public static void main(String[]args) {
try
{
methodLain();
}
catch (ArrayIndexOutOfBoundsException e){
System.out.println("Penanganan eksepsi dalam Method main()");
}
}
}
- Jalankan dan amati hasilnya.
- Jelaskan maksud dari hasil program tersebut
Praktik 2 kata kunci throws
Contoh.
public class DemoEksepsi { public static void methodLain()
throws java.rmi.ServerException,java.rmi.RemoteException {
int i = 10;if(i==10)
throw new java.rmi.ServerException(“Eksepsi dalam method MethodLain()”) else
throw new java.rmi.RemoteException(“Eksepsi lainnya dalam MethodLain }
}- Jalankan dan amati hasilnya.
- Jelaskan maksud dari hasil program tersebut
6
4. LATIHAN
Modifikasilah praktik 1 dengan bentuk exception yang lain.
5. TUGAS
1. Jelaskan tentang keyword ‘throw’ dan ‘throws’ , dan buatlah
program java untuk keduanya !
2. Apa perbedaan antara keyword throw dengan keyword throws !
7
MODUL 3
MEMBUAT CLASS EKSEPSI SENDIRI
1. TUJUAN
Mampu membuat class eksepsi sendiri
2. TEORI
Meskipun tersedia banyak kelas exception pada package java.lang, namun tidak
mencukupi untuk menampung seluruh kemungkinan tipe eksepsi yang mungkin terjadi.
Sehingga seringkali diperlukan untuk membuat tipe eksepsi tersendiri.
Cara pembauatan kelas eksepsi baru adalah mudah. Tinggal mendefinisikan
turunan kelas Exception (yang juga merupakan turunan dari kelas Throwable). Kelas baru
tersebut tidak perlu mengimplementasikan apapun. Hanya perlu mendeklarasikan
konstruktor yang mungkin akan digunakan.
Kelas Exception tidak mendefinisikan method apapun di dirinya. Kelas ini hanya
mewarisi method-method yang disediakan kelas Throwable. Jika diperlukan, maka
method-method tersebut dapat dioverride sesuai kebutuhan
Berikut ini daftar method tersebut :
Method Fungsi
Throwable fillStackTrace() Mengembalikan object Throwable yang
berisi data stack trace lengkap.
String getLocalizedMessage() Mengembalikan deskripsi tentang eksepsi
menggunakan bahasa lokal
String getMessage() Mengembalikan deskripsi tentang eksepsi
void printStackTrace() Menampilkan stack trace
void printStackTrace(PrintStream stream) Mengirim hasil dari stack trace ke stream
yang telah ditentukan
void printStackTrace(PrintWriter stream) Mengirim hasil dari stack trace ke stream
yang telah ditentukan
String toString() Mengembalikan deskripsi tetang tipe object
eksepsi dan penjelasan tentang eksepsi
tersebut. Akan dipanggil secara otomatis
ketika object eksepsi dicetak dengan
method println()
8
3. PELAKSANAAN
Praktek 1: Membuat Exception
class EksepsiKu extends Exception{EksepsiKu(String s){
super(s);}
}
class TestEksepsiKu {public static void methodKu() throws EksepsiKu {
throw new EksepsiKu("Isi Eksepsi");}
public static void main(String[] args) {try {
methodKu();} catch (EksepsiKu e) {
System.out.println("Terjadi eksepsi: dari " + e);}
}}
- Coba dan pelajari contoh pembuatan kelas eksepsi di atas.
- Jelaskan maksud dari hasil program tersebut
Praktek 2 : Membuat eksepsi
class StringException extends RuntimeException{
/* Tidak perlu memasukkan member ataupun construktor */
}
class TestStringException {
public static void main(String args[]) {
String input = "invalid input";
try {
if (input.equals("invalid input")) {
throw new StringException();
}
System.out.println("String accepted.");
} catch (StringException e) {
System.out.println("I hate this string: " + input +".");
}
}
9
}
- Coba dan pelajari contoh penggunaan kelas eksepsi di atas.
- Jelaskan maksud dari hasil program tersebut
3. LATIHAN :
1. Modifikasilah agar data String pada program pada praktek 2 dimasukkan dari
keyboard!
4. TUGAS
1. Jelaskan fungsi pembuatan sub kelas eksepsi sendiri!
2. Buatlah program konversi bilangan dari desimal ke biner. Tentukan sebuah angka
desimal sebagai input. Konversi angka tersebut menjadi bilangan biner. Buatlah
exception class anda sendiri dan lakukan penanganan jika input dari user bukan
berupa bilangan heksadesimal.
10
MODUL 4
KELAS ABSTRAK
1. TUJUAN
Mampu mengimplementasikan kelas abstrak
2. TEORI
Kelas Abstrak adalah kelas yang tidak dapat dibuat obyeknya (diinstantiasi). Hal
ini dikarenakan kelas tersebut belum lengkap karena memiliki minimal satu buah method
yang tidak mempunyai definisi, hanya berupa deklarasi saja. Agar dapat diinstantiasi
maka kelas turunannyalah yang harus membuat implementasinya (membuat definisi dari
method yang belum lengkap tadi). Sebelum semua method dibuat definisinya,maka kelas
yang mewarisi kelas abstrak juga tidak dapat diinstantiasi, artinya menjadi kelas abstrak
juga.
Biasanya suatu kelas dijadikan abstrak karena kelas tersebut terlalu umum.
Sebagai contoh kelas makhluk hidup berisi method-method seperti : bernafas, makan, dan
masih banyak lagi. Method-method tersebut terlalu abstrak untuk dibuat definisinya
sehingga perlu dibuat kelas khusus yang merupakan turunan dari kelas makhluk hidup,
yang mengimplementasikan method-method diatas.
Deklarasi kelas abstrak :
[modifier] abstract class NamaKelasAbstract {daftar fielddeklarasi method-method;
}
Implementasi kemudian dilakukan pada class turunannya:
class Turunan extends NamaKelasAbstract {definisi method-method;…
}
3. PELAKSANAAN
Kelas abstrak dibuat pada kelas yang umum (berada dalam posisi yang tinggi
dalam hierarki kelas).
Praktik 1 : kelas abstrak
Coba dan pelajari contoh penggunaan kelas abstrak berikut:
abstract class A {public abstract void method1; // deklarasi method abtractpublic void method2 ( ) {
System.out.println(“method kongkrit kelas A”);
11
}}
class B extends A {public void method1 ( ){ // override method1 dan buat implementasinya
System.out.println(“method abtract jd kongkrit di kelas B”);}
class TestAbstract1 {public static main (String [ ] args) {
B b = new B(); b.method1();b.method2();
}}
- Jelaskan maksud dari hasil program tersebut !
Praktik 2 : kelas Abstract dan Polymorfisme
- Coba dan pelajari contoh penggunaan kelas abstrak berikut:
abstract class Bentuk {protected int panjang;protected int lebar;public String getBentuk () {
return "bentuk dasar";}
public abstract int HitungLuas ( );}
class BujurSangkar extends Bentuk {public BujurSangkar(int panjang, int lebar){
this.panjang = panjang;this.lebar = lebar;
}public String getBentuk () {
return "bentuk bujur sangkar"; } public int HitungLuas ( ){
return panjang * lebar;}
}
class Segitiga extends Bentuk {public Segitiga(int panjang, int lebar){
this.panjang = panjang;this.lebar = lebar;
}public String getBentuk () {
return "bentuk segitiga"; } public int HitungLuas (){
return (panjang * lebar)/2;}
}
12
class TestAbstrak2 {public static void cetakLuasBentuk(Bentuk btk){
System.out.println(btk.getBentuk() + " dengan luas :" + btk.HitungLuas());}
public static void main (String [ ] args) {BujurSangkar bs = new BujurSangkar(10,20);Segitiga st = new Segitiga(5,10);cetakLuasBentuk(bs);cetakLuasBentuk(st);
}}
- Jelaskan maksud dari hasil program tersebut !
4. LATIHAN
1. Tambahkan kelas Kotak yang diturunkan dari kelas BujurSangkar pada program
pada Praktik 2 di atas. Kemudian tampilkan luas balok dengan method
cetakLuasBentuk(blk) !
2. Gambarkan kelas diagram untuk program pada Praktik 2 di atas!
5. TUGAS
Buatlah kelas abstrak Manusia yang berisi deskripsi umum dari manusia.
Kemudian buatlah kelas Mahasiswa dan kelas Dosen yang merupakan turunan
dari kelas Manusia, dan masing-masing kelas menangani data mahasiswa dan
dosen
13
MODUL 5
KONSEP INTERFACE
1. TUJUAN
Mampu mengimplementasikan konsep interface
2. TEORI
Interface adalah kelas yang benar-benar abstrak, artinya hanya berisi deklarasi
method dan (jika ada) konstanta saja. Method-method tersebut nantinya harus
diimplementasikan pada real class. Interface dapat dianalogikan seperti
menandatangani kontrak kerja. Misalnya seorang dosen wajib mengajar, membuat
soal, dsb, akan tetapi cara mengajar dan membuat soalnya diserahkan ke masing-
masing dosen (tidak ditentukan dalam kontrak kerja).
Interface mendefinisikan suatu protokol perilaku tanpa dipusingkan dengan
implementasinya. Suatu kelas yang mengimplementasikan interface maka pada kelas
tersebut akan melekat perilaku yang didefinisikan interface.
Sebagai contoh : Dalam kehidupan nyata dapat diketahui ada manusia yang
bekerja sebagai tentara, penyanyi, pengacara, dan sebagainya, tentunya manusia-manusia
tersebut selain harus memiliki method standard sebagai seorang manusia, juga harus
memiliki method yang sesuai dengan pekerjaannya. Dengan demikian untuk membuat
objek manusia yang bekerja sebagai penyanyi, harus dibuat kelas yang merupakan
turunan kelas manusia yang meng-implementasikan interface penyanyi.
Delarasi interface :
[modifier] interface NamaInterface {deklarasi konstanta;deklarasi method-method;
}
Implementasi kemudian dilakukan pada class lainnya:
[modifier] class NamaKelas implements NamaInterface{definisi method-method;…
}
14
3. PELAKSANAAN
Praktek 1 : Interface ActionListener
Coba dan pelajari contoh penggunaan interface dalam aplikasi GUI berikut. Dalam
contoh ini Kelas Tombol diturunkan dari kelas Frame, dan juga mengimplementasikan
interface ActionListener, yang memiliki sebuah method yaitu : ActionPerformed.
import java.awt.*;import java.awt.event.*;
public class Tombol extends Frame implements ActionListener {//dekarasi komponenButton bTekan = new Button();TextField txt1 = new TextField(" ");
public Tombol() {//layout komponenthis.setLayout(new FlowLayout());//menambahkan komponen ke framethis.add(bTekan,null);this.add(txt1,null);//menulis text ke buttonbTekan.setLabel("Tekan Aku");//menambahkan action listener ke komponenbTekan.addActionListener(this);
}
//implementasi method ActionPerformedpublic void actionPerformed(ActionEvent e){
Object cmd = e.getSource();if (cmd.equals(bTekan))
txt1.setText("Halo Semua"); }
public static void main(String[] argv){Tombol tmbl = new Tombol();tmbl.pack();tmbl.setTitle("Tombol AWT");tmbl.setVisible(true);
}}
Praktek 2 : Interface Bangun2D
Interface Bangun2D memiliki 2 method, yaitu : hitung_Luas() dan hitung_Keliling().
Kelas Lingkaran yang mengimplementasikan interface Bangun2D harus membuat
definisi untuk kedua method tersebut.
15
interface Bangun2D{public double hitung_Luas();public double hitung_Keliling();
}
class Lingkaran implements Bangun2D{private double jejari;
public void setJejari(double jejari){this.jejari=jejari;
}
public double getJejari(){return this.jejari;
}
public double hitung_Luas(){return (3.14 * this.jejari * this.jejari);
}
public double hitung_Keliling(){return (2 * 3.14 * this.jejari);
}}
class TestLingkaran{public static void main(String[] arg){
Lingkaran bunder = new Lingkaran();bunder.setJejari(10);double luas = bunder.hitung_Luas();double keliling = bunder.hitung_Keliling();
System.out.println("Luas lingkaran dengan jejari "+bunder.getJejari()+ " adalah "+luas);System.out.println("Keliling lingkaran dengan jejari "+bunder.getJejari()+" adalah "+keliling);
16
Lingkaran
-daftar field
+daftar method
<<Bangun2D>>
+hitung_luas();+hitung_Keliling();
}}
- Coba dan pelajari contoh penggunaan interface di atas.
- Jelaskan maksud dari hasil program tersebut
4. LATIHAN
Buatlah kelas PersegiPanjang yang mengimplementasikan interface Bangun2D di
atas!
5. TUGAS
1. Jelaskan perbedaan antara kelas abstrak dan interface!
2. Buatlah interface Bangun3D yang mempunyai method : hitung_Luas(),
hitung_Volume(), dan tampil_info(). Kemudian buatlah kelas Tabung yang
mengimplementasikan interface Bangun3D dan diturunkan dari kelas Lingkaran!
17
MODUL 6
INTERFACE LANJUT
1. TUJUAN
Mampu menangani dan mengimplementasikan lebih lanjut tentang konsep interface
2. TEORI
Pewarisan merupakan proses penurunan field dan method dari suatu kelas
induk kepada satu/lebih subkelas. Seringkali dibutuhkan suatu kelas yang field dan
methodnya berasal dari lebih dari satu kelas induk (pewarisan jamak). Pewarisan jamak
memang mempercepat dalam pembuatan kelas. Tetapi mempunyai beberapa kelemahan
diantaranya adalah terjadi ambiguitas karena adanya method yang sama yang diturunkan
dari beberapa kelas induk.
Java tidak mengijinkan pewarisan jamak. Sebagai gantinya java menggunakan
interface. Terdapat 2 jenis penyelesaian masalah pewarisan jamak di java, yaitu :
1. Kombinasi antara turunan satu kelas dan interface
[modifier] class NamaKelas extends NamaKelasInduk implements NamaInterface {
//isi kelas
}
2. Dengan implementasi multiple interface
[modifier] class NamaKelas implements NamaInterface1, NamaInterface2, … {
//isi kelas
}
18
Suatu Interface dapat diperluas menjadi Interface baru yang lebih lengkap.
[modifier] interface NamaInterface2 extends NamaInterface1{
//daftar konstanta dan method
}
3. PELAKSANAAN
Praktek 1 : Kombinasi antara turunan satu kelas dan interface
interface MProvides{void func();
}
interface MRequires{int getValue();
}
class Mixin implements MProvides{
private final MRequires parent;public Mixin(MRequires parent) {
this.parent = parent;}public void func() {
System.out.println("Nilai dari method func: " + parent.getValue());}
}
class Parent{
private int value;public Parent(int value ) {
this.value = value;}public int getValue() {
return this.value;}
}
class Child extends Parent implements MRequires, MProvides{private final MProvides mixin;public Child(int value){
super(value);this.mixin = new Mixin(this);
}
public void func(){mixin.func();
}}
19
class TestInherInterface{public static void main(String[] arg){
Child anak = new Child(5);anak.func();System.out.println("nilai dari method getValue:"+anak.getValue());
}
}
- Coba dan pelajari contoh penggunaan interface di atas.
- Jelaskan maksud dari hasil program tersebut
Praktek 2 : Multiple interface
interface Interface1 { public void tampilInfo(); public void setInfo(String info);}
interface Interface2 { public void tampilInfo();}
public class MultiInterfaces implements Interface1, Interface2 { private String info;
public void setInfo(String info) { this.info = info;
} public void tampilInfo(){
System.out.println(this.info+": ini info dari method tampilInfo, ndak error to"); }
public static void main(String[] a) { MultiInterfaces t = new MultiInterfaces(); t.setInfo("Hai"); t.tampilInfo(); }}
- Coba dan pelajari contoh penggunaan interface di atas.
- Jelaskan maksud dari hasil program tersebut
4. LATIHAN
Buatlah program sederhana yang menggunakan perluasan (penurunan) Interface!
20
5. TUGAS
1. Gambarkan class diagram untuk program pada praktek 1!
2. Buatlah program Java yang mengimplementasikan multiple interface seperti
diagram kelas berikut,
21
Lingkaran
-daftar field
+daftar method
Tabung
-daftar field
+daftar method
<<Bangun3D>>
+hitung_Volume();+tampil_Info();
<<Bangun2D>>
+hitung_luas();+hitung_Keliling;
<<Pola>>
+setWarna();+getWarna();
MODUL 7
INNER CLASS
1. TUJUAN
Mampu mengimplementasikan konsep inner class
2. TEORI
Java membolehkan menyisipkan suatu kelas ke dalam kelas lainnya. Kelas sisipan
ini disebut kelas Inner.
Kelas Inner berguna untuk mendukung suatu proses yang akan dijalankan oleh kelas
luarnya.
Beberapa ketentuan kelas Inner :
a) Kelas Luar yang mengandung kelas Inner, bila dikompilasi akan
menghasilkan dua file *.class, yaitu Luar.class dan Luar$Inner.class
b) Kelas Inner boleh tidak diberi nama, yang disebut Anonymous Inner.
c) Kelas Inner dapat diberi modifier akses public, atau protected, atau
default, ataupun private.
d) Untuk mengakses referensi this dari kelas luar digunakan bentuk
NamaKelasLuar.this.
e) Kelas Luar ikut bertanggung-jawab dalam instansiasi kelas Inner (yang
non static) . Kalau objek kelas Luar adalah a, dan objek kelas Inner adalah b, maka
sintaks yang benar adalah :
Luar a = new Luar();
Luar.Inner b = a.new Inner();
f) Jika kelas Inner bersifat static, maka objek milik kelas Inner dapat dibuat
sendiri tanpa melalui kelas Luarnya, (Artinya kelas Inner tidak dapat mengakses
attribute ataupun method non static milik kelas Luarnya).
3. PELAKSANAAN
public class OuterClass { /** Creates a new instance of OuterClass */ public OuterClass() { } // Define a variable in the outer class int data = 5;
// Define an inner class class InnerClass { int data2 = 10; void method() {
22
System.out.println("data dari OuterClass = " + data); System.out.println("data2 dari InnerClass = " + data2); } } }
public class TesInner { public static void main(String[] args) { // Create an object instance of a class that contains // an inner class - we will call it outer class. OuterClass oc = new OuterClass(); // Create an object instance of an inner class. OuterClass.InnerClass ic = oc.new InnerClass(); // Display data from both outer class and inner class. System.out.println("Akses data dari outer class = " + oc.data); System.out.println("Akses data2 dari inner class = " + ic.data2); // Invoke a method from an inner class ic.method(); }}
- Coba dan pelajari contoh penggunaan interface di atas.
- Jelaskan maksud dari hasil program tersebut
- Jelaskan kode program di atas
4. LATIHAN
Tambahkan inner class baru (namai InnerInnerClass) dalam InnerClass pada
OuterClass pada praktek 1, kemudian ubahlah class TesInner diatas menjadi sebagai
berikut (ubah namanya menjadi class InnerClassDemo):
public class InnerClassDemo { public static void main(String[] args) { // Create an object instance of a class that contains // an inner class - we will call it outer class. OuterClass oc = new OuterClass(); // Create an object instance of an inner class. OuterClass.InnerClass ic = oc.new InnerClass(); // Create an object instance of an inner class. OuterClass.InnerClass.InnerInnerClass iic = ic.new InnerInnerClass(); // Display data from both outer class and inner class. System.out.println("Akses data dari outer class = " + oc.data); System.out.println("Akses data2 dari inner class = " + ic.data2); System.out.println("Akses data3 dari innerinner class = " + iic.data3);
23
// Invoke a method from an inner class ic.method(); iic.method2(); }}
Output program yang dihasilkan harus sepertidibawah ini :
Akses data dari outer class = 5
Akses data2 dari inner class = 10
Akses data3 dari innerinner class = 15
data dari OuterClass = 5
data2 dari InnerClass = 10
data dari OuterClass = 5
data2 dari InnerClass = 10
data3 dari InnerInnerClass = 15
5. TUGAS
Jelaskan kelebihan dan kelemahan penggunaan inner kelas!
24