Kelas Lanjut bagian 1 Topik • • • • • • • • Object class String StringBuffer Math class Wrapper class Static Static initializer Final java.lang • Compiler java secara otomatis akan mengimport semua class dalam package java.lang ke dalam semua file sumber (source file). • Beberapa class yang penting pada package java.lang, yaitu : – Object – Math – The wrapper classes – String – StringBuffer The Object Class • Class Object adalah akar dari semua class yang ada di Java • Deklarasi class tanpa extends, secara implisit pasti ditambahkan “extends Objects” – public class Employee { } – Sama dengan – public class Employee extends Objects { } • Methods yang dipunyai : – wait(), notify(), notifyAll(), equals(), toString() equals() public boolean equals(Object object) • Untuk class Object : Fungsi methods equals() sama dengan operator ==, yaitu membandingkan alamat (reference) – nya. • Pembandingan object d1 dan d2 – Menggunakan == • if (d1==d2) – Menggunakan equals • if (d1.equals(d2)) Tanggalku.java • public class Tanggalku { • private int hari; • private int bulan; • private int tahun; • public Tanggalku(int hari, int bulan, int tahun) { • this.hari=hari; • this.bulan=bulan; • this.tahun=tahun; • } • } TestEquals.java • • • • • • • • • • • • • • • • • • • • • • • • public class TestEquals { public static void main(String [] args) { Tanggalku tanggal1=new Tanggalku(14,9,1970); Tanggalku tanggal2=new Tanggalku(14,9,1970); if (tanggal1==tanggal2) System.out.println("tanggal1 identik dengan tanggal2"); else System.out.println("tanggal1 tidak identik dengan tanggal2"); if (tanggal1.equals(tanggal2)) System.out.println("tanggal1 equal dengan tanggal2"); else System.out.println("tanggal1 tidak equal dengan tanggal2"); System.out.println("set tanggal1==tanggal2"); tanggal1=tanggal2; if (tanggal1==tanggal2) System.out.println("tanggal1 identik dengan tanggal2"); else System.out.println("tanggal1 tidak identik dengan tanggal2"); if (tanggal1.equals(tanggal2)) System.out.println("tanggal1 equal dengan tanggal2"); else System.out.println("tanggal1 tidak equal dengan tanggal2"); } } Meng-overide methods equals() • • • • • • • • • • • • • • • • • • • public class Tanggalku { private int hari; private int bulan; private int tahun; public Tanggalku(int hari, int bulan, int tahun) { this.hari=hari; this.bulan=bulan; this.tahun=tahun; } public boolean equals(Object o) { boolean result = false; if ((o!=null) && (o instanceof Tanggalku)) { Tanggalku d=(Tanggalku) o; if ((hari==d.hari) && (bulan==d.bulan) && (tahun==d.tahun)) result=true; } return result; } } Beda == dan equals untuk data String • == Membandingkan reference (alamat) nya. • equals Membandingkan content (isi) - nya Penggunaan == dan equals untuk variabel bertipe string • • • • • • • • • • • • • public class StringLiteral { public static void main(String [] args) { String java="Java"; String va="va"; System.out.println(java=="Java"); System.out.println(Other.java1==java); System.out.println(java==("Ja"+"va")); System.out.println(java==("Ja"+va)); } } class Other { static String java1="Java"; } trim() dan replace() • public class TrimReplace { • public static void main(String [] args) { • String belajar=" bahasa java"; • System.out.println(belajar); • belajar=belajar.trim(); • System.out.println(belajar); • belajar=belajar.replace('v','w'); • System.out.println(belajar); • } • } StringBuffer methods • • • • • • • • • • • • public class cobaStringBuffer{ public static void main(String [] args) { StringBuffer sbuf=new StringBuffer("12345"); System.out.println(sbuf); sbuf.reverse(); System.out.println(sbuf); sbuf.insert(3,"aaa"); System.out.println(sbuf); sbuf.append("zzz"); System.out.println(sbuf); } } Math Class • Berisi methods-methods yang digunakan untuk operasi matematika Methods dalam Math Class Wrapper Classes • is simply a class that encapsulates a single, immutable value. – Integer class wraps up an int value, – Float class wraps up a float value. Tipe data primitif dan Wrapper Wrapper Class • Illegal Vector vec = new Vector(); boolean boo = false; vec.add(boo); // Illegal Wrapper class • Solusi : Vector vec = new Vector(); boolean boo = false; Boolean wrapper = new Boolean(boo); vec.add(boo); // Legal Wrapper Classes 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. boolean primitiveBoolean = true; Boolean wrappedBoolean =new Boolean(primitiveBoolean); byte primitiveByte = 41; Byte wrappedByte = new Byte(primitiveByte); char primitiveChar = ‘M’; Character wrappedChar = new Character(primitiveChar); short primitiveShort = 31313; Short wrappedShort = new Short(primitiveShort); int primitiveInt = 12345678; Integer wrappedInt = new Integer(primitiveInt); long primitiveLong = 12345678987654321L; Long wrappedLong = new Long(primitiveLong); float primitiveFloat = 1.11f; Float wrappedFloat = new Float(primitiveFloat); double primitiveDouble = 1.11111111; Double wrappedDouble =new Double(primitiveDouble); equals() dan == pada wrapper class • Method equals() membandingkan content-nya • == membandingkan alamatnya. Static • Static digunakan sebagai modifier pada: – Variable – Method – Inner class • Static mengindikasikan bahwa atribut atau method tersebut milik class. • Anggota class yang bersifat static ini sering disebut dengan “class members” (class variable dan class methods). • Contoh penggunaan : static int bil=1; Class Variable • Class variable bersifat milik bersama dalam arti semua instance/obyek dari class yang sama akan mempunyai class variable milik bersama. • Class variable mirip dengan global variable. Class Variable • Tanpa membuat obyeknya terlebih dahulu, kita bisa mengakses class variable dari luar class (bila variabel tersebut bertipe public) Class Method • Tanpa membuat obyeknya terlebih dahulu, kita bisa mengakses class method dari luar class (bila variabel tersebut bertipe public) Static : Ingat !!! • Static method bisa diakses dari luar class tanpa harus membuat obyeknya terlebih dahulu. • Konsekuensi: semua variabel atau method yang diakses oleh static method tersebut harus bersifat static juga. • Jika static method mengakses non-static method dan non-static variable maka akan menyebabkan compile error. Error !! pulic class Count{ public int serialNumber; // non-static private static int counter = 0; } public static int getSerialNumber() { return serialNumber; // compile error } Sukses !!! • public class Count{ • public int serialNumber; // non-static • public static int counter = 0; • • • • } public static int getSerialNumber() { return counter; // compile sukses } Static Initializer • Static Initializer yaitu block yang dideklarasikan static pada suatu class yang letaknya tidak berada dalam deklarasi method. • Static block ini dieksekusi hanya sekali, yaitu ketika class dipanggil pertama kali. • Jika pada statement class terdapat lebih dari satu static initializer maka urutan eksekusi berdasarkan mana yang dideklarasikan lebih dulu. • Static block biasanya digunakan untuk menginisialisasi static attribute (class variable). Contoh static initializer Penggunaan class, method dan variabel final • Final class tidak bisa dibuat subclass. (java.lang.String merupakan final class) • Final method tidak bisa di override. • Final variable bersifat konstan. • Final variable hanya bisa dideklarasikan sekali saja, assignment final variable tidak harus pada saat dideklarasikan “blank final variable”. – Blank final instance variable harus di set di tiap constructor. – Blank final variable pada method harus di set pada method body sebelum digunakan. Contoh : pengunaan final Final pada variabel : Object • Referensi/alamat harus tetap, state dari object boleh dirubah 1. class Walrus { int weight; Walrus(int w) { weight = w; } 2. 3. 4. } 5. 6. class Tester { 7. final Walrus w1 = new Walrus(1500); 8. void test() { 9. w1 = new Walrus(1400); // Illegal 10. w1.weight = 1800; // Legal 11. } 12. }