BAB I PENGANTAR

1.1

Bahasa Pemrograman Java Bahasa pemrograman java yang telah dirilis adalah : 1. Produk Sun Microsystem : Java 2 Platform Standart Edition (J2SE), Java 2 Micro Edition (J2ME), Java 2 Enterprise Edition (J2EE). 2. Produk Borland : Borland JBuilder 3. Produk Microsoft : Microsoft Visual J/J++ Spesifikasi J2EE antara lain Java Database Connectivity, JDOM (untuk XML), Remote Method Invocation, Enterprise Java Beans, Java Messaging, Java Server Pages, Java Servlet, Socket Programming, dan SQLJ. Java/Standard Development Kit (JDK/SDK) merupakan alat-alat utama bagi programmer untuk membuat dan menjalankan java. Development Kit dapat didownload di : http://java.sun.com/product/JDK/index.html atau http://java.sun.com/j2se/1.5/index.html atau, http://java.sun.com/cgi-bin/java-ports.cgi Komponen JDK antara lain compiler(javac), interpreter(java) disebut juga java virtual machine atau java runtime environment, applet viewer(appletviewer), debugger(jdb), java class library(jcl), header dan stub generator(javah), dan yang penting yaitu java documentation(javadoc). Penjelasan penggunaan komponen JDK : 1. Kompilator (javac) Berfungsi untuk kompilasi file source code : *.java menjadi *.class Syntax umum : javac nama_file.java 2. Interpreter (java) Bertugas untuk menjalankan bytecode (*.class) Syntax umum : java nama_file.class

1

3. Applet Viewer Digunakan untuk menjalanakan applet viewer, namun sekarang sudah digantikan browser. Syntax umum : appletviewer nama_file.html 4. Java Debugger Bertugas untuk melakukan debugging aplikasi java. Syntax umum : jdb option 5. Java Class File Diassembler (javap) Bertugas membuat daftar method dan attribute public dari suatu kelas. Syntax : javap namaKelas 6. Java Header and Stub Generator Bertugas menerjemahkan bahasa yang ditulis dalam bahasa Java menjadi bahasa pemrograman C. Syntax umum : javah namaKelas 7. Java Documentation Generator Menampilkan pustaka kelas, interface, constructor, dan method standard yang telah dibuat vendor. Dari hasil instalasi JDK, dokumentasi ini dapat dilihat pada C:\java\docs\api\index.html dan Dari hasil instalasi Netbeans, dapat dilihat pada C:\Program Files\NetBeans3.6\doc\junit\index.html 8. Source Code Java API Source code ini dapat diperoleh dari file src.zip. Untuk pemrogram pemula, lingkungan pemrograman java dapat diringkas menjadi : 1. Editing source code menggunakan editor teks, seperti Notepad atau TextPad 2. Compiling menggunakan keyword javac melalui command prompt (dapat juga dari editor teks seperti TextPad). 3. Executing menggunakan : a. Command prompt untuk java application(atau dari editor teks TextPad) b. Browser atau appletviewer untuk java applet.

2

1.2. Pemrograman Java Baris-baris program dalam java harus ditulis dalam lingkup class. Bagaimanakah membuat sebuah program paling sederhana dengan java? Berikut ini contoh program pendek untuk menampilkan tulisan “Belajar Java” di layar monitor anda.
class Latihan1 { public static void main(String args[]) { System.out.println("Belajar Java"); } }

Program pendek diatas disimpan dengan nama file Latihan1.java. Penamaan ini mengikuti aturan bahwa nama file harus sama dengan nama class. Tampilan di layar monitor jika program tersebut berhasil dijalankan adalah :

Belajar Java Dalam Java atau bahasa pemrograman yang lain dikenal istilah Token. Token adalah elemen terkecil di program yang masih memiliki arti. Ada 5 token dalam bahasa Java yaitu identifier, keyword, literal dan tipe data, operator, serta separator. Identifier Identifier adalah token yang merepresentasikan nama sesuatu. Sesuatu tersebut adalah variabel, atau konstanta, atau method, atau kelas, atau package, atau interface. Keyword (kata kunci) Kata kunci digunakan untuk suatu tujuan tertentu. Ada 51 keyword dalam java yaitu : Tabel 1. Daftar Keyword dalam Java abstract boolean break byte continue default do double for goto if implements new null package private switch synchronized this threadsafe

3

short.sqrt(a*a+b*b). static final PHI=3. …. Berikut tabel jangkauan dan ukuran dari semua tipe data sederhana dalam java : Tabel 2 Jangkauan dan Ukuran Tipe Data Sederhana dalam Java Tipe Data Primitif byte short int long char Jangkauan -128 s/d 127 -32767 s/d 32767 -2147483648 s/d 2147483647 -9223372036854775808 s/d 9223372036854775807 sebuah unicode Ukuran (bit) 8 16 32 64 16 4 .14. Angka terdiri dari byte. double c = Math. Contoh deklarasi : double a=3. int. karakter. double. static final double CM_PER_INC = 2. float.54. TipeData namaVar1. Ada tiga besaran literal dalam java yaitu angka. long. b=4.byvalue case catch car class const else extends false final finally float import instanceof int interface long native protected public return short static super throw throws transient true try void while Literal dan Tipe Data Primitif Literal adalah nilai variabel/attribute atau nilai konstanta atau nilai objek data. [modifier] static final TipeData NAMAKONSTANTA = nilai. Bentuk umum : TipeData namaVar = ungkapan_atau_nilai. namaVar2. dan boolean (dianggap angka true = 1 atau false = 0). dan string. Semua variable dan konstanta yang akan digunakan harus dipesan terlebih dahulu dalam deklarasi.

mengelompokkan nilai-nilai suatu array. predecrement. *=. <=. /=. pembagian. >>>= var++. % +. >>> <. >>. [] () 2 ++var. mendefinisikan blok kode kelas ataupun kode 5 . >>=. <<=. Operan yang dioperasikan dapat berupa literal.float double boolean Operator 3. +=.4e+038 1. variabel. %=. pengurangn geser untuk bil biner pembandingan kesamaan.4e-038 s/d 3.then…else… operator penugasan operator penugasan postincrement.. var-- Keterngan sekaligus preincrement. --var. /. <<. |=.7e-308 s/d 1. Separator menginformasikan ke compiler java mengenai adanya kelompok kode program. Daftar Separator di Java Notasi (…) {…} Nama kurung kurung kurawal Deskripsi mengelompokkan parameter method. >= ==. Berikut adalah daftar separator di java : Tabel 1. postdecrement unary.7e+308 false = 0 atau true = 1 32 54 8 Operator melakukan komputasi terhadap satu/dua objek data. Tabel Hirarki Operator Prioritas Kelompok Operator 1 . Berikut tabel dan hirarki operator : Tabel 3. -=. >. atau nilai yang dikirim method. ~. instanceof 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 Separator (type) (casting) ! *.3. != & ^ | && || ?: =. instance dari kelas … not perkalian. ketidaksamaan and exclusive or unconditional or conditional and conditional or shorthand untuk if. modulus penjumlahan. ^= &=.

