COMPOSITION
FAKULTAS TEKNOLOGI INFORMASI
PBO Lanjutan
UNIVERSITAS BUDI LUHUR www.bl.ac.id
Kelas (Lanjutan)
HAL : 1
Composition • Suatu class yang mempunyai field (instance variable) yang merupakan referensi obyek dari class yang lain • Contoh : ada class Penduduk yang terdiri dari Nama dan Almt. Field Almt bisa saja merupakan referensi obyek dari class yang lain, yaitu Alamat yang berisi NamaJalan, Rt, Rw dan NoRumah
HAL : 2
Contoh Program class Alamat { private private private private
String String String String
NamaJalan; Rt; Rw; NoRumah;
public Alamat(String w, String x, String y, String z) { NamaJalan =w; Rt=x; Rw=y; NoRumah=z; } HAL : 3
public String TampilAlamat() { return NamaJalan + " Rt." + Rt + " Rw." + Rw + " No." + NoRumah; } } //akhir dari class Alamat class Penduduk { private String Nama; private Alamat Almt; public Penduduk(String x, Alamat y) { Nama =x; Almt =y;}
public String TampilOrang() { return Nama + "\nAlamatnya : "+Almt.TampilAlamat(); } } //Akhir dari class Penduduk HAL : 4
public class kompos1 { public static void main(String args[]) { Alamat a = new Alamat("Petukangan","004","016","30"); Penduduk p1 = new Penduduk("Safrina", a); System.out.println(p1.TampilOrang()); } }
Hasilnya:
HAL : 5
Garbage Collector • Mengembalikan memory ke system • Java melakukan hal ini secara otomatis • Obyek bisa ditandai untuk garbage collection jika sudah tidak ada referensi ke obyek tersebut • Ada method ‘finalize’ yang dijalankan sebelum garbage collector • Methode finalize bersifat void dan tidak memerlukan parameter
HAL : 6
class kursi { private int tinggi; private String warna; private static int jum_kursi;
public kursi(int x, String y) { tinggi=x; warna=y; jum_kursi=jum_kursi+1; System.out.println("konstruktor kursi dijalankan..."); }
public String getWarna() { return warna; } HAL : 7
public int getTinggi() { return tinggi; } public int getJum_kursi() { return jum_kursi; }
}
protected void finalize() { jum_kursi=jum_kursi-1; System.out.println("Finalize dijalankan, jumlah obyek kursi skrg : “ +jum_kursi); }
HAL : 8
public class garbage1 { public static void main(String args[]) { kursi k1 = new kursi(5,"Hijau"); kursi k2 = new kursi(10,"Merah"); System.out.println("Warna kursi : "+k1.getWarna()); System.out.println("Tinggi kursi : "+k1.getTinggi()); System.out.println("Jumlah kursi : "+k1.getJum_kursi()); System.out.println("Warna kursi : "+k2.getWarna()); System.out.println("Tinggi kursi : "+k2.getTinggi()); System.out.println("Jumlah kursi : "+k2.getJum_kursi()); k1=null; System.gc(); System.out.println("Jumlah kursi stlh gc : "+k2.getJum_kursi()); } }
HAL : 9
Hasilnya :
HAL : 10
Static Class Member • Menggunakan keyword ‘static’ • Merupakan class variable (tiap obyek yang terbentuk dari class tersebut akan berbagi/share variabel yang sama), bukan instance variable • Akses ke static class member yang bersifat public gunakan nama class nya dan tanda titik (.) • Akses ke static class member yang bersifat private gunakan methodnya yang bersifat public HAL : 11
Contoh akses ke public static class member class kotak { private int panjang; private int lebar; public static int jum_kotak;
public kotak(int x, int y) { panjang = x; lebar = y; jum_kotak = jum_kotak + 1; }
}
public int getKotak() { return jum_kotak; } HAL : 12
public class kotak1 { public static void main (String args[]) { kotak k1 = new kotak(3,2); System.out.println("Jumlah kotak : "+kotak.jum_kotak); kotak k2 = new kotak(4,3); System.out.println("Jumlah kotak : "+kotak.jum_kotak); } }
Hasilnya :
HAL : 13
Contoh akses ke private static class member class kotak { private int panjang; private int lebar; private static int jum_kotak;
public kotak(int x, int y) { panjang = x; lebar = y; jum_kotak = jum_kotak + 1; }
}
public int getKotak() { return jum_kotak; } HAL : 14
public class kotak1 { public static void main (String args[]) { kotak k1 = new kotak(3,2); System.out.println("Jumlah kotak : "+k1.getKotak()); kotak k2 = new kotak(4,3); System.out.println("Jumlah kotak : "+k2.getKotak()); //k2.getKotak() bisa juga diganti mjd k1.getKotak(), //karena mereka berbagi field jum_kotak } }
Hasilnya :
HAL : 15
Final Instance Variable • • • •
Menggunakan keyword ‘final’ Diterapkan pada instance variable atau field Untuk membuat konstanta Menyebabkan field tidak bisa diubah setelah proses inisialisasi.
HAL : 16
Contoh Program : class kelas { private String namakelas; private final int jum_isi; public kelas(String x, int y) { namakelas=x; jum_isi=y;} public String getNamaKelas() { return namakelas;} public int getJum_isi() { return jum_isi;}
}
/*public void nambah() { jum_isi++; }*/ HAL : 17
public class final1 { public static void main(String args[]) { kelas k1 = new kelas("XB",50); System.out.println("Isi final jum_isi : "+k1.getJum_isi()); } }
Hasilnya :
HAL : 18
• Kalau tanda remark pada class kelas dibuka, maka akan terjadi kesalahan. Karena field jum_isi yang bersifat final dicoba untuk diubah dengan cara ditambah dengan 1.
Errornya :
HAL : 19