mendeklarasikan tipe array mengakhiri pernyataan memisahkan identifier-identifier di bagian deklarsi variable.3. 1. sehingga berakibat pengabaian baris program setelah keyword tersebut. yaitu untuk keluar dari kendali percabangan switch. memisahkan kelas dari objek. . Keyword break.out. merangkai pernyataan-pernyataan di dalam for. kemudian Contoh : public class contohBreak { public static void main(String args[]) { int i = 0. // Jika i bernilai 5 maka perulangan } while (i <= 9) // Do While dihentikan } } Simpanlah program diatas dengan nama contohBreak. if (i==5) break.[…] : . kemudian compile dan jalankan. dan objek dari method. Penggunaan keyword break Ada dua penggunaan keyword break. dan return Kelompok keyword ini berfungsi untuk melompat dari suatu baris program java ke baris yang lain (variasi lain dari perintah goto dalam bahasa BASIC).3.println(i). 1. Dengan keyword ini berarti percabangan/perulangan akan diakhiri. dan untuk keluar dari kendali perulangan. 6 .java. System. memisahkan nama-nama package. kurung siku titik koma koma titik method.1. continue. do { i++. Hasil running program tersebut : eksekusi dilanjutkan ke pernyataan setelah blok percabangan/perulangan tersebut.

Contoh : public class contohContinue { public static void main(String args[]) { int i=0.2. System.println(”iterasi ke : “+i).1. Hasil running program tersebut : 7 . if (i==3) continue.out. Penggunaan keyword continue Penggunaan keyword ini untuk segera lompat ke perulangan berikutnya.java.3. do { i++. } while(i <= 9). Baris-baris program setelah keyword continue dalam blok perulangan saat itu berarti diabaikan. if (i==5) break. kemudian compile dan jalankan. } } Simpanlah program diatas dengan nama contohContinue.

keyword break dan keyword continue. Penggunaan keyword return Keyword ini digunakan untuk keluar dari suatu method. Sebutkan komponen-komponen yang terdapat dalam Java Development Kit! Apa yang dimaksud dengan token dan identifier? Sebutkan kegunaan dari operator .. Kemudian eksekusi dilanjutkan ke pernyataan setelah blok method tersebut. Baris-baris program setelah keyword ini yang berada dalam blok method tersebut akan diabaikan.3. Buatlah program yang menampilkan tulisan : 8 .. Soal Latihan 1. } } 1.4. separator. 4. 2.3. Contoh cuplikan program : int abs(int x) { if (x >= 0) return x. else return(-x) . 3.1.

Belajar java memang mudah Jika dilakukan dengan tekun 5. Buatlah contoh program lain yang menggunakan keyword break dan continue. 9 .

digunakan berdasarkan kebutuhan. 2. atau sifat-sifat attributenya. Anatomi Kelas Bentuk umum struktur anatomi kelas sebagai berikut : (modifier1) class NamaKelas (modifier2) { classbody } Classbody terdiri dari satu atau beberapa attribute. Ada 10 keyword yang digunakan sebagai modifier 1 dan dikelompokkan menjadi : 1. constructor. 3. Kumpulan method berfungsi untuk mengoperasikan kumpulan data dalam kelas tersebut. 2. protected. Pengertian Kelas Kelas merupakan sarana pengkapsulan kumpulan data dan kumpulan method java. sifatnya optional. Kumpulan data dan method tersebut berwujud baris-baris program java. yaitu kelas standard dan kelas yang didefinisikan sendiri. Modifier akses (public. DAN MODIFIER Apapun kode program yang diimplementasikan di java harus dikapsulkan ke dalam bentuk kelas (class). Sebuah kelas akan mendefinisikan satu objek atau sekumpulan objek sama sifat dan perilakunya.2. Modifier menunjukkan sifat-sifat tertentu dari kelasnya. Ada dua kelompok kelas. Kelas standard disediakan oleh Java dan siap dipakai. private) Modifier final Modifier static Modifier abstract 10 . dan method. Kelas digunakan untuk membuat objek. default. Modifier 1 dan 2 pada anatomi kelas. dan berperan sebagai tipe data dari objek.1. sifatsifat dari methodnya. METHOD. Kumpulan dari method/kelas standard dalam java dikenal dengan API (Application Programming Interface).BAB II KELAS. 2. 4.

2. 7. public double x. Modifier synchronized Modifier native Modifier storage (transient. // dan seterusnya } 2. Ada 2 keyword yang sering digunakan sebagai modifier 2. dan keyword super tidak boleh digunakan pada method static. Pasangan tipe dan parameter dapat lebih dari satu (dipisah oleh koma). Sementara static tidak boleh memberi sifat pada interface. jika bersifat static berarti tingkah laku semua objek dalam kelas tersebut.14159265358979323846.5. } Modifier boleh lebih dari satu (dipisah oleh spasi). Deklarasi Attribute (Variabel Anggota Data) Deklarasi diletakkan di dalam classbody (di luar method).3. Bentuk umum deklarasi attribute : [modifier] tipedata namavariabel. volatile) Modifier yang memiliki sifat saling kontradiktif yaitu static dan abstract. 11 . [public] [static] final tipedata NAMA_KONSTANTA = nilai.4. Method Method merupakan tingkah laku dari suatu objek. r. 6. Method diletakkan di dalam classbody (sebaiknya tidak diletakkan dalam method lain). Bentuk umum method : [modifier] tipe_return_value namaMethod(tipe parameter) { methodbody. yaitu extends dan implements. y. Contoh : public class CircleClass { public static final double PI = 3.

namaMethod([nilaiParamater]). Tidak semua member (class. dan method) dapat diakses method. langsung tidak boleh.Baris-baris program java saat dijalankan dimulai dari method main(). Bentuk umum method main() adalah sebagai berikut : [modifier] tipe_return_value main(String args[]) { methodbody } Ada dua sintaks pemanggilan suatu method : namaObjek. namaKelas. lewat class tidak boleh static boleh lewat objek ataupun class. boleh langsung kalau dalam kelas sendiri non static boleh lewat objek. attribute. boleh langsung kalau dalam kelas sendiri non static boleh hanya lewat objek. sedangkan jenis setter() berfungsi untuk menentukan isi atribut (variabel) dalam class. attribute. getter() merupakan method-method yang berfungsi untuk mendapatkan informasi dari class. Contoh : Berikut ini contoh method getter() dan setter() dalam kelas Dog yang kita definisikan sendiri. langsung tidak boleh.namaMethod([nilaiParamater]). lewat class tidak boleh Method jenis non static non static Method dasar ada dua jenis yaitu getter() dan setter(). method) static boleh lewat objek ataupun class. Berikut tabel aksesnya : method static static member (class. 12 .

d. } // deklarasi atribut // method getter Public void setWeight(int newWeight) { //method setter weight = newWeight.println(”Dog d’s weight is ”+d. } } Dan sebuah kelas bernama TesDog.getWeight()) //getter digunakan } } Setelah kedua kelas tersebut dicompile. // method setter digunakan System.java diatas. public int getWeight() { return weight.Sebuah kelas bernama Dog : public class Dog { private int weight. public class TesDog { public static void main(String[] args) { Dog d = new Dog(). maka hasil running dari program Tesdog tersebut : 13 .out.setWeight(42).java yang akan memanfaatkan kelas Dog.

out. i++) { hasil=hasil*a. } 14 .println("Infinity"). Overloading disini bukan overloading terhadap operator sebagaimana dalam bahasa C++. i <=b. } else { if ((a==0) && (b>0)) { hasil=0.lang. serta mengenali return valuenya. } else { if ((a != 0) && (b>0)) { for (int i=1. Java interpreter mampu membedakan method mana yang dieksekusi dengan mengenali tipe parameter yang dilewatkan ke method. Tugas dari method-method yang dioverloading tersebut berbeda. } else { if ((a==0) && (b<0)) { System.2. public class Perkalian { private double pangkat(int a. if (b==0) { hasil = 1. dengan nama yang sama.4. } } else { if ((a != 0) && (b<0)) { for (int i=1. int b) { double hasil = 1.*.0.1. i++) { hasil=hasil*a. i <=b. Contoh overloading terhadap method pangkat di bawah ini yang mmiliki parameter berbeda-beda : import java. Overloading pada Method Overloading adalah mendefinisikan dua atau lebih method di dalam satu kelas yang sama. namun dengan deklarasi parameter yang berbeda.

} private double pangkat(double a.0) && (b>0)) { hasil=0. i++) { hasil=hasil*a. double b) { double hasil = 1.0. 15 .hasil = 1/hasil. } } } } } return hasil. } else { if ((a != 0. } private double pangkat(int a. i<=b. int b) { double hasil = 1. } else { if ((a==0. i<=b. } else { if ((a==0) && (b<0)) { System.println("Infinity").out. if (b==0) { hasil = 1. } hasil=1/hasil. i++) { hasil=hasil*a.0.0) && (b>0)) { for (int i=1. } } else { if ((a != 0) && (b<0)) { for (int i=1. } } } } } return hasil.

if (b==0) { hasil = 1.out.out.println("Infinity"). } else { if ((a!=0) && (b>0)) { hasil=Math. } else { if ((a==0) && (b<0)) { System. double b) { double hasil = 1.0)) { 16 . } else { if ((a!=0) && (b>0)) { hasil=Math. } else { if ((a==0) && (b>0.exp(b*Math. } else { if ((a!=0) && (b<0.log(a)). } else { if ((a==0) && (b<0)) { System.log1p(a)). } } } } } return hasil. if (b==0) { hasil = 1.0)) { hasil=0.0)) { hasil=0.println("Infinity"). } else { if ((a!=0) && (b<0. } else { if ((a==0) && (b>0. } private double pangkat(double a.exp(b*Math.0)) { hasil=1/Math.exp(b*Math.0.log(a)).

pangkat(10.println(kali. System.exp(b*Math.println(kali.0625. } } } } } return hasil.5)).out.pangkat(0. System.out.0.out.8)).out.7.pangkat(0.pangkat(10.5. System.out. System. } public static void main(String[] args) { Perkalian kali = new Perkalian().log1p(a)).0.0)).out. System.308)).308)).println(kali.println(kali. } } Output program Pangkat tersebut : Penjelasan program Perhatikan pada sintaks berikut dari program : System. System.pangkat(6.println(kali.-3)). 17 .pangkat(4.2)).5)).println(kali.out. System.pangkat(0.println(kali.pangkat(0.out.println(kali.pangkat(0. System.hasil=1/Math.println(kali.0)).out.

Karena angka 10 dan 308 bertipe integer maka method yang dipanggil adalah method : pangkat(int a.pangkat(10. double b) 2. Jika pemanggilan method pangkat diubah menjadi : System.println(kali. this. double height) { this. height = newheight.Pemanggilan method pangkat diatas diikuti oleh parameter berupa angka 10 dan 308. public void setRectangle(double width. Contoh penggunaan yang eksplisit : class RectangleToy { private double width. Keyword ini dapat digunakan secara implisit maupun eksplisit. } } Pemanggilan attribute yang eksplisit. Maka method yang dipanggil adalah method : pangkat(double a. height.out. Pada contoh ini parameter di method setRectangle() menggunakan nama yang sama dengan attribute di kelas RectangleToy.2.2.308.5)). biasa digunakan untuk mengatasi penamaan yang sama.height = height. double newheight) { width = newwidth.width = width. Contoh pemanggilan implisit : class RectangleToy { private double width. height. Penggunaan keyword ini yaitu bila ada attribute (non static) dari suatu kelas akan digunakan method yang berada dalam kelas yang sama. public void setRectangle(double newwidth. int b). } } 18 . namun nama attribute tersebut dan nama parameter yang dilewatkan pada method tersebut SAMA. Keyword this This adalah objek yang langsung digunakan tanpa didahului proses instansiasi.4.

addressLine2 = newAddressLine2. String newAddress1. int age. int newAge) { name = newName. age = newAge. String addressLine1. default. String addressLine2. Constructor akan langsung dijalankan ketika objek dipanggil/dibentuk. Nama constructor sama dengan nama kelas. } Tujuan constructor dibuat adalah untuk melakukan inisialisasi yang diperlukan ketka suatu objek baru dibentuk. public PersonToy() { name = ” ”. addressLine1 = ” ”. city = newCity. Contoh constructor dan overloadingnya : class PersonToy { String name. protected. dan dapat diberi modifier akses (public. String newAddress2. addressLine2 = ” ”.5. Constructor Pada prinsipnya constructor adalah method yang tidak memiliki return value (secara implisit adalah instant dari kelasnya). city = ” ”. } } 19 . private).2. addressLine1 = newAddressLine1. age = 0. } // constructor public PersonToy(String newName. Bentuk umum pendefinisian constructor : [modifier] namaConstructor(tipe namaparameter) { constructorBody. String city. String newCity.

contohnya hubungan kepemilikan antara kelas dan objek. √ √ beda package. dalam bentuk tabel : Wilayah Akses public protected Di kelas yg sama √ √ Beda kelas. Wilayah modifier akses. √ x beda package. tidak di kelas turunan Wilayah modifier akses tersebut dapat diilustrasikan: default √ √ x x private √ x x x public protected default private Gambar 2. di kelas turunan Beda kelas. √ √ di package yg sama Beda kelas.6.2. Modifier Modifier untuk menentukan hubungan suatu unsur kelas dengan unsur kelas lainnya.1 Wilayah Modifier Akses 20 .

6.1. dan ketiga bebas tanpa didahului nama kelas atau nama objeknya. kelas lain masih dapat mengakses melalui method-method tersebut asal modifiernya public. Method dan attribute ada dua jenis. Final (no extended. pertama melalui nama kelasnya.2. Berarti attribute-attribute yang private hanya dapat diakses oleh methodmethod dalam kelas yang sama. Menyatakan bahwa suatu method tidak dapat dioverride oleh method lain. Private Menyatakan bahwa kelas tersebut tidak dapat diakses sama sekali oleh kelas lain bahkan juga tidak dapat diturunkan. Membentuk suatu attribute menjadi konstanta.3. Protected Menyatakan bahwa kelas/method/attribute tersebut dapat diakses oleh kelas lain yang berada dalam satu package atau kelas lain tersebut merupakan turunannya. Method dan attribute milik objek. no overrided) 21 .6. 2. Pertimbangan suatu attribute dideklarasikan private : 1. Method dan attribute milik kelas. diakses hanya melalui nama objeknya. Bila kelas lain tak memerlukan attribute tersebut. Public Menyatakan bahwa kelas/method/attribute tersebut dapat diakses oleh kelas lain dimanapun. kedua melalui nama objek yang diinstant dari kelasnya. Static (no need instanciation. no overrided) • • • Menyatakan bahwa suatu kelas tidak dapat menurunkan (extend) kelas lain. diakses melalui tiga cara. 2.2. yaitu method dan attribute milik kelas serta method dan attribute milik suatu objek. 2. Melindungi suatu attribute dari kemungkinan nilainya diubah oleh method lain dari kelas lain.6.

Abstract (no instanciation. Tidak dapat dibuat constructor yang abstract. Seperti method yang abstract. Contoh System.6. Kelas seperti ini biasanya merupakan root suatu struktur kelas.7.println() bersifat static artinya untuk memanggil method println() tidak harus dilakukan instansiasi dari kelas System. kondisi tersebut dapat diatur sehingga pada selang waktu tertentu hanya ada satu jalur eksekusi yang diijinkan di method yang synchronized (eksekusi dilakukan secara mutual exclusive). 2. Konsekuensi penggunaan sifat abstract : 1. 2. Synchronized (khusus modifier method) Pada lingkungan multithread. Tidak dapat dibuat method yang static dan abstract (kedua sifat sali ng kontradiktif).out.6.6. 2. 22 . dimungkinkan lebih dari satu jalui eksekusi yang berjalan di kode yang sama. menjadi sifat bersama dari semua objek dalam kelas tersebut (tidak memerlukan instansiasi objek untuk menjalankannya). Native (khusus modifier method) Modifier ini digunakan untuk memanggil/mengakses method yang ditulis dalam bahasa C/C++. 2. 3.6. implementasi method ini berada di file external (dalam folder yang sama). method yang native hanya berupa prototype. Tidak diijinkan membuat method yang private dan abstract (kedua sifat ini juga saling kontradiktif).8.Method static tidak bisa dioverride. Method main() harus memiliki modifier static. Modifier static artinya method dan attribute milik kelas. should be overrided) Abstract class adalah kelas murni (tanpa objek) dan tidak boleh memiliki objek (tidak boleh ada instansiasi) serta method-method yang abstract harus disempurna-kan oleh kelas turunannya melalui override.

sehingga tidak perlu selalu merujuk ke lokasi memori aslinya. Transient (khusus modifier attribute) Java memiliki konsep serialisasi. Attribute tersebut bersifat volatile.12. saat objek tersebut ditransformasikan menjadi stream. Bila terdapat lebih dari satu interface. yaitu kemampuan untuk mentransformasikan objek menjadi suatu stream.6. 2. atau dari suatu workstation ke workstation lainnya.11. dan sebaliknya. sedangkan yang diwariskan disebut subkelas. Volatile (khusus modifier attribute) Dalam manajemen thread. Extends Bila terjadi pewarisan. 2. Prinsip ini digunakan dalam aplikasi client-server.6. namun suatu objek dapat memiliki nilai attribute yang boleh berubah (bersifat transient).2. 23 . Salah satu ketentuan serialisasi adalah tidak boleh ada perubahan nilai attribute suatu objek. Caranya : [modifier1] class NamaSubKelas extends NamaKelasSuper { classBody } 2. karena nilainya rentan berubah bila diakses oleh lebih dari satu thread.10. Kelas yang memiliki modifier ini berarti merupakan subkelas dari suatu kelas super.9. gunakan tanda koma di antara interface-interface tersebut. sehingga objek dapat ditransfer dari suatu aplikasi ke aplikasi lainnya. kelas yang mewariskan method dan attributenya disebut kelas super.6. java dapat menyimpan nilai suatu attribute (yang sering diakses thread) menjadi cache value. Implements Kelas yang memilki modifier2 implements artinya kelas tersebut mengimplementasikan satu atau lebih interface.6.

protected. static dan final ! 24 . Soal Latihan 1. method c. Buatlah sebuah kelas yang terdiri dari attribute dan method. kelas b.7. modifier 2. 3. NamaInterface2 { classBody } 2. private. Buatlah contoh program yang mengandung overloading method ! 5.Caranya : [modifer] class NamaKelas implements NamaInterface1. Apa yang dimaksud dengan overloading method? 4. Kemudian buat pula kelas yang mengandung method main() untuk mengakses kelas tersebut. Apakah pengertian dari : a. Jelaskan yang dimaksud dengan modifier public.

penggunaan. Deklarasi dan Pembuatan/Instansiasi Objek Ilustrasi deklarasi objek : MyClass mc. Setelah dibentuk oleh suatu class maka objek akan terus berada di memory dan siap dipakai sampai kemudian dihancurkan. kemudian penghancuran. terlebih dahulu harus dideklarasikan. setelah itu mengalami pembuatan. Ilustrasi pembentukan objek : mc = new MyClass() MyClass MyClass ~var1 : int ~var2 : String +method1:int +method2:void 25 . OBJEK Pada prinsipnya objek adalah sebuah pointer. dalam deklarasi mc masih berupa pointer dan belum menunjuk alokasi memori.BAB III. Siklus Hidup Objek Suatu objek di java. Objek dibentuk/dicetak oleh sebuah class java. MyClass Ditentukan variabel mc dengan tipe MyClass. Proses pembentukan objek dari suatu class ini disebut dengan instansiasi (instance). Keyword new diperlukan untuk membentuk objek tsb sekaligus memanggil constructor.

Cara2 : NamaKelas namaObjek = new NamaConstructor(). Deklarasi dan pembuatan objek boleh dipisah di kelas yang berbeda. tujuannya hanya untuk menjalankan constructor.namaMethod(). Artinya dua proses deklarasi dan pembuatan dijadikan satu. Cara4 : New NamaKelas(”…. sedangkan pembuatan/instansiasi objek berada pada kelas2. // pembuatan Deklarasi dan pembuatan objek boleh jadi satu dalam suatu kelas. 26 .. misalnya deklarasi objek di method main() pada kelas1.Ada 4 cara untuk melakukan deklarasi dan pembuatan objek (ingat NamaKelas sama dengan NamaConstructor). Cara ini objek diinstansiasi dengan nama kelas sekaligus menjalankan method tertentu dalam objek tersebut. // deklarasi namaObjek = new NamaConstructor(). Cara inilah yang nanti akan banyak kita pakai dalam mempelajari materi buku ini. yaitu : Cara1 : NamaKelas namaObjek. Cara ini objek diinstansiasi tanpa nama. Cara3 : new NamaConstructor().”).

Program di bawah ini menerapkan konsep berorientasi objek. Penghancuran Objek Teknik yang digunakan java untuk menangani objek yang sudah tidak diperlukan lagi disebut garbage collection. berikut ini adalah contoh program pendek untuk menghitung luas persegi panjang dengan rumus Luas=panjang* lebar.Penggunaan Objek Penggunaan objek sebenarnya untuk memanggil method yang merupakan sifat objek tersebut. 3. 27 . dan menghancurkan obyek. dimana class pembentuk objek adalah class PersegiPanjang. sehingga secara otomatis dihancurkan oleh garbage collector (bukan oleh programmer). Objek yang sudah tidak diperlukan lagi akan terdeteksi oleh JVM. Bentuk umum : namaObjek. Contoh Kasus Obyek Untuk memberikan ilustrasi yang jelas tentang bagaimana membuat sebuah obyek.namaMethod([daftarNilaiParameter]).5. menggunakan obyek.

} private double hitungluas(double p.setLebar(20).lebar = lebar.println("Luas : "+ pp. private double lebar. pp.getLuas()). lebar = 0. Setelah proses berhasil maka pp akan memiliki method dan atribut sesuai dengan yang ada dalam class PesegiPanjang. } } Penjelasan program : Proses pembentukan objek (instansiasi) ada pada baris 28.1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 class PersegiPanjang{ private double panjang. } public static void main(String[] args) { PersegiPanjang pp = new PersegiPanjang(). sedangkan PersegiPanjang adalah nama class pembentuk objek. System. public PersegiPanjang() { panjang = 0.panjang = panjang. } public void setPanjang(double panjang) { this. double l) { return p*l. } public double getLuas() { return hitungluas(panjang. dimana pp adalah nama objek yang hendak dibentuk. } public void setLebar(double lebar) { this. Jika program dijalankan maka hasilnya adalah sebagai berikut : 28 . pp.setPanjang(10).out. lebar). private double tinggi.

Sebutkan 2 dari 4 cara untuk melakukan deklarasi dan pembuatan objek ! Berikan penjelasan dari masing-masing cara tersebut ! c. Apa yang dimaksud dengan objek? Berikan contohnya (minimal 5) ! b. Soal Latihan a.C. Tuliskan bentuk umum dari objek ! 29 .

Mengkompilasi kelas-kelas sesuai dengan packagenya masing-masing. Membuat struktur dan nama direktori yang sesuai dengan struktur dan nama package. Menggambarkan kelas-kelas yang dibungkusnya 3. Pengertian Package Package adalah sarana/cara pengelompokkan dan pengorganisasian kelas- kelas dan interface yang sekelompok menjadi suatu unit tunggal dalam library. Syarat nama package : 1. 2. Harus unik (berbeda dengan nama package standard) 30 .2. Mendeklarasikan dan memberi nama package. Pengaruh Package terhadap Method main() Kelas yang mengandung method main() memiliki syarat tidak berada dalam suatu package. 4. dan hirarki posisi foldernya di atas package yang diimport. Secara fisik package berupa folder yang berisi file-file class yang berfungsi khusus.BAB IV PACKAGE 4. 4. Diawali huruf kecil 2. 4. Bentuk umum deklarasi package : package namaPackage.4.1. Package juga mempengaruhi mekanisme hak akses ke kelas-kelas di dalamnya. ke library manakah suatu kelas dikompilasi dan dirujuk. 3. Membuat Package Ada tiga langkah untuk membuat package : 1.3. Deklarasi tersebut akan memberitahukan kompilator. Mendeklarasikan dan Memberi Nama Package Dekalrasi package harus diletakkan pada bagian paling awal (sebelum deklarasi import) dari source code setiap kelas yang dibungkus package tersebut.

4.namaPackage3]]. Menggunakan Package Ada dua cara menggunakan suatu package yaitu : 1.class).swing (berisi kelas-kelas untuk membangun aplikasi GUI) java.6. java. 2. Contoh package standard : java. Maka tidak diperlukan import.lang (berisi kelas-kelas fundamental yang sering digunakan).5. Kelas yang menggunakan berada dalam direktori (package) yang sama dengan kelas-kelas yang digunakan. Kemudian tempatkan kelas-kelas tersebut ke direktori yang bersesuaian (mirip seperti menyimpan file-file ke dalam folder). Membuat Struktur Direktori Pada langkah ini.7.awt dan javax. Kelas yang menggunakan berada dalam direktori (package) yang berbeda dengan kelas-kelas yang digunakan.awt. Contoh hirarki package di JDK : package java. sehingga dapat dibuat hirarki package. Jika semua class telah dikompilasi maka package tersebut siap digunakan. Merepresentasikan path dari package tersebut. buatlah direktori menggunakan file manager (di windows menggunakan explorer) sesuai struktur package dari langkah sebelumnya. Compile dan Run Kelas dari suatu Package Selanjutnya masing-masing kelas tersebut dalam package tersebut dikompilasi menjadi byte code (*.namaPackage2[. Bentuk umum pernyataan package multilevel : package namaPackage1[.image. 5. 4.4. Maka pada awal source code di kelas pengguna harus mencantumkan : 31 .io (berisi kelas-kelas untuk proses input output) 4. Harus sama dengan nama direktorinya. Package dapat bersarang di package lain.

Apa pengertian dari package? 2. didaftarkan sebagai salah satu nilai variabel lingkungan yang bernama Classpath.8.NamaKelas. Soal Latihan 1. 4. Apa fungsi package? 3.swing. Buat sebuah aplikasi package dengan beberapa file! Kemudian buatlah ilustrasi penempatan file-file program dari aplikasi package yang dibuat tersebut! 32 .9. 4. Setting Classpath Path hirarki package.*. Sebutkan langkah-langkah yang dibutuhkan untuk membuat package! 4.*.DecimalFormat. import javax.import namaPackage. Bagaimana bentuk umum package? Dan bagaimana pula bentuk umum pernyataan package multilevel? 5.text. Contoh : import java. atau import namaPackage. Classpath diset dengan aturan : berawal dari drive (C:\ atau D:\) sampai dengan satu tingkat sebelum kita mendeklarasikan package.

java public class PersegiPanjang{ private double panjang. lebar = 0. constructornya. Attribute maupun method disembunyikan dengan cara memberikan modifier private. Di bawah ini adalah contoh program Information Hiding dan Encapsulation atau hanya perlu tahu parameter milik constructor- PersegiPanjang. user hanya diberitahu melalui manual cara menggunakan produknya.2. // attribute yg di encap private double tinggi. 33 . Latar Belakang Encapsulation Vendor perangkat lunak computer merahasiakan source code produknya. double l) { // di hide return p*l. Method dalam kelas yang sama. ENCAPSULATION. sedangkan method masih dalam kelas yang sama. 1. // attribute yg di encap public PersegiPanjang() { panjang = 0. } private double luas(double p. 5. Information Hiding dan Encapsulation Information Hiding adalah menyembunyikan attribute dan method suatu objek dari objek lain. INHERITANCE. // attribute yg di encap private double lebar. yang memberikan nilai pada attribute private disebut method setter. yang mengambil nilai dari attribute private disebut getter.BAB V INFORMATION HIDING. Programmer java pun tidak perlu mengetahui bagaimana rinci source code dari modul interface referensi (API). Encapsulation adalah menyembunyikan atribute suatu objek dari objek lain. programmer hanya perlu tahu return value dan parameter milik method-methodnya. DAN POLYMORHISM 5.

out.getLuas()). pp. } public double getPanjang() { return panjang. dan kelas B 34 . System. Inheritance Semua attribute dan method dari suatu kelas super dapat diwariskan ke subkelas.getPanjang()).panjang = panjang. lebar).getLebar()). System. jika kelas C merupakan turunan kelas B.setLebar(20). } public double getLebar() { return lebar.lebar = lebar. } } MainPersegiPanjang.} public void setPanjang(double panjang) { this. Dalam hirarki kelas. } } Outputnya adalah : 5.println("Panjang : "+ pp.3.println("Lebar : "+ pp. } public void setLebar(double lebar) { this.out.setPanjang(10). System. } public double getLuas() { return luas(panjang. pp.println("Luas : "+ pp.java public class MainPersegiPanjang { public static void main(String[] srgs) { PersegiPanjang pp = new PersegiPanjang().out.

} public static void main(String[] args) { KelasSuper oks = new KelasSuper().methodAsli(). 5. oks. seorang programmer ingin memodifikasi suatu attribute atau method yang dimanfaatkan subkelas. Dengan inheritance. maka otomatis attribute dan method kelas A juga diwariskan kelas C. tipe parameter.println("Method milik KelasSuper jalan"). ataupun lingkungan pemrosesan datanya. Modifikasi yang dilakukan. } } Outputnya adalah : 35 .4. Di bawah ini adalah contoh program overriding : KelasSuper. Bentuk pewarisan : [modifier] class namaSubKelas extend namaKelasSuper { // classBody } 5.merupakan turunan kelas A.java class KelasSuper { public void methodAsli() { System. maka semua attribute dan method yang pernah dibuat dan bituhkan kelas lain. maka dilakukan modifikasi attribute dan method tersebut pada kelas supernya. Manfaat Pewarisan Tanpa inheritance. Overrriding Attribute dan Method Overriding adalah kemampuan suatu subkelas untuk memodifikasi attribute dan method milik kelas supernya (tentu yang memiliki sifat private atau final tidak bisa dilakukan overriding). harus ditulis ulang seluruhnya. misalnya jumlah parameter. tipe return value.5.out.

Menggunakan Method dan Constructor Kelas Super Java tidak memperbolehkan subkelas memanggil contructor milik kelas supernya dengan cara hanya memanggil namanya. super.java class SubKelas extends KelasSuper { public void methodAsli() { System. super(tipe parameter). 36 . osk.methodPemanggil().methodAsli().SubKelas. // yg dipanggil milik kelas super } public static void main(String [] args) { SubKelas osk = new SubKelas(). } public void methodPemanggil (){ System.println("Method pemanggil methodAsli jln").println("Method yg overrided jalan").methodAsli().6. osk.out. } } Outputnya adalah : 5.out. Cara yang benar : super().

namaMethod(). namun contoh berikut memvisualisaikan method respon() nama sama. // perhatikan contoh pada 5. } } 37 .").").. akan memanggil constructor default milik kelas supernya.Cara yang pertama.!"). namun pada kelas yang berbeda dapat memilki isi methoid yang berbeda pula tergantung kelasnya.5 Sehingga dapat dibedakan namaMethod() milik siapa yang dipanggil. Method-method overloading masih dalam kelas yang sama. maka cara pemanggilan method (non static) milik kelas super : super.. Jika ada overriding. Contoh pertama : EkspresiWajah.java class EkspresiWajah{ public String respons() { return("Perhatikan ekspresi wajah saya"). akan memanggil constructor kelas supernya yang sesuai dengan parameter tersebut.. } } class Marah extends EkspresiWajah{ public String respons() { return("Hai kurang ajar.7. misal nama methodnya namaMethod(). 5. Polymorphism Polymorphism artinya bersifat poly morphy (memiliki banyak bentuk). sedangkan cara kedua. } } class Gembira extends EkspresiWajah{ public String respons() { return("ha ha ha. } } class Sedih extends EkspresiWajah{ public String respons() { return("hik hik ngeee ngeee ngeee.

System.respons()).println("Ekspresi[2]: "+arrEkspresi[2]. protected Employee(String n. System.respons()).println("Ekspresi[0]: "+arrEkspresi[0]. arrEkspresi[1] = objGembira. } 38 . arrEkspresi[3] = objMarah.out.println("Ekspresi[1]: "+arrEkspresi[1]. Marah objMarah = new Marah(). System.java class MainEkspresiWajah{ public static void main(String args[]) { EkspresiWajah objEkspresi = new EkspresiWajah(). EkspresiWajah[] arrEkspresi = new EkspresiWajah[4]. private double salary.respons()).out. double s) { name = n. arrEkspresi[2] = objSedih.println("Ekspresi[3]: "+arrEkspresi[3].respons()).MainEkspresiWajah. } } Output contoh pertama : Contoh kedua : Employee.java public class Employee { private String name. Sedih objSedih = new Sedih(). salary = s.out. arrEkspresi[0] = objEkspresi. Gembira objGembira = new Gembira(). System.out.

java public class View { public static void main(String[] args) { Employee e = new Employee("Ali".out."Informatika").println("Coba di Manager"). } } Outputnya adalah : 39 .println("Data employee :\n"+e. } public void cetak() { System.protected String getDetails() { return "Name : "+name+ "\nSalary : "+salary.println("Data manager :\n"+em. System.out. salary).out.getDetails()+"\nDepartment : "+getDepartment().getDetails()). String dep) { super(nama.1200000).out. em.getDetails()). } public String getDepartment() { return department.1200000. } } Manager. } public void cetak() { System. } public String getDetails() { return super.println("Coba di Employee"). double salary.java public class Manager extends Employee { private String department. System.cetak(). } } View. public Manager(String nama. Employee em = new Manager("Ali". department = dep.

kemudi(stang). Buatlah class sederhana yang di dalamnya terkandung information hiding dan encapsulation! 40 . dimana kendaraan mempunyai : Roda. sadel. dan mempunyai action : jalankan. rem Buatlah subclass Motor yang inherit superclass Kendaraan. dan mempunyai method tambahan jumping. Prioritasnya adalah kelas Manager kemudian kelas Employee. 2.Catatan : Kalau method cetak() di kelas Employee dan kelas Manager ada. dengan atribut jumlahroda=2. Buatlah sebuah superclass yang bernama Kendaraan. Buatlah subclass Mobil yang inherit superclass Kendaraan. maka yang dijalankan adalah method milik kelas Manager. Soal Latihan 1.8. 5. dengan attribute jumlahroda=4 dan mempunyai method tambahan mudur.

yaitu Luar. Menggunakan Kelas Inner Kelas Inner lazim digunakan untuk membuat handler di method main() pada suatu aplikasi GUI. Kelas Inner berguna untuk mendukung suatu proses yang akan dijalankan oleh kelas luarnya. atau protected. Kalau objek kelas Luar adalah a. Kelas sisipan ini disebut kelas Inner. Luar. KELAS ABSTRACT. DAN INTERFACE 1.Inner b = a. Handler merupakan bagian program yang akan memproses event-event yang dipicu ketika user berinteraksi dengan komponen-komponen GUI. ataupun private.class Kelas Inner boleh tidak diberi nama.class. Kelas Inner Java membolehkan programmer mnyisipkan suatu kelas ke dalam kelas lainnya. 2. dan objek kelas Inner adalah b. (Artinya kelas Inner tidak dapat mengakses attribute ataupun method non static milik kelas Luarnya). yang disebut Anonymous Inner. atau default. Untuk mengakses referensi this dari kelas luar digunakan bentuk NamaKelasLuar. Beberpa ketentuan kelas Inner : a) b) c) d) e) Kelas Luar yang mengandung kelas Inner. maka sintaks yang benar adalah : Luar a = new Luar(). bila dikompilasi akan menghasilkan dua file *.this. maka objek milik kelas Inner dapat dibuat sendiri tanpa melalui kelas Luarnya.class dan Luar$Inner.new Inner(). Kelas Luar ikut bertanggung-jawab dalam instansiasi kelas Inner (yang non static) . f) Jika kelas Inner bersifat static. Kelas Inner dapat diberi modifier akses public.BAB VI KELAS INNER. Contoh program berikut adalah aplikasi Button sederhana dengan handlernya dari kelas Inner : 41 .

setSize(275. btn. "anda telah menekan" +ae. import java.*. public DemoJButtonInner (){ super("Demo JButton Inner Class"). } }). c.awt. } public static void main(String args[]) { DemoJButtonInner app = new DemoJButtonInner().*.addActionListener(handler). } // kelas Inner untuk Event Handling pada button private class ButtonHandler implements ActionListener { public void actionPerformed(ActionEvent ae) { JOptionPane. Container c = getContentPane().addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent we) { System.setLayout(new FlowLayout()). show().add(btn). } } } Output : 42 . btn = new JButton("Button"). import javax.exit(0).showMessageDialog(null.swing. public class DemoJButtonInner extends JFrame { private JButton btn.DemoJButtonInner. c.getActionCommand()+"\n" +"Handler button ini pakai kelas Inner"). 100). // membuat event handler ButtonHandler handler = new ButtonHandler().awt.event.*.java import java. app.

misal kelas Dosen dapat diinstansiasi menjadi budi. kelas seperti inilah yang disebut kelas abstract. kelas Hewan. Analogi Kelas yang Abstract Suatu kelas dapat diinstansiasi menjadi objek.3. namun tidak mungkin dapat menginstansiasi kelas MahlukHidup. Analogi Method yang Abstract Bila kelas MahlukHidup mempunyai method bernafas.1. insang. method seperti inilah yang disebut method abstract. yang berisi daftar deklarasi method (seluruh method belum memiliki implementasi). heru.1. dan kelas Manusia. 3. atau stomata). maka tidak dapat ditentukan cara suatu mahluk hidup tersebut bernafas (dengan paru-paru. heri. 4. Interface Interface adalah kelas yang paling abstract. 4. sebab kelas tersebut terlalu umum (abstract). Analogi Interface Interface dapat dianalogikan sebagai kontrak/profesi/peran yang dipakai oleh setiap kelas. 43 . Dibutuhkan kelas turunan yang lebih khusus. Dibutuhkan kelas turunan yang khusus dan method override dari method yang abstract.2.

5. 44 .Dalam kehidupan nyata dapat diketahui ada manusia yang bekerja sebagai da’i. Deklarasi Interface Bentuk umum deklarasi: [modifier] interface NamaInterface { // deklarasi konstanta // deklarasi method } Catatan : modifier static tidak boleh digunakan dalam interface 6. harus dibuat kelas yang merupakan turunan kelas manusia yang mengimplementasikan interface dosen. pengacara. juga harus memiliki method yang sesuai dengan pekerjaannya.nama = nama. boolean terbang) { this. tentara. Dengan demikian untuk membuat objek seorang budi bekerja sebagai dosen. protected int jumKaki. protected boolean bisaTerbang = false. Implementasi Interface Bentuk umum implementasi : [modifier] class NamaKelas implements NamaInterface { // penggunaan konstanta // implementasi method } 7. dan sebagainya. tentunya manusia-manusia tersebut selain harus memiliki method standard sebagai seorang manusia. int kaki. Contoh Abstract Class dan Interface Hewan. public Hewan(String nama. penyanyi.java abstract class Hewan { protected String nama. dosen.

nyam"). } public static void main(String[] args) { Perkutut p = new Perkutut(). cuit").out. } Perkutut.out.2.java Interface Manusia { public void menyanyi(). cuit. public void ketawa(). } public void bersuara() { System. } public abstract void bersuara(). System.println("bisa terbang : "+bisaTerbang).bersuara().println("nama : "+nama).println("nyam. p.true). } } Outputnya adalah : 45 .isHewan(). } } Manusia.println("\ncuit. nyam.java class Perkutut extends Hewan { public Perkutut() { super("perkutut".jumKaki = kaki. public static void makan() { System.println("jumlah kaki : "+jumKaki). p.out.out. } public void isHewan() { System. System.out. bisaTerbang = terbang.

Sapi.java
class Sapi extends Hewan { public Sapi() { super("sapi", 4, false); } public void bersuara() { System.out.println("\nemoh…,emoh.."); } public static void main(String[] args) { Sapi s = new Sapi(); s.isHewan(); s.bersuara(); } }

Outputnya adalah :

SpongeBob.java
class SpongeBob extends Hewan implements Manusia { public SpongeBob() { super("sponge bob", 2, false); } public void bersuara() { System.out.println("\nhallo patrict.."); } public void menyanyi() { System.out.println("nye, nye, nye, wik, wik, wik"); } public void ketawa() { System.out.println("kek, kek, kek"); } public static void makan() { System.out.println("uenak tenan.."); } public void makan2() { super.makan(); } public static void main(String[] args) { SpongeBob s= new SpongeBob(); s.isHewan();

46

s.bersuara(); s.menyanyi(); s.ketawa(); s.makan2(); Hewan.makan(); makan(); } }

Outputnya adalah :

8. Interface vs Class Perbandingan interface dengan class : komponen definisi kandungan informasi instansiasi interface daftar deklarasi method isi/implementasi methodnya berada interface ini tidak boleh di semua luar class model objek mendefinisikan attribute dan method secara rinci dan konkret boleh

9. Interface vs Inheritance Inheritance adalah proses pewarisan attribute dan method dari satu kelas super kepada satu/lebih subkelas. Bagaimana kalau dibutuhkan suatu kelas yang attribute dan methodnya berasal dari lebih dari satu kelas super ? disinilah keterbatasan inheritance, namun interface

47

berperan, karena dalam interface bisa dimasukkan method-method dari beberapa library referensi tanpa harus menurunkannya.

Syntax kelas yang menggunakan lebih dari satu interface :
[modifier] class NamaInterface2, … { //interfaceBody } NamaKelas implements NamaInterface1,

Nama-nama interface tersebut dapat dijadikan tipe data attribute ataupun tipe data parameter dalam kelas yang menggunakan. 10. Interface vs Abstract Class Interface dan kelas abstract memilki kesamaan sama-sama tidak boleh instansiasi objek. Perbedaan interface dangan kelas abstract adalah sebagai berikut : Komponen Attribute Method Syntax interface hanya berupa konstanta berupa deklarasi seluruhnya abstract (berupa deklarasi) Boleh sebagian yg diimplementasikan 11. Aplikasi Interface Interface sering digunakan untuk menambah event handling pada program aplikasi GUI, perhatikan contoh berikut : abstract class bebas memilki tipe data apa saja boleh deklarasi, boleh berupa method lengkap sebagian abstract Method yg abstrak harus semua diimplementasikan subclassnya

AppJButton.java

48

*.exit(0).awt. public class AppJButton extends JFrame implements ActionListener { private JButton btn. public AppJButton() { // constructor super("Demo JButton Interface"). btn = new JButton("Button").*.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent we) { System.swing. 100). import java. show().awt.showMessageDialog(null. Container c = getContentPane().setLayout(new FlowLayout()).*.import java. c. app. c.getActionCommand()+"\n"+ "Handler Button ini mengimplementasikan interface"). } public static void main(String args[]) { AppJButton app = new AppJButton().event. } }). } } Outputnya : bila komponen berupa tombol Button di click akan muncul window pesan : 49 . import javax."Anda telah menekan: "+ae. btn. setSize(275.add(btn).addActionListener(this). } public void actionPerformed(ActionEvent ae) { JOptionPane.

apabila suatu interface memiliki atribut.D. Bentuklah kode program yang merepresentasikan bagan dibawah ini ! Manusia Superhero o 50 . Rangkuman Inner kelas adalah satu atau beberapa kelas yang disisipkan pada kelas lainnya yang berguna untuk mendukung suatu proses yang akan dijalankan oleh kelas luarnya. namun tanpa modifier abstract. maka atributnya akan berlaku sebagai konstanta (static final). Soal Latihan 1. Dengan menggunakan konsep inner class. Abstract class biasanya dijadikan parent atau super class dari kelas-kelas yang dapat membuat object. yang jika tombol tersebut ditekan akan muncul frame anak yang memuat gambar di dalam frame induk seperti contoh berikut : 2. E. Abstract class adalah suatu kelas yang dinyatakan abstract yang umumnya memiliki satu atau lebih abastract method. Abstract method adalah suatu method yang belum memiliki implementasi dan menggunakan modifier abstract. buatlah program yang memunculkan sebuah frame induk yang memiliki sebuah button sebagai elemen. Sedangkan interface adalah kelas yang berisi method-method tanpa implementasi. Ada beberapa bentuk inner kelas seperti yang telah disebutkan sebelumnya.

Burung Superman Gatotkaca 51 .

exception merupakan objek dari subkelas yang diturunkan dari kelas Throwable. Kelas Throwable ini terdapat dalam package java. Kelas ini mengandung dua sub kelas berikut : a. b.lang.BAB VII EXCEPTION HANDLING 7. Kelompok Kelas Exception 52 . Exception digunakan sebagai sarana untuk melaporkan jenis kondisi kesalahan saat program dijalankan. Jenis-Jenis Exception Object Throwable di java.2.object Error Exception IOException RuntimeException AWTException Dalam java. contoh kelas: LinkageError. run time error. 7. dan mengendalikannya agar run time error tersebut tidak mengakibatkan eksekusi dihentikan (statement setelahnya tetap dieksekusi).object.1. dan AWTError.lang. VirtualMachineError. Kelompok Kelas Error Error ini bersifat fatal sehingga sistem tidak dapat dimanipulasi. dan logic error (ketika output belum sesuai dengan yang diharapkan). Pendahuluan Error (kesalahan) dalam pemrograman dibagi dalam tiga katagori yaitu syntax error (muncul saat kompilasi).

namun ada pula exception yang tidak diperiksa interpreter. Disamping itu programmer dibolehkan membuat exception sendiri dengan cara extends atau implements kelas Exception. Ada kelompok RuntimeException yang diperiksa oleh interpreter. apakah akan ditangani atau dilempar. Tabel Checked Exception No 1 2 Exception ClassNotFoundException CloneNotSupportedException Deskripsi Kelas tidak ditemukan melakukan clone objek yang tidak mengimplementasikan interface Cloneable Pengaksesan ke kelas ditolak Menciptakan objek dari kelas abtract ataupun dari interface Thread telah diinterupsi oleh thread lain Field yang diminta tidak ada Method yang diminta tidak ada 3 4 5 6 7 IllegalAccessException InstantiationException InterruptedException NoSuchFieldException NoSuchMethodException Tabel Uncheked Exception N o 1 2 3 4 5 6 Exception AritmaticException ArrayIndexOutBoundsException ArrayStoreException ClassCastException IllegalArgumentException IllegalMonitorStateException Deskripsi Kesalahan Aritmatik seperti pembagian dengan nol Index array di luar batas Pemberian nilai ke elemen array tidak sesuai dengan tipenya Cast yang tidak sah Argument illegal Operasi monitor illegal seperti menunggu di thread yang tidak terkunci 53 .Jenis error ini masih dapat diantisipasi dengan menyisipkan statement tambahan untuk mendeteksi statement penyebab dan jenisnya.

throw namaObjek. ClassNotFoundException { } public void beriPinjaman() throws TolakException{ } b.7 8 IllegalStateException IllegalThreadStateException Lingkungan atau aplikasi state yang tidak benar Operasi yang diminta tidak kompatibel dengan state thread saat itu Indeks di luar batas Array diciptakan dengan ukuran negatif Penggunan null yang tidak sah Konversi yang tidak sah dari string ke format numerik Melanggar aturan security Index di luar batas string Ditemukan operasi yang tidak didukung 9 10 11 12 13 14 15 IndexOutOfBoundException NegativeArraySizeException NullPointerException NumberFormatException SecurityException StringIndexOutOfBounds UnsupportedOperationException 7.3. Mendeklarasikan Exception Bentuk umum : [modifier] returntype namaMethod() throws tipeException{ } Contoh : public void operasiMatematika() throws IOException. Melempar Exception Bentuk umum : TipeException namaObjek = new TipeException(). Mengantisipasi Exception Diperlukan tiga langkah berikut ini untuk mengantisipasi exception : a. Diringkas menjadi : 54 .

kemudian blok finally dieksekusi. Diringkas menjadi : throw new TolakException(”lagi pelit!”). Contoh : TolakException t = new TolakException(”lagi pelit”). c. Bentuk umum : try { // pemanggilan method yg mungkin menghasilkan exception // blok statement yg mungkin menghasilkan exception } catch(TipeException1 namaObjek) { // penanganan salah-satu jenis exception } catch(TipeException2 namaObjek) { // penanganan salah-satu jenis exception } catch(TipeExceptionN namaObjek) { // penanganan salah-satu jenis exception } finally { // blok yang harus dieksekusi } Jika pada blok try tidak terjadi exception. dapat mempunyai beberapa blok yang menangkap setiap jenis exception. 55 . throw t. Jika terjadi exception pada blok try. atau throw new TipeException(). maka blok catch tidak ada yang dieksekusi dan segera blok finally yang dieksekusi. maka salah satu blok catch dieksekusi. Menangkap Exception Penangkapan runtime error.throw namaObjek TipeException().

} catch(Exception1 obj1) { proses Obj1.lang. pertama jika tidak terjadi exception (tidak ada blok catch yang dieksekusi).7. ketiga jika terjadi exception pada blok tersarang.Throwable. kedua jika exception terjadi pada blok method tunggal (salah-satu blok catch dieksekusi).5. Method B { … try { …. } … } 7. 2 toString() 3 4 getLocalizedMessage() printStackTrace() 56 . Menampilkan Pesan Exception Beberapa method standard yang dapat digunakan untuk menampilkan pesan exception merupakan anggota dari kelas java.4. Mekanisme Mengantisipasi Exception Ada tiga kemungkinan skenario exception. Method A { … try { … memanggil method B. dan hanya mencetak informasi tentang objek Throwable } } … } catch(Exception2 obj2) { proses Obj2. No 1 Method Pesan Exception getMessage() Deskripsi Mengembalikan nilai string yang berisi pesan rinci tentang objek Throwable yang mengalami exception Mengembalikan nilai string yang berisi pesan singkat tentang objek yang mengalami exception Menampilkan pesan exception lokal (yang terjadi pada subkelas saja) Method ini bersifat void.

err.println("Sebelum pembagian").7. } } Output Contoh1 : Terlihat hasil output contoh1 ternyata statement sesudah pembagian tidak pernah dieksekusi. bahkan program ini memberikan perluang terjadinya hang saat eksekusi.out. // } // catch (Throwable e) { // System.println(5/0).out. Contoh Aplikasi Exception Handling Contoh1 : public class BagiNol { public static void main(String[] args) { System.err.println(5/0).println("Sebelum pembagian").out.out.println("Terjadi pembagian dengan nol").println("Pesan dari Sun : "+e.getMessage()).6. // } System.out.println("Sesudah pembagian"). // System. } 57 . program tersebut diperbaiki dengan contoh2 berikut ini : Contoh2 : public class BagiNol { public static void main(String[] args) { System. try { System. // try { System.

} 58 . System. } System. } } public interface Kreditor { public void beriPinjaman(int vduit) throws TolakException.println("Pesan dari Sun : "+e.getMessage()).println("Terjadi pembagian dengan nol").err. Contoh3 : public class TolakException extends Exception{ public TolakException(String pesan) { super(pesan).println("Sesudah pembagian"). } public class Orang { protected String nama. bahkan statement berikutnya setelah statement penyebab error tetap dieksekusi. } } Output Contoh2 : Terlihat output contoh2 bahwa error tidak mengakibatkan terhentinya eksekusi program.out.catch (Throwable e) { System.err. } public String getNama() { return nama. public Orang(String vnama) { nama = vnama.

public OrangKaya(String vnama.ngomong("Asset bank sekarang Rp " + asset). asset = vasset. manager. public Bank(String vmanager. } } } 59 . ngomong("Duit saya sekarang Rp " + duit). throw t. } public void beriPinjaman(int vduit) throws TolakException { if (vduit < 1000000) { asset = asset . int vasset) { manager = new Orang(vmanager). } else { ngomong("Saya tidak akan memberikan pinjaman!"). TolakException t = new TolakException("Orang Kaya lagi pelit!").println(nama + " ngomong: " + message). } } } public class OrangKaya extends Orang implements Kreditor { private int duit. ngomong("Saya memberikan pinjaman Rp " + vduit).vduit. duit = vduit.vduit. } else { manager.ngomong("Bank tidak akan memberikan pinjaman!"). } } public class Bank implements Kreditor { private Orang manager.public void ngomong(String message) { System. } public void beriPinjaman(int vduit) throws TolakException{ if (vduit < 500000) { duit = duit . private int asset. throw new TolakException("Bank lagi pelit!").ngomong("Bank memberikan pinjaman Rp " + vduit). manager.out. int vduit) { super(vnama).

600000).beriPinjaman(vduit). } public void pinjamDuit(Kreditor vkreditor. ngomong("Saya mendapatkan pinjaman Rp " + vduit).println("Nggak pernah jalan!"). 5000000). OrangMiskin badu = new OrangMiskin("Badu".pinjamDuit(bankRut.println(e. 2000000).public class OrangMiskin extends Orang { private int utang. ngomong("Malangnya nasibku. public OrangMiskin(String vnama.out. try { badu.pinjamDuit(amir. saya telah ditolak!"). 1500000). } } } public class PinjamApp { public static void main(String args[]) { Bank bankRut = new Bank("Cesar". int vutang) { super(vnama). } catch (TolakException e) { System. 800000). badu. int vduit) { try { vkreditor. utang = utang + vduit.getMessage()). } } } Outputnya : 60 . OrangKaya amir = new OrangKaya("Amir". } catch (Exception e) { System. ngomong("Utang saya sekarang Rp " + utang).out. utang = vutang.

Soal Latihan 1.7.7. 61 . Buatlah suatu program manajemen memori yang meghitung memori yang kita gunakan pada sebuah file eksekusi ! Sisipkan penanganan exception untuk error-error yang mungkin terjadi.

int indexOf(int i. int mulaiIndex). // HELL Ada 33 method yang digunakan untuk melakukan 8 macam operasi pada kelas String. 7. String(StringBuffer buffer). int count). // cara5 String(byte ascii[]. //cara6 62 . int tooffset). // cara7 Contoh penggunaan Constructor tersebut : String aString1 = new String(). int offset. int length. // cara1 String(String value). 2. boolean startsWith(String prefix).’E’. int indexOf(int i).BAB VIII KELAS-KELAS DASAR Dalam pemrograman java.0. 1. // cara4 String(char value[]. Sesuai dengan kuantitas constructornya. // cara3 String aString4 = new String(aArray. int indexOf(String str).println(aString4). boolean startsWith(String prefix. // cara2 char aArray[] = {’H’. 4.’L’. String aString3 = new String(aArray).’O’}. ada 7 cara untuk membuat objek String: String(). 5. char charAt(int index). suatu string adalah objek. int hibyte. boolean endsWith(String suffix). 6.lang.4). Ada dua kelas string yang akan dibahas yaitu kelas String dan kelas StringBuffer. // cara1 String aString2 = new String(”haii…”). 8. yaitu : 1. 3. int hibyte).out. // cara3 String(byte ascii[]. int offset. int count).’L’. // cara2 String(char value[]). // cara5 System. Kelas ini terdapat dalam java. Kelas String Kelas String memodelkan deretan karakter.

int lastIndexOf(int i). int lastIndexOf(int i. 10. String saran = new String(”Raihlah scjp”). 16. static String valueOf(Object anObject). 26. 23. 30. int mulaiIndex). 20. static String valueOf(char ch[]).9. static String valueOf(long l). int sampaiIndex). // h 63 . Membuat dan menginisialisasi String String saran = ”Raihlah scjp”. static String valueOf(boolean b). // 12 char ch = saran. String toUpperCase(). 21. static String valueOf(float f). 14. 19. 2. char newChar). 15. int lastIndexOf(String str. int compareTo(Object anObject). String concat(String s). int mulaiIndex). 32. 11. Ada 8 operasi pada kelas String. static String valueOf(char ch). 33. 24. 13. 29. int compareTo(String str). 12. int count). 25. static String valueOf(int i). 28. boolean equalsIgnoreCase(String aString). 22. int indexOf(String str. String toLowerCase(). 18. 17. String substring(int mulaiIndex. Membaca character dalam String int len = saran. static String valueOf(char ch[]. int lastIndexOf(String str). String substring(int mulaiIndex). boolean equals(Object anObject). 27. String trim().charAt(3). int mulaiIndex). int offset.length(). 31. String replace(char oldChar. yaitu : 1. static String valueOf(double d).

println(s2.indexOf(”String”).equalsIgnoreCase(”ABCFJ”). Jika contoh di atas dilakukan s1==s2. long. // index4 berisi lokasi karakter i pada aString boolean hasil1 = aString. Membandingkan dua String String s1 = new String(”abcd”). System. 6.println(s3). float. harus mengunakan operator ==. 5.out. // index1 berisi posisi ’a’ int index2 = aString. maka hasilnya selalu false.out. namun operator ini tidak berlaku untuk objekobjek milik kelas String.out.equals(s2)). jika s1 sama dengan s2 hasilnya < 0.out. System.println(s1.indexOf(”i”). System.indexOf(’a’). // true boolean hasil = aString. jika s1 < s2 hasilnya > 0.println(s1.out.toUpperCase()). String s3 = new String(s2+ ” di rumah”). // index2 berisi posisi kemunculan kedua huruf ’a’ int index3 = aString.toLowerCase()).println(s1. Mengubah character kecil menjadi capital String s1 = new String(”Raihlah scjp \n”). // index3 berisi lokasi karakter ’S’ pada aString int index4 = aString. dan double. String s2 = new String(”abcdz”).startWith(”Nilai”).index1+1). // true 64 .endsWith(”String”). String s2 = new String(s1+ ” sendiri”).//true System.out. String s2 = s2. 4. // Raihlah scjp (tanpa spasi) System. hasilnya 0. Concatenation dua String String s1 = new String(”Saya belajar j2se”). jika s1 > s2 Catatan : Membandingkan nilai-nilai di attribute int. // true System.trim().println(s2.compareTo(s2). Mencari character dan substring String aString = new String(”Nilai objek milik kelas String”). int index1 = aString2.indexOf(’a’.3.

2.println(s1). String s3. s4 = s1+s2. Mengambil suatu substring String strAsli = new String(”Saya belajar j2se”). Contoh Kedua public class Strkonstruktor { public static void main(String argv[]) { char[] arrayChar = {'h'. 'o'}. System. ”j2se”” String strBaru2 = strAsli. s3 = s1+". // strBaru1 berisi string mulai index ke-12.replace(’S’. s2 = new String(" ini juga bisa"). Menggantikan suatu character dalam String String strBaru3 = strAsli. 'l'. } } Output Contoh1 : 1. apa kabar?". String strBaru1 = strAsli. 'a'.substring(12). 65 . String s2.out.substring(5. Contoh Pertama public class TestString { public static void main (String argv[]) { String s1. System.println(s3). s1 = "Hallo". // strBaru2 berisi string mulai index ke-5 sampai index ke-11 // isinya ”belajar” 8.out. String s4.1. // “maya belajar j2se” 1.println(s4).out.out. System. System. System.7.println(strBaru3).println(s2).’m’).11).out. String s1 = new String(arrayChar).

charAt(i) == '#') { found = true.println("Posisi 'adalah' mulai index ke " + str.out. } if (found) System. int i. berisi ”lo” System. 12)). boolean found = false. // mestinya didisplay per karakter System.2). System.out.println("s2 = " + s2). } } Output Contoh Kedua 1. } // akhir dari for } // akhir dari kelas Output Contoh Ketiga : 66 .out.out. i++) if (str.2. Contoh Ketiga public class Caristr { public static void main(String argv[]) { String str = "Ini adalah # String yang # diproses".indexOf('#'.println("Posisi '#' kedua ada pada index ke " + str. i < str.println("Posisi '#' pertama ada pada index ke " + i). for (i = 0. System.println("s1 = " + s1). break.3.indexOf("adalah")). sebanyak dua karakter.out.out.length(). // cari char '#' mulai dari index ke 12 System.println("array of char = " + arrayChar).String s2 = new String(arrayChar. // mulai elemen kedua.

// dari index ke-8 sampai index ke-24 System. Contoh Kelima public class SubStr { public static void main(String argv[]) { String s = "Kalimat ini akan disalin kemudian".substring(8.out. break. "Budi". i++) { if (tabel[i]. "Richard".substring(17). String s2 = s.4.println(nama1 + " tidak sama dengan elemen array ke " + i). "Novrido"}. } } Output Contoh Kelima : 67 .length.println("s1 = " + s1). System.println(nama1 + " sama dengan elemen array ke " + i).1. String nama1 = "Budi". Contoh Keempat public class Compare { public static void main(String argv[]) { String tabel[] = {"Willis".out. String nama2 = "Heru".24). i < tabel.out.println("s2 = " + s2). for (int i = 0.out.equals(nama1)==false) { System. String s1 = s. } else { System. } } } // akhir method } // akhir kelas Output Contoh Keempat : 1.5.

String) untuk mengedit isi objeknya.’r’).length()).out. //3 Contoh penggunaan method charAt() dan setCharAt() : StringBuffer s1 = new StringBuffer(”Belajar StringBuffer”). // 0 s1. System.println(”Kapasitas = ”+ s1. //14 System. bersifat konstanta.println(”Panjang = ”+ s1.capacity()).println(c1). replace(String. Contoh pembuatan objek melalui constructor milik kelas StringBuffer : StringBuffer sb1 = new StringBuffer(). sehingga diperlukan kelas StringBuffer yang objeknya berupa variabel string yang dapat diedit dengan methodnya yang khusus String).out.out. Ada tiga constructor milik kelas StringBuffer : 1.println(”Panjang = ”+ s1. juga memiliki String).out.setCharAt(4.println(s1). 3.println(”Kapasitas = ”+ s1.2. System. // membuat objek sb4 yang isinya sama dengan sb2 Beberapa method untuk memodifikasi isi buffer yang berisi string : StringBuffer s1 = new StringBuffer(14). System.out. seperti walaupun append(String).length()).out. char c1 = s1. public StringBuffer(int n). // S s1.out.setLength(3). public StringBuffer(). // membuat objek sb2 yang panjangnya 32 karakter String sb3 = new String(”Belajar StringBuffer”). // membuat objek sb3 yang berisi string tersebut String sb4 = new StringBuffer(sb2). // membuat objek sb1 yang kosong String sb2 = new StringBuffer(32).println(s1). method setCharAt(posisi. //14 System.charAt(9). // Belrjar StringBuffer Beberapa overloading method append() dan insert() : 68 . // Bel System. kelas String insert(posisi. System. Kelas StringBuffer Isi objek dari kelas String. 2.capacity()). public StringBuffer(String str).

char ch). String str).synchronized StringBuffer append(Object obj). synchronized StringBuffer insert(int offset. synchronized StringBuffer insert(int offset.out.append(2 + 2). StringBuffer insert(int offset. System. StringBuffer insert(int offset. char ch[]). StringBuffer insert(int offset.length()). System. 2.out.int offset. System.insert(14. double d).out. System. int i).out. synchronized StringBuffer append (char str[].1.int len). float f).capacity()). ”tahun”). Contoh Pertama public class PanjangKapasitas { public static void main(String argv[]) { StringBuffer s1 = new StringBuffer(14). //14 System. synchronized StringBuffer append(char ch). synchronized StringBuffer append(char ch[]). synchronized StringBuffer insert(int offset. Object obj).println("Kapasitas = "+ s1.println(s1). // 3 } } 69 .append(” depan”). StringBuffer append(float f).out. StringBuffer append(int i).println(sb2).out. sb2. StringBuffer append(long l). //kapasistas = panjang maksimum System.println("Panjang = "+ s1. sb1. // 0 s1. sb2.out. synchronized StringBuffer insert(int offset.setLength(3). StringBuffer insert(int offset.println("Kapasitas = "+ s1.length()). StringBuffer append(boolean b).capacity()). boolean b). StringBuffer sb2 = new StringBuffer(”Raihlah scjp”). synchronized StringBuffer append(String str). StringBuffer append(double d).println(sb1). Contoh pengunaan method append() dan insert() : StringBuffer sb1 = new StringBuffer(”2 + 2 = ”). //14 System.println("Panjang = "+ s1.

} } Output Contoh Kedua : 70 . for (int i = (panjang-1). StringBuffer asli2 = new StringBuffer(1). System. StringBuffer asli = new StringBuffer(1).println("Dibalik menjadi : "+balik). asli2 = balik. } System.append(ch). i--) { ch = str.println("Isi String asli : "+str).out. char ch.println("Panjang string : "+panjang).out.out. StringBuffer balik = new StringBuffer(1).Output Contoh Pertama : 2. System.println("Dikembalikan asli : "+asli2). i >= 0.append(charAt(i)). System.charAt(i). Contoh Kedua public class MembalikString { public static void main(String argv[]) { String str = "Ini String Original".2.reverse(). // 1234567890123456789 int panjang = str. balik.out. // balik.length().

sb. String s2 = s1.3. } } Output Contoh Keempat : 71 .')). Contoh Keempat public class Insert { public static void main(String argv[]) { StringBuffer str = new StringBuffer("Minum Panas").out. str.out. StringBuffer sb = new StringBuffer(s2).org").4.2. System.org".insert(6.println("sb1 = " + sb).substring(0.println("s2 = " + s2). System.java. System. s1.out."Kopi "). Contoh Ketiga public class LastIndex { public static void main(String argv[]) { String s1 = "MyProgram.out.println("s1 = " + s1).lastIndexOf('.println(str). } } Output Contoh Ketiga : 2.append(". System.

dan semua attribute dan methodnya bersifat static. StringTokenizer st = new StringTokenizer(str). static double toDegrees(double sudut). static double cos(double d).5. i++.util.out. public class StrToken { public static void main(String argv[]) { String str = "Ini adalah String yang cukup panjang".2. Perbedaannya adalah StricMath dijamin menghasilkan hasil identik untuk diimplementasikan di Java manapun.nextToken()). Method-method di kelas Math : static double toRadians(double sudut). while (st. static double sin(double d). dan tidak dapat melakukan instansiasi). 72 .3 menambah kelas StrictMath yang berisi sekumpulan method matematika yang lengkap. Kelas ini bersifat final (tidak dapat diturunkan. } } } Output Contoh Kelima : 3. serupa dengan kelas Math. Kelas Math dan Kelas StrictMath Kelas Math berisi sekumpulan method dan konstanta matematika.hasMoreTokens()) { System. Contoh Kelima import java. Java2 mulai versi1.*. int i = 1.println("Kata ke-" + i + ": " + st.

0). // pembulatan biasa static long round(double d). // hasilnya -7 double d8 = Math.3). // a pangkat b static double ceil(double d). // d static double pow(double a. Math.ceil(-7. static int min(int a. static double abs(double d). float b). double d3 = Math. double b). static double atan(double d).pow(d1. static float max(float a. 3. // hasilnya 8 double d7 = Math. // e pangkat d static double log(double d).log(d1). static long abs(long l). static float abs(float f). //cartesius ke polar static synchronized double random().floor(-7. static int max(int a.floor(7. static float min(float a.3).ceil(7. // hasilnya -8 73 . Lanjutan method-method di kelas Math : static int abs(int i). static double sqrt(double d).3). Penggunaan method-method pada kelas Math : double d = Math. double d5 = Math.14…. double d1 = 12. // pembulatan ke atas static double floor(double d).E=2. static double asin(double d). int b).PI=3. // hasilnya 7 double d9 = Math. // pembulatan ke int terdekat static double atan2(double a. double b). //pembulatan ke bawah static int round(float f). double b). static double min(double a. int b). float b).sqrt(d1). static long min(long a.3. static double exp(double d). double d4 = Math.PI/2).7…. // pembulatan biasa static double rint(double d). long b). // ln(d). double b). double d6 = Math.exp(d1). static double acos(double d). double d2 = Math. static double max(double a. static long max(long a.3). Math.sin(Math.static double tan(double d). long b).

System.out.println("PI = " + Math.println().sqrt(25)). double d14 = Math. double d11 = 14.2.*.tan(radians)). System.out. System.out.println("pow(125.out.println(). public class OperasiMtk { public static void main(String[] args) { System.5)).125.round(d10).println("10log(20) ="+Math. System.round(-5.5) = " + Math. } } Output Contoh Pertama : 74 .println().println().out. System. // 0. System.out. static double random().println(). System.ceil(-5.toRadians(45).out. System.6) = " + Math.println("sqrt(25) = " + Math.out.out. double radians = Math.double d10 = 37. 0.6)).E).println("pow(25. 1/3.out.log(20)).out.6) = " + Math.max(d11. Contoh Pertama import java.println("tan(45) = " + Math.println().println("ln(20) = " + Math.min(d11.0 <=hasil<=1.6)).out.out. System.out.out.println(). System. long l = Math. d12). System.0 3.out.log(20)/Math. System.6)). System.out.out.out.PI).round((float) d10). System.0)).0) = " + Math.1.println("floor(-5. System. System. d12).out. d12 = 18. System.6) = " + Math.println("ceil(-5.pow(125. System. // basis 10 System.out. System. 0.io.println().pow(25.println().floor(-5.println("E = " + Math.println().5. double d13 = Math. 1/3.println("round(-5. int i = Math.log(10)).

cos(radian)/9.valueOf(str2). double derajat = Double. System. String str1 = dataBaris. String str2 = dataBaris.println("Menghitung jarak jatuh peluru ").pow(kec. //double radian = derajat*Math.print("Sudut tembakan (dalam derajat) = ").valueOf(str1).in)).readLine().print("Kecepatan peluru (dalam m/det) = ").io.sin(radian)*Math.3.out.PI/180.readLine().8. double radian = Math.out.println("Peluru jatuh pada jarak = " + jarak + " meter"). } } 75 . Contoh Kedua import java.doubleValue().2. System.out. System.intValue().out.toRadians(derajat).*. public class Lintasan { public static void main(String[] args) throws IOException { BufferedReader dataBaris = new BufferedReader(new InputStreamReader(System. double kec = Double. 2) *Math. double jarak = 2*Math. System.

dan Dimension. Method-method dari kelas Number : 76 . float. Double. juga tentunya kelas String atau StringBuffer. Long. Kelas Number Kelas ini bersifat abstract serta mendefinisikan super kelas yang diimplementasikan oleh kelas-kelas yang membungkus tipe data dasar. 4. jadi jika ada method membutuhkan proses pengiriman argument dengan pass by reference harus memanfaatkan kelas tipe data wrapper. char. byte.1. short. float. Integer. byte. dan long. Tipe data dasar diperoleh dari tipe data wrapper dengan cara memanggil method di tipe data wrapper. short. double.Output Contoh Kedua: 4. Float. Kelas-Kelas Tipe Data Wrapper Sembilan tipe data dasar (boolean. Character. Short. Tipe data dasar dilewatkan ke method dengan pass by value. int. yang namanya serupa namun diawali huruf kapital. Kelas wrapper bertindak sebagai versi kelas dari tipe data dasar. Number. void) di java tidak diimplementasikan sebagai kelas. Penting untuk diperhatikan bahwa tipe data wrapper dan tipe data dasar tidak saling menggantikan. long. Ada enam subkelas kongkret yang menyimpan nilai-nilai secara eksplisit masing-masing tipe data dasar yaitu double. Kelas-kelas tipe data wrapper menyediakan versi objek dari tipe data dasar. Jadi kelas tipe data wrapper di java5 ada sebelas yaitu Boolean. maka dimungkinkan memanfaatkan method-method yang tersedia untuk masingmasing tipe data. Void. Byte. integer.

int four = Character. // hasilnya hexa c static char forDigit(int digit.2. String toString(). 4. int hashCode(). int radix). 77 . Boolean(String boolString).3.digit(ch1. short shortValue(). static boolean getBoolean(String propertyName). 4. float floatValue(). Dua konstanta pada kelas ini yaitu Boolean. char ch2 = ’c’. Kelas Character Kelas ini membungkus tipe data dasar dan memiliki beberapa method : static int digit(char ch. Static boolean valueOf(String boolString). double doubleValue(). 12). int radix). Kelas Boolean Kelas ini membungkus tipe data dasar Boolean.TRUE dan Boolean. long longValue(). // hasilnya bil 4 int twelve = Character. Method-method di kelas ini adalah : boolean booleanValue(). dan memiliki dua constructor : Boolean(Boolean boolValue). int intValue().byte byteValue().digit(ch2. Contoh : char ch1 = ’4’.FALSE. 10). boolean equels(Object boolObj).

static char toUpperCase(char ch).isSpace(’\t’). static boolean isUnicodeIdentifierPart(char ch).toUpperCase(’n’). 10). static boolean isDigit(char ch). boolean isLower = Character. // hasilnya N 78 .//hasilnya true static boolean isUpperCase(char ch).out. Contoh : char ch = Character. static boolean isWhitespace(char ch). static boolean isLowerCase(char ch). Contoh : Character c = new Character(’g’). static boolean isLetter(char ch). static boolean isUnicodeIdentifierStart(char ch). //hasilnya karakter ’9’ static boolean isDefined(char ch).out.isLowerCase(c).isDigit(’7’). Contoh : boolean isDigit = Character.println(ch).println(ch).toLowerCase(’M’). Contoh : boolean isSpace = Character. static boolean isTitleCase(char ch). System. // hasilnya true static boolean isIdentifierIgnorable(char ch). System.Contoh : int i = 9. static boolean isJavaIdentifierPart(char ch). char c = Character. static boolean isLetterOrDigit(char ch).forDigit(i. // hasilnya m static char toTitleCase(char ch). static char toLowerCase(char ch). Contoh : char ch = Character. // true static boolean isSpace(char ch).

float floatValue(). // konversi nilai numerik menjadi objek milik kelas String static String toString(byte num). static Byte valueOf(String str) throws NumberFormatException static Byte valueOf(String str. // objek kelas Byte menjadi nilai byte // membandingkan dua objek Byte secara numerik int compareTo(Byte b). Integer. // objek kelas Byte menjadi nilai double // membandingkan dua objek milik kelas Byte boolean equels(Object obj). int compareTo(Object obj).// objek kelas Byte menjadi nilai long static byte parseByte(String str) throws NumberFormatException static byte parseByte(String str. 4. int radix) throws NumberFormatException short shortValue(). static Byte decode(String str) throws NumberFormatException doubleValue(). int compareTo(Object obj). // objek kelas Short menjadi nilai float int hashCode(). // objek kelas Short menjadi nilai long static byte parseShort(String str) throws NumberFormatException 79 . // objek kelas Short menjadi nilai int long longValue(). int intValue().Saat konversi dari numerik ke karakter atau sebaiknya. Kelas Byte.//objek kelas Byte menjadi nilai short String toString(). dan Long Method-method di kelas Byte adalah : byte byteValue(). yaitu MIN_RADIX (basis 2) dan MAX_RADIX (basis 36).// objek kelas Byte menjadi nilai float int hashCode(). // objek kelas Short menjadi nilai byte // membandingkan dua objek milik kelas Short secara numerik int compareTo(Short sh). float floatValue(). Short. // membandingkan dua objek milik kelas Short boolean equels(Object shortObj). int radix) throws NumberFormatException Method-method di kelas Short : byte byteValue(). int intValue().// objek kelas Byte menjadi nilai int long longValue(). kelas Character memiliki attribute yang bersifat static final (konstanta). static Short decode(String str) throws NumberFormatException //konversi objek kelas Byte menjadi nilai double daouble doubleValue().4.

// konversi nilai numerik int menjadi objek milik kelas String static String toString(int num). // membandingkan dua objek milik kelas Integer boolean equels(Object IntegerObj).//objek milik kelas Integer menjadi nilai int // konversi objek milik kelas Integer menjadi nilai long long longValue(). int radix) throws NumberFormatException short shortValue(). static Integer getInteger(String propertyName. int radix) throws NumberFormatException // konversi objek milik kelas Integer menjadi nilai short short short()Value. int radix) throws NumberFormatException Method-method di kelas Integer : byte byteValue(). int default). static Integer decode(String str) throws NumberFormatException //objek milik kelas Integer menjadi nilai double double doubleValue(). static String toString(int num. static String toOctalString(int num). 80 . static byte parseInt(String str) throws NumberFormatException static byte parseInt(String str. int intValue(). int radix). int hashCode(). //konversi objek milik kelas Integer menjadi nilai float float floatValue(). static Short valueOf(String str) throws NumberFormatException static Short valueOf(String str. MAXVALUE (nilai terbesar yg dapat disajikan objek milik kelas Integer). static Integer valueOf(String str) throws NumberFormatException static Integer valueOf(String str. Integer default). static String toHexString(int num). int compareTo(Object obj). //objek kelas Integer menjadi nilai byte // membandingkan dua objek milik kelas Integer secara numerik int compareTo(Integer i).static byte parseShort(String str. int radix) throws NumberFormatException Dua attribute yang bersifat final static (konstanta) pada kelas Integer : MINVALUE (nilai terkecil yg dapat disajikan objek milik kelas Integer). static String toBinaryString(int num). // konversi nilai numerik short menjadi objek milik kelas String String toString(). static Integer getInteger(String propertyName). //objek kelas Short menjadi nilai short // konversi nilai numerik short menjadi objek milik kelas String String toString(short num). static Integer getInteger(String propertyName.

0 static Long getLong(String propertyName). // konversi nilai numerik long menjadi objek milik kelas String String toString().floatValue(). static String toBinaryString(long num). // hasilnya 17. static Long getLong(String propertyName. int radix) throws NumberFormatException 4. static Long decode(String str) throws NumberFormatException //objek milik kelas Long menjadi nilai double double doubleValue(). static String toOctalString(long num). Static String toString(long num). 81 . static String toHexString(long num).5. //konversi objek milik kelas Long menjadi nilai float float floatValue().Method-method di kelas Long adalah : byte byteValue(). float f = i. int radix) throws NumberFormat Exception // konversi objek milik kelas Long menjadi nilai short short shortValue(). static long parseLong(String str) throws NumberFormat Exception static long parseLong(String str. // objek milik kelas Long menjadi nilai int // konversi objek milik kelas Long menjadi nilai long long longValue(). static Long valueOf(String str) throws NumberFormatException static Long valueOf(String str. Kelas Float dan Double Method-method di kelas Float : byte byteValue(). int default). static Long getLong(String propertyName. // objek kelas Float menjadi nilai byte // membandingkan dua objek milik kelas Float secara numerik int compareTo(Float f). contoh : Integer i = new Integer(17). Integer default). int compareTo(Object obj). // membandingkan dua objek milik kelas Long boolean equels(Object obj). int hashCode(). // objek kelas Long menjadi nilai byte // membandingkan dua objek milik kelas Long secara numerik int compareTo(Long obj). int intValue().

82 . int hashCode().int compareTo(Object obj). int intValue(). // bit biner ke float static int floatToIntBits(float num). static float intBitsToFloat(int bits). static int doubleToLongBits(double num). // hasilnya long 34 static float parseFloat(String str) throws NumberFormatException // konversi objek milik kelas Float menjadi nilai short short shortValue(). // objek milik kelas Double menjadi nilai int boolean isInfinite(). //bil float ke bit biner int intValue(). int hashCode(). // konversi objek milik kelas Float menjadi nilai long long longValue(). //objek milik kelas Double menjadi nilai double double doubleValue(). // konversi objek milik kelas Float menjadi nilai float float floatValue(). // membandingkan dua objek milik kelas Float boolean equals(Object obj). // konversi nilai numerik float menjadi objek milik kelas String String toString(). int compareTo(Object obj). // konversi objek milik kelas Double menjadi nilai float float floatValue(). // membandingkan dua objek milik kelas Double secara numerik int compareTo(Double d). long l = f. // membandingkan dua objek milik kelas Double boolean equals(Object obj). //objek milik kelas Float menjadi nilai double double doubleValue().237). static boolean isNaN(float f). boolean isNaN(). static Float valueOf(String str) throws NumberFormatException Method-method di kelas Double : // objek kelas Double menjadi nilai byte byte byteValue(). contoh : Float f = new Float(34.longValue(). // objek milik kelas Float menjadi nilai int boolean isInfinite(). static String toString(float num). static boolean isInfinite(float f).

import java. getProperty(String kunci) // menghasilkan string yang menyatakan nilai property getenv(String nama) // menghasilkan string yang menyatakan nilai var lingkungan 4.1.util. static boolean isNaN(double num). //num tak hingga boolean isNaN().6. Berikut tiga method yang sering digunakan dalam kelas ini : getProperties() //menghasilkan objek Properties yang berisi properti sistem. static float parseDouble(String str) throws NumberFormatException // konversi objek milik kelas Double menjadi nilai short short shortValue().Enumeration. // konversi nilai numerik double menjadi objek milik kelas String String toString() static String toString(double num). Contoh Program import java. 83 .Properties.util. //NaN = not a number staic double longBitsToDouble(long num). Kelas Float memiliki beberapa attribut yang bersifat final dan static (konstanta) yaitu sebagai berikut : Nama Konstanta MINVALUE MAXVALUE NEGATIVE_INFINITY POSITIVE_INFINITY NaN Deskripsi Nilai terkecil objek Float Nilai terbesar objek Float Angka tak berhingga negative Angka tak berhingga positif Kondisi bukan angka 4.static boolean isInfinite(double num). // konversi objek milik kelas Double menjadi nilai long long longValue().6. Kelas System Kelas ini mendukung penggunaan method untuk memperoleh properti sistem.

getProperty(namaProperti)).propertyNames().public class PropertiSistem { public static void main(String[] args) { Properties p = System.nextElement().getProperties(). Enumeration elemen = p.hasMoreElements()) { String namaProperti = (String) elemen.out.println(namaProperti + " = " + p. System. while (elemen. } } } Outputnya : 84 .

bangunan dua dimensi. dan frame. Kelas Dimension Kelas ini memiliki dua attribute standard yaitu width dan height.7. 85 . sehingga cocok digunakan untuk mengolah data yang berpasangan seperti titik dua dimensi.4.

out. pbr. multi jalinan. Java memuiliki beberapa kelas dasar diantarnya adalah kelas String.println("Sebelum tukarBil() bil2 = " + bil.height = temp. } public static void main(String[] args) { Dimension bil = new Dimension(5. temp = dim.out.Contoh penggunaan kelas Dimension : import java.tukarBil(bil). 86 . System.println("Saat ditukar : dim.10).out.out.height). dan masih banyak lagi lainya. System. dim.height = "+ dim. PassByReference pbr = new PassByReference().println("Setelah tukarBil() bil2 = " + bil. System.out. } } Outputnya : D.println("Setelah tukarBil() bil1 = " + bil. dan penanganan excepsi.Dimension. dim.width.width = "+ dim.width).width = dim. System.println("Saat ditukar : dim.height). Rangkuman Bahasa Java diciptakan untuk memenuhi kebutuhan sistem. public class PassByReference { static void tukarBil(Dimension dim) { Integer temp. kelas math.width). System. Beberapa konsep inti bahasa di implementasikan sebagai kelas Java.height. kelas character.height).width). kelas String Buffer.println("Sebelum tukarBil() bil1 = " + bil. kelas number. misalnya manipulasi String.out.awt. System.

Latihan Soal 1. Buatlah sebuah program untuk menghitung akar-akar imajiner dengan menggunakan rumus ABC 2. Buatlah program yang menerima input dari keyboard dan kemudian memprosesnya sebagai Command. 87 . Program selesai bila Command exit diinputkan. Buatlah sebuah program aplikasi kalkulator sederhana 3.

secara lebih efisien dibanding proses-proses terpisah. Membuat Thread Untuk membuat thread ada dua cara yaitu: 1) Membuat kelas implementasi dari interface Runnable public class NamaThread1 implements Runnable { ……… public void run() { ……… } ……… } 2) Membuat kelas turunan dari kelas thread public class NamaThread2 extends Thread{ ……… public void run() { ……… } ……… } 3. sehingga kinerja aplikasi berbasis thread lebih baik dibanding aplikasi berbasis proses. Ada pula yang mendefinisikan. dan sumber daya.BAB IX MULTI THREADING 9. thread adalah sekumpulan instruksi yang dapat dieksekusi secara mandiri. Multithreading adalah suatu kemampuan yang memungkinkan beberapa thread dapat dijalankan secara bersamaan/bergantian/konkuren. data. Manfaat aplikasi menggunakan multithreading yaitu agar thread-thread di suatu proses. 9. Proses adalah satu unit kepemilikan sumberdaya. Pengertian Thread Thread adalah objek yang mewakili satu unit eksekusi sekumpulan instruksi. Kondisi Thread Thread dapat berada dalam 1 dari 4 kondisi berikut: 88 . dapat sharing kode program.2.1.

Pertama kali thread diciptakan (born). 89 . isAlive() dan interrupt(). ThreadDeath : membersihkan thread yang telah berakhir eksekusinya. Pada multitasking. 4. konkurensi melibatkan banyak proses.waiting ready running dead Multitasking adalah kemampuan komputer melakukan banyak tugas secara konkuren/bergantian. b. start() b. Karena multithreading perluasan dari multitasking. selalu dalam kondisi ready. Thread yang berada pada kondisi ready antri menunggu giliran untuk dieksekusi. sleep(). Siklus Hidup Thread a. stop() dipanggil setiap kali thread dimulai. Terdapat tiga kelas yang berkaitan dengan aplikasi multithreading : 1. maka pada multithreading setiap proses melibatkan banyak thread. 3. notifyAll(). ThreadGroup : mengelompokkan thread-thread Hanya ada satu interface yaitu Runnable yang digunakan untuk membuat thread. run() d. Method-method standard yang berkaitan dengan multithreading : a. penjadwal akan melakukan dispatching kepada thread sehingga thread transisi dari kondisi ready ke running (processor sedang mengeksekusi thread tersebut). Method start() harus dipanggil untuk mengeksekusi method run() sehingga thread tersebut siap segera dieksekusi processor. gunanya sama dengan start() untuk menempatkan program inisialisasi berisi badan Thread untuk menghentikan thread dan ditempatkan di akhir badan thread e. init() c. Thread : membuat thread di program 2. Method-method standard lain adalah wait(). notify().

start().1. dengan cara mengeksekusi method run() mbl2. Thread transisi dari kondisi running ke kondisi dead ketika method run() selesai dilaksanakan atau diakhiri karena terjadi exception. // membuat objek Thread1. // membuat objek Thread2. d.println("Thread " + nama + ": dijalankan ke " + i).out. selanjutnya dihapus dari memori aktif.start(). // eksekusi thread mbl1. i<5.sleep(1000).c. // eksekusi thread mbl2. i++) { try { Thread. Jika saat eksekusi thread memerlukan kondisi tertentu untuk dipenuhi atau karena diinterupsi. dengan cara mengeksekusi method run() } } 90 . dinamai Mobil1 Mobil mbl2 = new Mobil("Mobil2").out. maka thread tersebut dapat memanggil method wait() atau sleep() agar thread dapat transisi dari kondisi running ke kondisi waiting (menunggu sampai masuk kembali ke kondisi ready).println("Terinterupsi").currentThread(). } System. 5. // tunggu 1000 milli detik } catch (InterruptedException ie) { System. for (int i=0. Contoh1 class Mobil extends Thread { public Mobil(String id) { super(id). Contoh-Contoh Program 5. } } } public class AplyThreadMobil { public static void main(String[] args) { Mobil mbl1 = new Mobil("Mobil1"). // id adalah nama thread } public void run() { String nama = getName(). dinamai Mobil2 mbl1.

currentThread()). System.out. i++) { System.println("Ini adalah " + Thread. Contoh2 // membuat Thread dengan cara 2 public class MyOtherThread implements Runnable { private Thread t.start().getName()+" dieksekusi ke-" + i).sleep(1). } public void run() { try { for (int i = 0. MyOtherThread t3 = new MyOtherThread("Thread 3"). public MyOtherThread(String nama) { // start ada di constructor t = new Thread(this.println(t. } } 91 . t. i < 5.out.2.Output Contoh1 : 5. } } catch (InterruptedException ex) { } } } public class AplyMyOtherThread { public static void main(String argv[]) { MyOtherThread t1 = new MyOtherThread("Thread 1"). nama). t. MyOtherThread t2 = new MyOtherThread("Thread 2").

// belum berhenti do { // cek kondisi thread mbl1 if (!mbl1. } } 92 .3. } // cek kondisi thread mbl2 if (!mbl2.println("Thread mbl1 berhenti"). dengan cara mengeksekusi method run() boolean mbl1berhenti = false. System. // buat objek Thread2 dan dinamai Mobil2 mbl1.out.isAlive()) { mbl2berhenti = true. // eksekusi thread mbl2. } } while (!mbl1berhenti || !mbl2berhenti).isAlive()) { mbl1berhenti = true. Contoh3 Kelas program berikut adalah melengkapi kelas AplyThreadMobil agar mengecek apakah kedua thread (mbl1 dan mbl2) sudah berhenti dijalankan. // belum berhenti boolean mbl2berhenti = false. // buat objek Thread1 dan dinamai Mobil1 Mobil mbl2 = new Mobil("Mobil2"). public class AplyThreadMobil2 { public static void main(String[] args) { Mobil mbl1 = new Mobil("Mobil1"). System.start().out. // eksekusi thread mbl1.Output Contoh2 : 5.println("Thread mbl2 berhenti").start(). dengan cara mengeksekusi method run() mbl2.

// non aktif 1000 milli detik } catch(InterruptedException ie) { System. } System. Contoh4 class SinkronisasiKeluaran { public static synchronized void info(String nama) { for (int i=0.out.out.println("Terinterupsi"). dipastikan bahwa seluruh kode di dalam method tersebut dieksekusi tanpa diinterupsi oleh yang lain.sleep(1000).4. } } } class Mobil2 extends Thread { public Mobil2(String id) { super(id).Output Contoh3 : Sinkronisasi merupakan suatu upaya agar kode program tertentu dijalankan secara sekuensial sehingga kode tersebut tidak akan dijalankan oleh thread lain dalam waktu yang bersamaan. i<5. 93 .println("Thread " + nama + " dijalankan ke-"+i). } public void run() { String nama = getName(). perhatikan contoh berikut ini : 5. Jika sinkronisasi diterapkan dalam method. i++) { try { Thread.

SinkronisasiKeluaran.info(nama); } } public class AplySinkron { public static void main(String[] args) { Mobil2 mbl1 = new Mobil2("Mobil1"); Mobil2 mbl2 = new Mobil2("Mobil2"); mbl1.start(); mbl2.start(); } } Output Contoh4 :

Terlihat bahwa thread Mobil2 dijalankan duluan adalah kebetulan, suatu saat yang dijalankan bisa Mobil1 duluan, untuk memastikan yang dijalankan duluan secara sekuensial adalah Mobil1, maka sebelum method start() harus dipanggil terlebih dahulu method setPriority(), sehingga kelas AplySinkron menjadi : public class AplySinkron { public static void main(String[] args) { Mobil2 mbl1 = new Mobil2("Mobil1"); Mobil2 mbl2 = new Mobil2("Mobil2"); mbl1.setPriority(6); mbl1.start(); mbl2.start(); } }

94

Outputnya menjadi :

5.5. Contoh5 Contoh berikut adalah variasi lain dari pemanfaatan method setPriority() : public class MultiThread2 extends Thread { public MultiThread2(String s) { this.setName(s); } public MultiThread2(String s, int pri) { this.setName(s); this.setPriority(pri); } public void run() { for(int i = 0; i < 20; i++) { System.out.println(">>" + Thread.currentThread()); } } public static void main(String argv[]) { MultiThread2 t1 = new MultiThread2("Thread1", Thread.MIN_PRIORITY); MultiThread2 t2 = new MultiThread2("Thread2", Thread.MAX_PRIORITY); System.out.println("Prioritas Thread1 = " + t1.getPriority()); System.out.println("Prioritas Thread2 = " + t2.getPriority()); t1.start(); t2.start(); } }

95

Output Contoh5 :

Contoh6 : import java.io.*; public class CepatKetik { private static boolean siap = false; private static String pesan;

96

err. System. } catch (IOException ex) { System.println("Anda memerlukan waktu " + detik + " detik untuk mengetiknya!"). try { pesan = buf.out.out.out.println("Tidurku terganggu!"). } siap = true. while (!siap) { try { Thread. } } Output contoh6 : 97 . System.err.println("Ketik sebuah pesan tekan enter bila telah selesai:"). t. Thread t = new Thread() { public void run() { InputStreamReader isr = new InputStreamReader(System.in).out."). } catch (InterruptedException ex) { System. BufferedReader buf = new BufferedReader(isr). System.print("\r" + (++detik) + "\t").println(ex).out. } System.println("Mulai!").println("\rPesan yang Anda ketik adalah \"" + pesan +"\".readLine().start().sleep(1000). } }. } System.public static void main(String argv[]) { int detik = 0.

Apa yang dimaksud dengan Thread. Proses dan Multithreading? 2. Buatkan kelas turunan dari kelas thread! 98 . Sebutkan dan jelaskan kelas-kelas dan interface yang ada dalam multithreading! 3.Program contoh6 ini menuunggu user untuk mengetikkan suatu string yang dihitung kecepatan dalam mengetiknya sampai ditekan tombol enter. SOAL LATIHAN 1.

Sign up to vote on this title
UsefulNot useful