Modul Pelatihan Java Rev 2.0

96
1 1 Pengenalan Java Overview Bab ini akan menjelaskan tentang dasar-dasar pemrograman menggunakan bahasa Java. Penjelasan tentang karakteristik bahasa Java, identifier, tipe data, dan operator pada Java. Tujuan 1. Mengaplikasikan dasar-dasar pemrograman menggunakan Java 2. Menggunakan identifier dan tipe data pada Java 1.1 Sejarah Java Pada tahun 1991, Sun dipimpin Patric Naughton dan James Gosling ingin merancang bahasa computer untuk perangkat consumer seperti cable TV Box. Karena perangkat itu tidak mempunyai banyak memori, bahasa harus berukuran kecil dan menghasilkan kode program yang liat. Juga karena manufaktur-manufaktur berbeda memilih pemroses-pemroses yang berbeda, maka bahasa harus bebas dari arsitektur manapun. Proyek ini diberi nama kode “Green”. Kebutuhan untuk kecil, liat dan kode netral terhadap platform mengatur tim mempelajari implementasi pascal yang pernah dicoba. Niklaus Wirth, pencipta bahasa Pascal telah merancang bahasa portable yang menghasilkan kode intermediate untuk mesin hipotetis. Mesin ini sering disebut Virtual machine. Kode antara ini kemudian dapat digunakan disembarang mesin yang memiliki interpreter. Proyek Green menggunakan virtual machine untuk mengatasi isu utama netral terhadap arsitektur mesin. Karena orang-orang di proyek Green berbasis C++ bukan Pascal maka kebanyakan Sintaks diambil dari C++, serta mengadopsi orientasi obyek bukan procedural. Mulanya bahasa yang diciptakan diberi nama “Oak” kemudian diganti “Javakarena telah ada bahasa pemrograman bernama “OakProduk pertama proyek Green adalah “*7”, sebuah kendali jauh yang sangat cerdas. Karena pasar masih belum tertarik dengan produk consumer cerdas maka proyek Green harus menemukan pasar lain dari teknologi yang diciptakan. Kemudian, penerapan mengarah menjadi teknologi yang berperan di web. Pada 1995, Netscape memutuskan membuat browser yang dilengkapi dengan Java. Setelah itu diikuti oleh IBM, Symantec, Inprise, bahkan Microsoft. Setelah itu Java mulai didengar. Dengan strategi terbukanya, banyak industri yang meliriknya. Bersamaan itu disusul berbagai universitas Amerika, Jepang, dan Eropa yang mengubah pengenalan bahasa pemrograman komputer menjadi Java, meninggalkan C++. Java lebih sederhana dan telah mengakomodasikan hampir seluruh fitur penting bahasa-bahasa pemrograman yang ada semenjak perkembangan komputasi modern. Java pertama kali diluncurkan sebagai bahasa pemrograman umum (general purpose programming language) dengan kelebihan dia bisa dijalankan di web browser sebagai applet. Sejak awal, para pembuat Java telah menanamkan visi mereka ke dalam Java untuk small embedded customer device)seperti TV, telepon, radio, dan sebagainya supaya dapat berkomunikasi satu sama lain. Langkah pertama yang diambil oleh Sun Microsistem adalah dengan membuat JVM (Java Virtual machine) yang kemudian diimplementasikan dalam bentuk JRE (Java Runtime Environment). JVM adalah lingkungan tempat eksekusi program Java berlangsung di mana para obyek saling berinteraksi satu dengan yang lainnya. Virtual machine inilah yang menyebabkan Java mempunyai kemampuan penanganan memori yang lebih baik, keamanan yang lebih tinggi serta portabilitas yang besar. Apabila kita hanya ingin menjalankan program Java, maka kita cukup memiliki JRE saja. Tapi seandainya kita

description

modul java

Transcript of Modul Pelatihan Java Rev 2.0

Page 1: Modul Pelatihan Java Rev 2.0

1

1 Pengenalan Java Overview

Bab ini akan menjelaskan tentang dasar-dasar pemrograman menggunakan bahasa Java. Penjelasan

tentang karakteristik bahasa Java, identifier, tipe data, dan operator pada Java.

Tujuan

1. Mengaplikasikan dasar-dasar pemrograman menggunakan Java

2. Menggunakan identifier dan tipe data pada Java

1.1 Sejarah Java

Pada tahun 1991, Sun dipimpin Patric Naughton dan James Gosling ingin merancang

bahasa computer untuk perangkat consumer seperti cable TV Box. Karena perangkat itu tidak

mempunyai banyak memori, bahasa harus berukuran kecil dan menghasilkan kode program yang liat.

Juga karena manufaktur-manufaktur berbeda memilih pemroses-pemroses yang berbeda, maka

bahasa harus bebas dari arsitektur manapun. Proyek ini diberi nama kode “Green”.

Kebutuhan untuk kecil, liat dan kode netral terhadap platform mengatur tim mempelajari

implementasi pascal yang pernah dicoba. Niklaus Wirth, pencipta bahasa Pascal telah merancang

bahasa portable yang menghasilkan kode intermediate untuk mesin hipotetis. Mesin ini sering disebut

Virtual machine. Kode antara ini kemudian dapat digunakan disembarang mesin yang memiliki

interpreter. Proyek Green menggunakan virtual machine untuk mengatasi isu utama netral terhadap

arsitektur mesin.

Karena orang-orang di proyek Green berbasis C++ bukan Pascal maka kebanyakan Sintaks

diambil dari C++, serta mengadopsi orientasi obyek bukan procedural. Mulanya bahasa yang

diciptakan diberi nama “Oak” kemudian diganti “Java” karena telah ada bahasa pemrograman

bernama “Oak”

Produk pertama proyek Green adalah “*7”, sebuah kendali jauh yang sangat cerdas. Karena

pasar masih belum tertarik dengan produk consumer cerdas maka proyek Green harus menemukan

pasar lain dari teknologi yang diciptakan. Kemudian, penerapan mengarah menjadi teknologi yang

berperan di web.

Pada 1995, Netscape memutuskan membuat browser yang dilengkapi dengan Java. Setelah itu

diikuti oleh IBM, Symantec, Inprise, bahkan Microsoft.

Setelah itu Java mulai didengar. Dengan strategi terbukanya, banyak industri yang meliriknya.

Bersamaan itu disusul berbagai universitas Amerika, Jepang, dan Eropa yang mengubah pengenalan

bahasa pemrograman komputer menjadi Java, meninggalkan C++. Java lebih sederhana dan telah

mengakomodasikan hampir seluruh fitur penting bahasa-bahasa pemrograman yang ada semenjak

perkembangan komputasi modern.

Java pertama kali diluncurkan sebagai bahasa pemrograman umum (general purpose

programming language) dengan kelebihan dia bisa dijalankan di web browser sebagai applet. Sejak awal,

para pembuat Java telah menanamkan visi mereka ke dalam Java untuk small embedded customer

device)seperti TV, telepon, radio, dan sebagainya supaya dapat berkomunikasi satu sama lain.

Langkah pertama yang diambil oleh Sun Microsistem adalah dengan membuat JVM (Java Virtual

machine) yang kemudian diimplementasikan dalam bentuk JRE (Java Runtime Environment). JVM adalah

lingkungan tempat eksekusi program Java berlangsung di mana para obyek saling berinteraksi satu

dengan yang lainnya. Virtual machine inilah yang menyebabkan Java mempunyai kemampuan

penanganan memori yang lebih baik, keamanan yang lebih tinggi serta portabilitas yang besar. Apabila

kita hanya ingin menjalankan program Java, maka kita cukup memiliki JRE saja. Tapi seandainya kita

Page 2: Modul Pelatihan Java Rev 2.0

2

ingin mengembangkan perangkat lunak sendiri, JRE saja tidak cukup.

Untuk lebih meningkatkan produktivitas pengembang perangkat lunak, Sun juga meluncurkan

SDK (Standard Development Kit) yang berisi kakas dan API untuk membuat program aplikasi berbasis

Java. Pada tahun 1999 Sun meluncurkan J2EE (Java 2 Enterprise Edition) sebagai framework untuk

membuat aplikasi enterprise berskala besar. Pada tahun 2001, Sun meluncurkan J2ME yang kelak

menjadi salah satu standar pemrograman di dalam PDA maupun handphone.

1.2 Karakteristik Bahasa Java

1. Sederhana, semudah C dan seampuh C++: berlawanan dengan anggapan orang-orang bahwa

bahasa Java sulit untuk dipelajari, Java gampang untuk dipelajari terutama untuk orang yang sudah

mengenal pemrograman tapi belum terlalu terikat pada paradigma pemrograman prosedural. Tentu

saja ini berarti bahwa kita harus siap mempelajari salah satu teknologi yang berkembang paling cepat

di dunia dalam dua tahun terakhir ini dengan banyak membaca tentunya baik dari buku maupun

melalui web.

2. Sangat berorientasi obyek (OOP) dengan implementasi yang sangat baik sehingga kita

bukan hanya belajar bagaimana membuat program yang baik (reusable, scalable, dan maintanable)

tetapi juga kita belajar bagaimana cara berfikir yang baik untuk mengenali struktur masalah yang

sedang kita hadapi dan memecahkannya secara sistematis dengan pola-pola tertentu (patterns

OpenPlatform, Write Once Run Anywhere (WORA), portable atau multiplatform, program yang kita buat

dapat dijalankan di Windows, Linux/Unix, Solaris, dan Macintosh tanpa perlu diubah maupun di

kompilasi ulang. Java adalah juga bahasa yang paling sesuai digunakan bersama dengan XML yang

membuat data menjadi portable, ini karena kelahiran XML tidak terlepas dari dukungan parser-parser

berbahasa Java.

3. Arsitekturnya yang kokoh dan pemrograman yang aman. Dalam Java program yang kita buat

tidak mudah untuk “hang” karena konflik pada memori biasanya diselesaikan dengan mengumpulkan

obyek-obyek yang sudah tak terpakai lagi secara otomatis oleh garbage collector. Penanganan

kesalahan juga dipermudah dalam Java dengan konsep Exception.

4. Bukan sekedar bahasa tapi juga platform sekaligus arsitektur. Java mempunyai portabilitas yang

sangat tinggi. Ia dapat berada pada smartcard, pager, POS (Point of Service), handphone, PDA, palm, TV,

Embedded device (PLC, micro controller), laptop, pc, dan bahkan server). Menyadari akan hal ini Sun

membagi arsitektur Java membagi tiga bagian, yaitu:

a. Enterprise Java (J2EE) untuk aplikasi berbasis web, aplikasi sistem tersebar dengan beraneka ragam klien dengan kompleksitas yang tinggi. Merupakan superset dari Standar Java

b. Standard Java (J2SE), ini adalah yang biasa kita kenal sebagai bahasa Java, dan merupakan fokus

kita sekarang.

c. Micro Java (J2ME) merupakan subset dari J2SE dan salah satu aplikasinya yang banyak dipakai

adalah untuk wireless device/mobile device

5. Program Java dijalankan menggunakan interpreter melalui Java Virtual machine (JVM). Hal ini

menyebabkan source code Java yang telah dikompilasi menjadi Java bytecodes dapat dijalankan pada

platform yang berbeda-beda.

6. Fitur-fitur utama yang lain:

a. Mendukung multithreading.

b. Selalu memeriksa tipe obyek pada saat runtime.

c. Mempunyai automatic garbage collection untuk membersihkan obyek yang tidak terpakai dari

memori

Page 3: Modul Pelatihan Java Rev 2.0

3

d. Mendukung exception sebagai salah satu cara penanganan kesalahan

1.3 Bagaimana Java Bekerja?

Lingkungan pemrograman pada Java menggunakan compiler sekaligus interpreter agar dapat

berjalan pada platform yang berbeda. Java compiler melakukan kompilasi pada source code (.java)

menjadi Java bytecodes (.class) seperti ditunjukkan oleh Gambar 2.1 berikut.

Gambar 1.1 Mekanisme Kompilasi dan Eksekusi Program Java

Java bytecodes merupakan instruksi mesin yang tidak spesifik terhadap processor. Oleh karena

itu, program Java hasil kompilasi akan dapat dijalankan pada berbagai platform sistem komputer

dengan menggunakan Java Virtual machine (JVM), "write once, run anywhere" (lihat Gambar 2.2). JVM

disebut juga bytecodes interpreter atau Java runtime interpreter.

Gambar 1.2 Konsep Write Once, Run Anywhere pada Java

1.4 Platform Java

Platform dapat diartikan sebagai lingkungan perangkat keras atau perangkat lunak di mana program dijalankan. Umumnya platform dinyatakan berdasarkan nama sistem operasi yang digunakan,

misalnya Windows 2000, Linux, Solaris, atau MacOS.

Tidak seperti bahasa pemrograman lainnya, platform Java mempunyai dua komponen, yaitu:

1. Java Virtual machine (Java VM)

Merupakan fondasi untuk platform Java yang dapat digunakan di berbagai platform perangkat

keras.

2. Java Application Programming Interface (Java API)

Kumpulan komponen-komponen perangkat lunak siap pakai (ready-made software components)

untuk berbagai keperluan penulisan program, seperti graphical user interface (GUI).

Gambar 2.3. berikut memperlihatkan gambaran program yang berjalan di atas di kedua

Page 4: Modul Pelatihan Java Rev 2.0

4

komponen platform Java.

Gambar 2.3 Platform Java

1.5 Aplikasi Java

Ada dua tipe aplikasi pada Java yang umumnya sering ditulis, yaitu aplikasi stand alone dan

applets. Aplikasi stand alone merupakan aplikasi yang dijalankan langsung di atas platform Java.

Sedangkan applets adalah aplikasi yang dijalankan melalui web browser ataupun applet viewer.

Perbedaan applets dengan Java stand alone adalah:

1. Applets melakukan extends dari class applets.

2. Applets tidak mempunyai fungsi main().

3. Applets mempunyai beberapa batasan keamanan, seperti tidak diperbolehkan membaca atau

menulis file pada sistem komputer.

4. Applets tidak dapat menjalankan program lain pada komputer yang menjalankan applets.

Selain kedua tipe aplikasi tersebut, ada beberapa tipe aplikasi Java yang lain yaitu:

1. Aplikasi berbasis Windows, misalnya dengan menggunakan fasilitas Swing.

2. Java Servlet, yaitu aplikasi seperti applets tetapi dijalankan di sisi server.

3. Java Server Pages, yaitu aplikasi di sisi server yang ditulis dalam bahasa script yang melekat

pada halaman HTML untuk memberikan efek tampilan pada web browser.

4. Java Beans dan Enterprise Java Beans, yaitu aplikasi untuk program multitiers.

5. Java Micro Edition, yaitu aplikasi yang diperuntukan bagi perangkat genggam (handheld

devices), seperti telepon genggam.

1.6 Identifier di Java

Identifier adalah nama yang diberikan kepada variabel, method, kelas, paket, dan interface

untuk unik mengidentifikasikan bagi kompilator dan memberikan nama yang berarti bagi pemrogram.

Adapun tatacara penamaan identifier:

1. Case sensitive, huruf kapital dan kecil dibedakan

2. Identifier yang diberikan oleh pemrogram tidak boleh sama dengan keyword yang ada di Java

3. Dimulai dengan huruf atau underscore (garis bawah) atau tanda ($). Namun sebisa mungkin

diawali dengan huruf karena mungkin identifier dengan awalan underscore dan ($) digunakan

unruk pemrosesan internal dan file import

4. Karakter berikutnya dapat berupa huruf atau angka 0 sampai 9. Simbol-simbol seperti „+‟ dan

spasi tidak dapat digunakan

Page 5: Modul Pelatihan Java Rev 2.0

5

1.7 Keyword di Java

Keyword adalah identifier yang digunakan Java untuk suatu tujuan khusus. Daftar keyword Java

adalah sebagai berikut:

Tabel 1.1 Keyword dalam Java

abstract do implements private this

boolean double import protected throw

break else instanceof public throws

byte extends int return transient

case false interface short true

catch final long static try

char finally native strictfp void

class float new super volatile

continue for null switch while

default if package synchronized

1.8 Tipe Data di Java

Tipe data dalam Java dibagi dalam dua kategori:

1. Sederhana

2. Komposit

1.8.1 Tipe data sederhana

Tipe data sederhana merupakan tipe inti. Tipe sederhana tidak diturunkan dari tipe lain. Tipe ini

adalah tipe data primitif. Terdapat delapan tipe data primitif di Java:

- Empat tipe adalah untuk bilangan bulat: byte, short, int, long

- Dua untuk tipe angka pecahan (floating point): float, double

- Satu untuk tipe karakter, yaitu char

- Satu untuk tipe boolean yang berisi nilai logika: true/false

Tipe data integer

Tipe data integer memiliki jangkauan nilai sebagai berikut:

Tabel 1.1 Jangkauan nilai integer

Panjang Integer Tipe data

Jangkauan

Nilai

8 bit byte -27 to 27-1

16 bit short -215 to 215-1

Page 6: Modul Pelatihan Java Rev 2.0

6

32 bit int -231 to 231-1

64 bit long -263 to 263-1

Pada kebanyakan situasi, tipe int paling banyak dipakai. Untuk data yang berukuran besar, digunakan

tipe data long. Tipe short dan byte terutama digunakan untuk aplikasi khusus yang menangani

file level rendah.

Tipe data Floating Point

Tipe data ini digunakan untuk perhitungan yang melibatkan bilangan pecahan, seperti perhitungan

kosinus, akar persamaan, dan sebagainya. Java mengimplementasikan standar himpunan tipe dan

operator titik mengambang IEEE-754.

Keakuratan nilai untuk tipe data floating point adalah sebagai berikut:

Tabel 1.2 Presisi nilai float

Panjang Float Tipe data Nilai terbesar

32 bit Float 3.40282e+38

64 bit Double 1.79769e+308

Masing-masing tipe data floating point memiliki kebutuhan memori yang berbeda. Tipe data float

memerlukan 32 bit sebagai single-precision, sedangkan tipe data double memerlukan 64 bit sebagai

double precision.

Nama double mengacu pada presisinya yang sebesar dua kali dibandingkan float. Presisi float

kebanyakan tidak memadai untuk banyak aplikasi komputasi. Angka literal bertipe float berakhiran

F, contoh 3.14F sedangkan kalau tidak diberi akhiran F akan dipandang sebagai bertipe double.

Tipe data Char

Tipe data char merupakan tipe data yang direpresentasikan dengan 16-bit Unicode character. Literal

dari char harus berada di antara single quotes („ „) Contohnya :

„a‟ huruf a

„\t‟ karakter tab

Unicode dirancang untuk menangani semua karakter di dunia dalam kode 2 byte. Kode 2 byte

memungkinkan 65.536 karakter, dimulai dari nilai byte 0 sampai 65.535. Himpunan karakter ASCII

dipandang sebagai bagian dari Unicode dan ditempatkan sebagai 256 karakter pertama dari Unicode.

Terdapat pula beberapa barisan escape untuk karakter Unicode yang spesial, seperti berikut:

Tabel 1.3 Karakter Unicode spesial

Barisan Escape Nama Nilai Unicode

\b Backspace \u008

\t Tab \u009

\n Linefeed \u00a

\r Carriage return \u00d

\” Petik ganda \u0022

\‟ Petik tunggal \u0027

\\ Backslash \u005c

Page 7: Modul Pelatihan Java Rev 2.0

7

Tipe data Boolean

Tipe data boolean memiliki 2 literal yaitu : true dan false. Contoh, statement :

boolean truth = true;

mendeklarasikan variabel truth sebagai tipe data boolean dan memberikan nilai true

1.8.2 Tipe data komposit

Tipe data komposit merupakan tipe data yang disusun dari tipe data sederhana atau tipe komposit

lain yang sudah ada. Tipe ini dapat berupa array, string, kelas, dan interface.

Khusus untuk String pada Java dikenali sebagai kelas, bukan sebagai array of character. String

pada Java diapit oleh tanda petik ganda (“.....”), contoh:

String s=”Saya makan nasi”;

1.9 Operator di Java

Java memiliki beberapa jenis operator di antaranya:

- Operator unary:

Tabel 1.4 Operator unary

Nama Operator Simbol Definisi

Increment ++ Akan menambahkan nilai

sejumlah satu

Decrement -- Akan mengurangi nilai

sejumlah satu

Contoh penggunaan:

int x = 5;

int y = x++;

pada kasus di atas nilai y akan berisi 5 dan nilai x akan berisi 6 karena nilai y akan mengambil nilai

x dahulu setelah itu baru nilai x ditambahkan satu, berbeda kasusnya pada contoh di bawah ini:

int x = 5;

int y = ++x;

pada kasus di atas, nilai y akan berisi 6 dan x berisi 6 karena nilai x akan ditambahkan satu dahulu

baru kemudian dimasukkan ke variabel y.

- Operator aritmatika:

Tabel 1.5 Operator aritmatika

Nama

Operator

Simbol Deskripsi

Penambahan + Menambahkan dua buah nilai

Pengurangan - Pengurangan dua buah nilai

Perkalian * Perkalian dua buah nilai

Pembagian / Pembagian dua buah nilai

Sisa bagi % Sisa pembagian dua buah

nilai

- Operator relasi:

Page 8: Modul Pelatihan Java Rev 2.0

8

Tabel 1.6 Operator relasi

Simbol Deskripsi

< Kurang dari

> Lebih dari

<= Kurang dari atau sama

dengan

>= Lebih dari atau sama dengan

== Sama dengan

!= Tidak sama dengan

- Operator boolean: Tabel 1.7 Operator boolean

Simbol Deskripsi

&& AND

|| OR

^ XOR

! NOT

Page 9: Modul Pelatihan Java Rev 2.0

9

2 Flow Control Overview

Bab ini akan menjelaskan tentang flow control pada Java. Flow control yang dasar pada pemrograman

ada dua, yakni percabangan dan pengulangan.

Tujuan

1. Mampu menggunakan flow control percabangan pada Java

2. Mampu menggunakan flow control pengulangan pada Java

2.1 Percabangan pada Java

Percabangan merupakan sebuah alur pemilihan berdasarkan kondisi tertentu. Pada Java, terdapat

beberapa jenis sintaks untuk alur percabangan.

1. Sintaks if

Sintaks if digunakan untuk menyatakan alur percabangan dengan pengecekan kondisi. Jika suatu

kondisi yang dicek terpenuhi, maka aksi tertentu akan dilakukan. Jika tidak terpenuhi, maka akan

dilakukan pengecekan kondisi pada else if berikutnya. Jika tidak ada kondisi yang terpenuhi, maka

akan dilakukan aksi pada else-nya.

Sintaks if-else, sebagai berikut :

if (boolean expression) {

statement or block

} else if (boolean expression) {

statement or block

} else {

statement or block

}

Contohnya:

public class CobaIf {

public static void main(String[] args) {

int i = 3;

if (i%2==0){

System.out.println(“Bilangan genap”):

}

else {

System.out.println(“Bilangan ganjil”);

}

}

}

2. Sintaks switch

Sintaks switch digunakan untuk menyatakan alur percabangan dengan pengecekan pada sebuah

nilai variabel. Variabel yang bisa dicek pada sintaks switch adalah variabel bertipe int, char dan

boolean. Jika ditemukan nilai yang cocok dengan variabel yang dicek, maka dilakukan aksi yang

pada case yang bersesuaian dengan nilai tersebut. Jika tidak ditemukan nilai yang cocok, akan

dijalankan aksi pada default. Sintaks switch sebagai berikut :

switch (expression) {

case constant1 : statements;

break;

case constant2 : statements;

break;

default : statements;

Page 10: Modul Pelatihan Java Rev 2.0

10

break;

}

Contohnya

public class CobaSwitch {

public static void main(String[] args) {

int x = 7;

switch(x){

case 1: System.out.println(“Januari”);break;

case 2: System.out.println(“Februari”);break;

case 3: System.out.println(“Maret”);break;

case 4: System.out.println(“April”);break;

case 5: System.out.println(“Mei”);break;

case 6: System.out.println(“Juni”);break;

case 7: System.out.println(“Juli”);break;

case 8: System.out.println(“Agustus”);break;

case 9: System.out.println(“September”);break;

case 10: System.out.println(“Oktober”);break;

case 11: System.out.println(“November”);break;

case 12: System.out.println(“Desember”);break;

default: System.out.println(“Salah input”);break;

}

}

}

2.2 Perulangan pada Java

Perulangan adalah sebuah alur yang memungkinkan satu atau beberapa proses dilakukan beberapa

kali. Beberapa sintaks perulangan yang ada di Java antara lain sebagai berikut.

1. Perulangan for

Sintaks for digunakan untuk melakukan pengulangan sejumlah nilai tertentu. Perulangan akan

dilakukan mulai dari nilai tertentu hingga nilai tertentu dicapai. Sintaks for sebagai berikut :

for (init_expr;boolean testexpr;alter_expr) {

statement or block

}

Contoh penggunaan sintaks for adalah sebagai berikut:

public class ContohFor {

public static void main(String[] args) {

for (int i=0;i<10;i++) {

System.out.println(i);

}

}

}

Pada kode di atas, program akan mengulang proses mencetak nilai variabel i di layar angka. Nilai

variabel i mulai dari 1 kemudian setiap iterasi ditambahkan 1 (i++) hingga bernilai 10.

2. Perulangan while

Sintaks while digunakan untuk melakukan pengulangan selama kondisi tertentu terpenuhi.

Pengecekan kondisi dilakukan sebelum memasuki pengulangan, sehingga ada kemungkinan sebuah

pengulangan tidak dilakukan sama sekali. Sintaks looping while sebagai berikut :

while (boolean testexpr) {

Page 11: Modul Pelatihan Java Rev 2.0

11

statement or block

}

Contoh penggunaan sintaks while adalah sebagai berikut:

public class ContohWhile {

public static void main(String[] args) {

int i = 0;

while (i<10) {

System.out.println(i);

i++;

}

}

}

Pada kode di atas, program akan mengulang proses mencetak nilai variabel i di layar angka.

Proses akan diulangi selama nilai i<10.

3. Perulangan do....while

Sintaks do....while digunakan seperti pada sintaks while. Perbedaannya adalah pengecekan kondisi

pada do....while adalah di akhir sehingga proses pengulangan pasti akan dilakukan minimal sekali.

Sintaks do....while loop, sebagai berikut

do {

statement or block

} while (boolean testexpr)

Contoh penggunaan sintaks do....while adalah sebagai berikut:

public class ContohDoWhile {

public static void main(String[] args) {

int i = 0;

do {

System.out.println(i);

i++;

} while (i<10);

}

}

Page 12: Modul Pelatihan Java Rev 2.0

12

3 Kelas dan Obyek Overview

Bab ini akan menjelaskan tentang dasar Pemrograman Berorientasi Obyek yaitu Kelas dan Obyek.

Penjelasan tentang karakteristik kelas dan obyek, komponen kelas, serta cara pembuatan dan

pendeklarasian kelas di dalam Java. Akan dijelaskan juga tentang cara pengaksesan komponen kelas.

Tujuan

1. Mampu membuat kelas dan obyek

2. Mampu menggunakan array pada Java

3. Mampu membuat atribut bertipe obyek di Java

3.1 Kelas dan Obyek

Obyek merupakan dasar dari struktur Pemograman Berorientasi Obyek (OOP). Fitur dari

OOP adalah Abstraksi, Enkapsulasi, Pewarisan, dan Polymorphism. Fitur Abstraksi yaitu

mengkarakteristikan obyek yaitu dengan pemberian atribut pada suatu obyek, hal ini akan

diimplementasikan dengan pembuatan kelas (class). Kelas mempunyai 2 komponen yaitu Atribut dan

Method. Sedangkan fitur Enkapsulasi digunakan untuk menyembunyikan informasi atau detil dari

obyek yang tidak penting, hal ini diimplementasikan dengan access specifier. Access Specifiers di dalam

Java terdiri dari :

o public : kelas dapat diakses dari manapun termasuk dari kelas lain dan kelas-kelas yang

berada dalam package yang berbeda

o private : kelas dapat diakses oleh anggota kelas itu sendiri.

o protected : kelas dapat diakses oleh kelas turunan

o default : kelas dapat diakses dari manapun tetapi harus berada dalam package yang sama.

Pembuatan kelas di dalam java :

class <classname>

{

//declaration of data member

//declaration of methods

}

Pembuatan kelas lengkap dengan access specifier

class <classname>

{

<access specifier> <deklarasi atribut>

<access specifier> <deklarasi method>

}

Karena dasar pemrograman OOP adalah obyek, sehingga class yang sudah dibuat akan dibuat

obyeknya atau diinstansiasi, cara pembuatan obyek dari kelas adalah :

<class name> <object name>;

<object name> = new <class name>();

Page 13: Modul Pelatihan Java Rev 2.0

13

Untuk menjalankan program dibutuhkan sebuah method main(). Method main() dapat

dideklarasikan di kelas manapun tetapi nama kelas tempat method main() berada harus sama

dengan nama file .java nya. Deklarasi method main :

public static void main(String[] args)

{

//code for the main method

}

Berikut adalah contoh pembuatan kelas dan obyek secara lengkap, berikut dengan main

method-nya

class book

{

int price;

int pages;

public void set(int price,int pages)

{

this.price=price;

this.pages=pages;

}

public void show()

{

System.out.println("Books Information");

System.out.println("Books Price : "+price);

System.out.println("Number of pages : "+pages);

}

}

public class MainBook

{

public static void main(String[] args)

{

book javabook=new book();

javabook.set(60000,100);

javabook.show();

}

}

3.2 Konstruktor

Konstruktor merupakan method yang akan dieksekusi secara otomatis ketika sebuah obyek

dibuat. Method ini mempunyai nama yang sama dengan nama kelas tempat konstruktor

dideklarasikan. Konstruktor tidak mengembalikan nilai dan tidak dapat dideklarasikan sebagai static.

Konstruktor biasanya digunakan untuk memberikan nilai pada atribut ketika obyek dibuat dari kelas.

Sintaks konstruktor adalah :

public class <class name>

{

<constructor name same with class name>();

}

EKA HANDAYANI
Sticky Note
method public : access specifier beda lokal var : cuma bisa diakses dalam method itu saja global var : dapat diakses scr umum
EKA HANDAYANI
Sticky Note
contoh pemanggilan method pada JAVA
EKA HANDAYANI
Sticky Note
this : digunakan karena nama variable di global sm lokal sama. this nya merujuk ke global var
Page 14: Modul Pelatihan Java Rev 2.0

14

Contoh dengan menggunakan konstruktor

public class Employee

{

String EmpName;

int EmpID;

String EmpPosition;

Employee (String name,int Id, String position)

{

EmpName = name;

EmpID = Id;

EmpPosition = position;

}

void Show()

{

System.out.println("Employee Information");

System.out.println("Name : "+EmpName);

System.out.println("ID : "+EmpID);

System.out.println("Position : "+EmpPosition);

}

public static void main(String args[])

{

Employee Empobj;

Emp_obj = new Employee("Mark",10010,"Manager");

Empobj.Show();

}

3.3 Package dan Import

Package merupakan sebuah cara untuk menyatukan beberapa kelas yang memiliki fungsi yang

berhubungan ke dalam sebuah paket. Deklarasi sebuah package diletakkan pada posisi paling atas dari

sebuah kode program.

Import merupakan cara sebuah kelas untuk menggunakan kelas dari package yang berbeda. Deklarasi

import dituliskan di atas nama kelas dan di bawah nama package. Contoh penulisan lengkap deklarasi

package, import dan nama kelas.

package new;

import java.util.*;

class ex {

.......

}

Tanda bintang pada deklarasi import menyatakan bahwa semua kelas di dalam package yang

bersangkutan ikut dipanggil oleh kelas tersebut.

3.4 Penggunaan modifier static

Modifier static digunakan untuk memastikan bahwa sebuah atribut/method dialokasikan hanya sekali di

memory tanpa mempedulikan jumlah obyek yang diinstansiasi dari kelas tersebut. Modifier static hanya

digunakan pada atribut/method, tidak dapat digunakan pada kelas.

class ex {

static value;

}

public class Main {

public static void main(String[] args) {

EKA HANDAYANI
Sticky Note
konstruktor digunakan saat program di instantiasi. nama konstuktor harus sama dg nama kelas
EKA HANDAYANI
Sticky Note
wadah untuk menampung objek
Page 15: Modul Pelatihan Java Rev 2.0

15

ex a = new ex();

ex b = new ex();

ex c = new ex();

a.value = 10;

System.out.println(“Nilai untuk a = ”+a.value);

System.out.println(“Nilai untuk b = ”+b.value);

System.out.println(“Nilai untuk c = ”+c.value);

// Pemanggilan atribut static oleh kelasnya

System.out.println(“Nilai untuk kelas ex = ”+ex.value);

}

}

Hasil dari program tersebut adalah sebagai berikut:

Nilai untuk a = 10

Nilai untuk a = 10

Nilai untuk a = 10

Nilai untuk a = 10

Atribut/method non-static tidak dapat diakses oleh method static. Untuk mengakses atribut/method

non-static pada method static, harus dibuat dulu obyek dari atribut/method kelas yang ingin diakses.

2.5 Array

3.5.1 Mendeklarasikan Array

Array biasanya digunakan untuk mengelompokkan data atau obyek yang memiliki tipe yang sama.

Array memungkinkan untuk mengacu ke sekumpulan obyek dengan nama yang sama. Array dapat dideklarasikan dengan tipe apa saja, baik itu yang bertipe data primitif maupun obyek.

Berikut contoh deklarasi Array :

char s[];

point p[]; // point adalah sebuah kelas

Dalam bahasa pemrograman Java, Array merupakan sebuah obyek meskipun ia terdiri dari elemen

yang bertipe data primitif. Seperti halnya kelas yang lain, ketika mendeklarasikan Array belum

dibentuk sebuah obyek Array. Deklarasi Array hanya membuat sebuah referensi yang dapat digunakan

untuk mengacu ke sebuah obyek Array.

Besarnya memori yang digunakan oleh elemen-elemen Array akan dialokasikan secara dinamis dengan

menggunakan pernyataan new atau dengan array initializer.

Contoh deklarasi array di atas, dengan menggunakan kurung siku setelah nama variabel, merupakan

standar penulisan array dalam C, C++ dan Java. Format demikian agak sulit untuk dibaca. Oleh

karenanya, bahasa Java menggunakan bentuk deklarasi array alternatif dengan menggunakan kurung

siku di sebelah kiri seperti dalam contoh berikut :

char [] s;

point [] p; // point adalah sebuah kelas

Sebuah deklarasi array dapat ditulis sebagai pendeklarasian tipe array di bagian kiri dan nama variabel di bagian kanan. Kedua bentuk deklarasi array di atas dapat digunakan, tetapi sebaiknya konsisten

dalam menggunakan satu bentuk saja. Dalam deklarasi array, tidak ditentukan ukuran aktual dari

array. Ketika mendeklarasikan array dengan kurung siku yang berada di sebelah kiri nama variabel,

kurung siku tersebut berlaku bagi semua variabel yang berada di sebelah kanannya.

3.5.2 Membuat Array

Array dibuat dengan menggunakan keyword new. Contoh di bawah ini membuat sebuah Array dengan

tipe primitif char:

Page 16: Modul Pelatihan Java Rev 2.0

16

s = new char[26];

Indeks array dimulai dengan angka 0. Batasan legal untuk nilai indeks ini adalah dari nol hingga jumlah

elemen array – 1. Apabila program berusaha mengakses array di luar batas yang legal, maka akan

muncul runtime exception.

Untuk membuat Array dengan elemen obyek, gunakan cara penulisan berikut

p = new point[10];

Pernyataan tersebut tidak membuat 10 obyek Point. Untuk membuat obyek Point, gunakan

pernyataan berikut :

p[0] = new point(0, 1);

p[1] = new point(1, 2);

...

3.5.3 Menginisialisasi Array

Java memiliki cara singkat untuk membuat sebuah obyek Array dengan elemen-elemennya memiliki

nilai awal :

String names[] = {"Georgianna","Jen","Simon"};

Kode di atas adalah sama dengan kode berikut ini:

String names[];

names[0] = "Georgianna";

names[1] = "Jen";

names[2] = "Simon";

Cara singkat ini dapat digunakan untuk Array dengan berbagai jenis

tipe, seperti dalam contoh berikut :

MyDate dates[] = {

new MyDate(22, 7, 1964),

new MyDate(1, 1, 2000),

new MyDate(22, 12, 1964),

};

3.5.4 Array Multidimensi

Dalam Java, dapat dibuat Array dari Array sehingga dinamai Array multidimensi. Contoh berikut ini

memperlihatkan cara membuat Array dua dimensi :

int twoDim [][] = new int[4][];

twoDim[0] = new int[5];

twoDim[1] = new int[5];

Array dari Array yang bersifat non-rectangular dapat dibuat seperti dalam contoh berikut :

twoDim[0] = new int[2];

twoDim[1] = new int[4];

twoDim[2] = new int[6];

twoDim[3] = new int[8];

Untuk membuat Array dari Array yang rectangular dengan cara mudah, gunakan bentuk berikut ini :

int twoDim[][] = new int[4][5];

3.5.5 Batasan Array

Dalam bahasa Java, indeks Array dimulai dengan angka nol. Jumlah elemen di dalam Array disimpan

sebagai bagian dari obyek Array di dalam atribut length. Atribut ini dapat digunakan untuk melakukan

proses iterasi pada Array seperti dalam contoh berikut :

Page 17: Modul Pelatihan Java Rev 2.0

17

int list[] = new int[10];

for(int i = 0; i < list.length; i++) {

System.out.println(list[i]);

}

Dengan menggunakan atribut length, pemeliharaan kode program menjadi mudah karena program

tidak perlu mengetahui jumlah eleman Array pada saat kompilasi.

Setelah membuat obyek Array, ukuran Array tersebut tidak dapat diubah. namun demikian, dapat

digunakan variabel referensi yang sama untuk menunjuk ke sebuah obyek Array baru seperti dalam contoh di bawah ini :

int myArray[] = new int[6];

myArray = new int[10];

Dalam kode program ini, obyek Array yang pertama akan hilang kecuali ada variabel lain yang dibuat

untuk merujuk ke obyek Array tersebut.

3.6 Atribut bertipe obyek

Dalam Object Oriented Programming, kelas-kelas yang terbentuk dapat memiliki atribut dengan tipe

obyek lainnya. Hal ini dapat dilihat pada contoh berikut:

//mahasiswa.java

public class mahasiswa {

private String NIM, Nama;

public mahasiswa(String no, String nm) {

this.NIM = no;

this.Nama = nm;

}

public String GetNIM() {

return (NIM);

}

public String GetNama() {

return (Nama);

}

}

//jurusan.java

public class Jurusan {

private String KodeJurusan, NamaJurusan;

private Mahasiswa[] Daftar=new Mahasiswa[10];

public Jurusan(String kode, String nama) {

this.KodeJurusan = kode;

this.NamaJurusan = nama;

}

private static int JmlMhs = 0;

public void AddMahasiswa(Mahasiswa m) {

if(this.JmlMhs<10){

this.Daftar[JmlMhs] = m;

this.JmlMhs++;

}

}

public void DisplayMahasiswa() {

int i;

System.out.println("Kode Jurusan : "+this.KodeJurusan);

System.out.println("Nama Jurusan : "+this.NamaJurusan);

System.out.println("Daftar Mahasiswa :");

Page 18: Modul Pelatihan Java Rev 2.0

18

for (i=0;i<JmlMhs;i++)

System.out.println(Daftar[i].GetNIM()+"

"+Daftar[i].GetNama());

}

}

Pada kode program di atas dapat dilihat bahwa pada satu kelas jurusan terdapat atribut bernama

Daftar yang bertipe array dari obyek Mahasiswa. Penggambaran kode program di atas pada diagram

kelas adalah sebagai berikut:

Gambar 3.1 Diagram kelas Jurusan-Mahasiswa

Dari gambar dapat dilihat bahwa satu kelas Jurusan dapat memiliki beberapa atribut bertipe kelas

Mahasiswa.

Page 19: Modul Pelatihan Java Rev 2.0

19

4 Inheritance dan Polimorfisme Overview

Inheritance dan Polymorphism merupakan konsep OOP yang memberikan fleksibilitas kepada

programmer dalam menulis program. Dengan mengaplikasikan konsep inheritance, sebuah kelas

dapat menurunkan fungsi dan atribut yang dimilikinya kepada kelas yang menjadi turunannya. Dengan

mengaplikasikan konsep polymorphism, programmer dapat memperlakukan seluruh object yang

berasal dari superclass yang sama seakan-akan mereka adalah object dari superclass. Pada Java, konsep

polymorphism diimplementasikan melalui beberapa cara yaitu overloading, overriding, abstract class dan

melalui interface.

Tujuan

1. Memahami dan menerapkan konsep pewarisan dalam OOP

2. Memahami penggunaan kelas abstrak dalam OOP

3. Memahami penggunaan interface dalam OOP

4. Memahami dan menerapkan konsep polimorfisme dalam OOP

4.1 Pewarisan di Java

Pewarisan di Java hanya mengenal pewarisan tunggal, artinya sebuah kelas hanya mewarisi atribut dan

method dari satu kelas induk. Untuk menggunakan pewarisan di Java digunakan keyword extends.

Contoh pewarisan dapat dilihat pada diagram kelas berikut ini:

Gambar 4.1 Contoh Pewarisan Kelas

Implementasi dari diagram kelas di atas dalam Java adalah sebagai berikut:

//Employee.java

public class Employee {

public String name;

public Date birthDate;

public double salary;

public String getDetails() {...}

}

//Manager.java

public class Manager extends Employee {

public String department;

}

Atribut name, birthDate, dan salary serta method getDetails() diturunkan ke kelas

Manager sehingga kelas Manager dapat menggunakan atribut dan method tersebut. Konstruktor dari

kelas induk tidak dapat diturunkan kepada kelas turunannya.

+getDetails() : String

+name : String = ""

+salary : double

+birthDate : Date

Employee

+departement : String

Manager

Page 20: Modul Pelatihan Java Rev 2.0

20

Untuk menggunakan method dan konstruktor dari kelas induk pada kelas anak digunakan keyword

super, contoh:

//Employee.java

public class Employee {

private String name;

private double gaji;

public Employee (String s, double g) {

name = s;

gaji=g;

}

public double getgaji() {

return gaji;

}

}

//Manager.java

public class Manager extends Employee {

private String alamat;

private double tunjangan;

private double bonus;

public Manager(String nama, String s) {

super(nama);

alamat = s;

}

Public double getgaji() {

return (super.getgaji()+tunjangan+bonus);

}

}

4.1.1 Kelas Abstrak

Kelas abstrak merupakan suatu bentuk khusus dari kelas di mana kelas tersebut tidak dapat

diinstansiasi dan digunakan hanya untuk diturunkan ke dalam bentuk kelas konkret atau kelas abstrak

berikutnya.

Kelas abstrak dideklarasikan menggunakan keyword abstract.

Di dalam kelas abstrak dapat dideklarasikan atribut dan method sama seperti kelas konkret, namun

ada juga method abstrak, yaitu suatu method yang tidak mempunyai implementasi hanya memiliki

deklarasi saja, contoh:

public abstract class LivingThing {

public void breath(){

System.out.println("Living Thing breathing...");

}

public void eat(){

System.out.println("Living Thing eating...");

}

public abstract void walk(); //merupakan method abstrak

}

Ketika sebuah kelas mewarisi sebuah kelas abstrak, kelas tersebut harus mendefinisikan implementasi

dari method abstrak yang ada dalam kelas induknya. Jika tidak didefinisikan implementasinya, maka

kelas tersebut akan menjadi kelas abstrak juga, contoh:

public class Human extends LivingThing {

Page 21: Modul Pelatihan Java Rev 2.0

21

//implementasi dari method abstrak walk()

public void walk(){

System.out.println("Human walks...");

}

}

4.1.2 Interface

Interface adalah prototype kelas yang berisi definisi konstanta dan deklarasi method (hanya nama

method tanpa definisi kode programnya). Dalam sebuah interface:

- Semua atribut adalah public, static dan final (semua atribut bertindak sebagai konstanta) secara

default. Artinya, jika tidak dideklarasikan secara eksplisit, maka sebuah atribut memiliki sifat-

sifat tersebut secara otomatis.

- Semua method adalah abstract dan public secara default. Artinya, jika tidak dideklarasikan

secara eksplisit, maka sebuah method memiliki sifat-sifat tersebut secara otomatis.

- Tidak boleh ada deklarasi konstruktor.

- Interface dapat meng-extend satu atau beberapa interface lainnya.

Dengan adanya interface, Java menyediakan sebuah fitur untuk keperluan pewarisan jamak (multiple

inheritance).

Contoh interface dan kegunaannya:

Gambar 4.2 Contoh Interface

Untuk membuat interface di Java digunakan keyword interface. Source code untuk diagram kelas di atas

dalam Java adalah sebagai berikut:

//Relation.java

public interface Relation {

public boolean isGreater( Object a, Object b);

public boolean isLess( Object a, Object b);

public boolean isEqual( Object a, Object b);

}

//Line.java

public class Line implements Relation {

private double x1;

private double x2;

private double y1;

private double y2;

public Line(double x1, double x2, double y1, double y2){

this.x1 = x1;

this.x2 = x2;

this.y1 = y1;

this.y2 = y2;

}

Page 22: Modul Pelatihan Java Rev 2.0

22

public double getLength(){

double length = Math.sqrt((x2-x1)*(x2-x1) + (y2-y1)* (y2-y1));

return length;

}

public boolean isGreater( Object a, Object b){

double aLen = ((Line)a).getLength();

double bLen = ((Line)b).getLength();

return (aLen > bLen);

}

public boolean isLess( Object a, Object b){

double aLen = ((Line)a).getLength();

double bLen = ((Line)b).getLength();

return (aLen < bLen);

}

public boolean isEqual( Object a, Object b){

double aLen = ((Line)a).getLength();

double bLen = ((Line)b).getLength();

return (aLen == bLen);

}

}

4.1.3 Beberapa Catatan tentang Pewarisan

1. Sebuah kelas dengan akses public bersifat visible oleh semua kelas dari semua package.

Visibilitas kelas berarti sebuah kelas dapat:

a. Membuat instance dari kelas lain yang visible

b. Meng-extend sebuah kelas lain yang visible

c. Mengakses method dan atribut dari kelas lain yang visible

2. Kelas dapat diberi modifier final atau abstract.

a. Sebuah kelas tidak dapat final dan abstract sekaligus.

b. Sebuah kelas yang final tidak dapat diturunkan.

c. Sebuah kelas yang abstract tidak dapat diinstansiasi.

d. Sebuah method abstract di dalam sebuah kelas berarti kelas tersebut adalah abstract.

e. Sebuah kelas abstract dapat memiliki beberapa abstract dan juga beberapa concrete

method. Concrete method ditandai dengan:

i. Tidak diberi modifier abstract.

ii. Memiliki kurung kurawal dan penutup pada deklarasi method-nya.

f. Sebuah kelas concrete yang meng-extend sebuah kelas abstract harus

mengimplementasikan seluruh method abstract pada superclass-nya.

4.2 Konsep Poliformisme

Memahami proses terjadinya Virtual Method Invocation Tulislah listing program berikut ini dan amati

yang terjadi pada saat terjadinya Virtual Method Invocation.

Page 23: Modul Pelatihan Java Rev 2.0

23

Gambar 4.3 Virtual Method Invocation

Ketika program tersebut dijalankan, akan tampak hasil seperti di bawah ini :

Nilai x = 5

Ini class Child

Mengimplementasikan UML class diagram dalam program

Suatu program terdiri dari class Pegawai sebagai parent class, dan class Manajer dan

class Kurir sebagai subclass. Buatlah suatu program yang menerapkan konsep polymorphic

argument sebagaimana yang telah disinggung dalam pembahasan sebelumnya.

Gambar 4.4 Contoh Class diagram

Page 24: Modul Pelatihan Java Rev 2.0

24

Transformasikan class diagram di atas ke dalam bentuk program?. Tulislah listing program berikut

ini sebagai pengetesan.

Gambar 4.5 Implementasi class diagram

Lakukan kompilasi pada program di atas dan jalankan.

Bayaran untuk Manajer : 850

Bayaran untuk Programmer : 630

4.2.1 Overloading

Mengimplementasikan UML class diagram dalam program untuk class Kalender

Gambar 4.6 Kelas Kalender

Dari class diagram di atas, desainlah suatu class yang memenuhi konsep enkapsulasi.

Untuk nilai inisialisasi, dipakai 1-1-2000. Pakailah kata kunci this untuk mempersingkat

pengkodean. Tulislah listing program berikut ini sebagai pengetesan.

Page 25: Modul Pelatihan Java Rev 2.0

25

Gambar 4.7 Penggunaan kelas Kalender

Lakukan kompilasi pada program di atas dan jalankan.

Waktu awal : 8-1-2000

1 hari setelah waktu awal : 9-1-2000

Waktu berubah : 1-6-2003

1 bulan setelah itu : 1-7-2003

Waktu berubah : 20-10-2004

1. tahun setelah itu : 20-10-2005

4.2.2 Overriding

Overriding adalah suatu keadaan di mana method pada subclass menolak method pada parent

class-nya. Overriding mempunyai ciri-ciri sebagai berikut :

1. Nama method harus sama

2. Daftar parameter harus sama

3. Return type harus sama atau bertipe turunan dari return type parent class

Berikut ini contoh terjadinya overriding di mana method Info() pada class Child meng-

override method Info() pada class parent:

Page 26: Modul Pelatihan Java Rev 2.0

26

Gambar 4.8 Contoh overloading

Method yang terkena override (overridden method) diharuskan tidak boleh mempunyai modifier

yang lebih luas aksesnya dari method yang meng-override (overriding method).

4.2.3 Beberapa Catatan Penting tentang Polimorfisme

1. Sebuah reference variable tidak dapat berubah tipe, tapi dapat merujuk ke obyek yang bertipe

subclass variabel tersebut.

2. Sebuah obyek dapat diacu oleh beberapa reference variable selama memiliki tipe yang sama

atau merupakan tipe superclass obyek tersebut.

3. Method yang dapat dipanggil ditentukan oleh tipe reference variable, bukan tipe obyeknya.

4. Method yang di-override yang digunakan ditentukan oleh tipe obyek, bukan tipe reference

variable.

5. Terdapat dua jenis reference variable casting:

ii. Downcasting: Sebuah reference variable merujuk kepada obyek bertipe subclass dapat di-

assign ke reference variable bertipe subclass dengan melakukan casting secara explisit.

Reference variable bertipe subclass tersebut dapat mengakses properti dari kelas tipenya.

class parent { }

class child extends parent { }

public class Main {

public static void main(String[] args) {

parent a = new child();

child b = (child) a;

}

}

iii. Upcasting: Sebuah reference variable dapat di-assign ke reference variable bertipe superclass-

nya secara implisit.

class parent { }

class child extends parent { }

public class Main {

public static void main(String[] args) {

child a = new child();

parent b = a;

Page 27: Modul Pelatihan Java Rev 2.0

27

}

}

6. Hanya method yang diturunkan yang dapat di-override. Method yang bersifat private tidak

diturunkan. Sebuah�subclass menggunakan super.overridden_Method_Name() untuk

memanggil versi superclass dari overridden method.

7. Sebuah method yang di-overload:

a. Harus memiliki daftar argumen yang berbeda

b. Boleh memiliki return type berbeda

c. Boleh memiliki access specifier yang berbeda

d. Method dari superclass dapat di-overload oleh subclass

Page 28: Modul Pelatihan Java Rev 2.0

28

5 Exception Handling Overview

Bab ini akan menjelaskan tentang Exception di Java, apa yang dimaksud dengan Exception, bagaimana

menangkap Exception. Serta akan dijelaskan throwing exception dan membuat user define exception.

Tujuan

1. Mengetahui tentang Exception di Java.

2. Mengetahui kelas-kelas exception di Java

3. Mengetahui bagaimana Exception muncul dan cara menangkap Exception

4. Mengetahui cara melempar Exception

5. Mengetahui tentang User Define Exception

Ketika sebuah exception muncul selama eksekusi program, dikatakan bahwa exception telah dilempar

(exception is thrown). Ketika hal ini terjadi program diberhentikan dan program bisa rusak.

Bagaimanapun, kegagalan program dapat dihindari jika exception yang dilempar dapat ditangkap dan

dikelola sebagaimana mestinya. Sebuah exception dapat dilempar di suatu bagian program dan dapat

ditangkap di bagian lain dari program tersebut. Exception yang tidak ditangkap akan membuat

program gagal. Contoh : Jika terjadi pembagian dengan nol atau membuka file yang tidak ada, maka

exception akan muncul.

Ketika sebuah exception dilempar, hal yang sebenarnya dilempar adalah sebuah obyek. Obyek ini

membawa informasi dari tempat di mana exception di tangkap dan dikelola. Biasanya sebuah obyek

exception mengandung pesan error yang mendeskripsikan apa yang terjadi sehingga menyebabkan

exception dan dapat berisi data lain.

Semua obyek exception merupakan subclass dari kelas standar java.lang.Throwable, dan

subclass ini diatur dalam hirarki kelas yang kompleks. Class Throwable mempunyai turunan Class

yaitu class Error dan Exception. Kedua kelas ini nanti yang akan mempunyai beberapa turunan. Subclass

yang ada di bawah Error merupakan kelas yang merepresentasikan error serius di dalam Java Vitual

Machine yang membuat program di terminasi karena terdapat masalah. Umumnya, sebaiknya tidak

dilakukan try catch pada error. Subclass Exception merepresentasikan exception yang biasanya disebut

error tetapi error ini merupakan error yang dapat di atasi dengan cara tertentu.

Kelas Exception mempunyai beberapa subclass seperti RunTimeException,

InterruptedException, dan IOException. Exception RunTimeException

mengelola exception yang muncul di dalam program ketika runtime. Untuk lebih lengkapnya, dapat

dibaca di javadoc manual. Berikut beberapa penyebab exception muncul :

Tabel 5.1 Contoh Exception

Exception Penyebab

IllegalArgumentException Muncul ketika memberikan argumen yang tidak

sesuai dengan tipe data pada suatu method

ArrayIndexOutOfBoundsException Muncul ketika mengakses elemen array yang tidak

terdapat pada array tersebut (melampui batas

indeks)

NumberFormatException Muncul ketika ingin mengubah sebuah string ke

format numerik

Page 29: Modul Pelatihan Java Rev 2.0

29

ArithmeticException Muncul ketika membuat sebuah error dalam

aritmatika seperti pembagian dengan nol

NullPointerException Muncul ketika suatu aplikasi berusaha menggunakan

obyek tanpa mengalokasikan memori

ClassCastException Muncul ketika terjadi kesalahan melakukan casting

sebuah obyek

Exception secara umum dibagi dua:

1. Checked exception, yakni exception yang akan dicek pada saat dilakukan kompilasi. Exception ini

terdiri dari seluruh turunan kelas Exception kecuali RunTimeException. Exception ini harus

ditangani secara explisit menggunakan mekanisme exception handling.

2. Unchecked exception, yakni exception yang tidak dicek pada saat dilakukan kompilasi. Exception

ini terdiri dari turunan kelas Error dan RunTimeException beserta seluruh turunannya.

5.1 Mengimplementasikan Exception Handling

Ketika sebuah error muncul di dalam method, Java membuat sebuah obyek Exception. Setelah

membuat obyek exception, Java mengirimkannya ke program dengan melemparkan exception (throwing

exception). Exception yang dlempar perlu ditangani menggunakan exception handler dan diproses.

Untuk mengimplementasikan Exception handling digunakan keyword berikut :

o Try

o Catch

o Finally

o Throw

o Throws

5.1.1 Statement Try dan Catch

Untuk menangkap exception di dalam program java, diperlukan Statement try. Blok Statement

try membingkai kode yang kemungkinan akan memunculkan exception dan mendefinisikan exception

handler yang dapat menanganinya. Blok catch digunakan sebagai exception handler. Blok try harus

mempunyai minimal satu buah blok catch yang mengikutinya. Klausa catch menspesifikasikan tipe

exception yang akan ditangani. Lingkup dari blok catch dibatasi oleh Statement yang ada di dalam blok

try. Statement untuk mendeklarasikan blok try catch :

try {

//Statements that cause an exception

}

catch(<exception name> <object name>){

//error handling code

} Komputer akan mengeksekusi statement yang ada di dalam blok try. Jika tidak ada exception

yang muncul ketika dieksekusi maka Statement catch tidak akan di jalankan. Jika sebuah exception

muncul maka blok catch akan langsung dijalankan. Contoh :

public class ArithmeticException{

public static void main (String[] args){

int num1=5, num2=0;

int num3=num1/num2;

Page 30: Modul Pelatihan Java Rev 2.0

30

System.out.println(“The num3 = “+num3);

}

} Jika program di atas di compile maka tidak ada error, tetapi setelah di eksekusi, handler pada

Java runtime sistem akan melempar sebuah exception ketika terjadi pembagian dengan nol sehingga

akan dibuat sebuah obyek dari kelas exception yang dilempar yaitu ArithmeticException.

Jika sebuah exception muncul di dalam blok try maka exception handler yang berkaitan akan

menangani exception tersebut, pada contoh di atas karena muncul exception

ArithmeticException maka akan dibuat exception handler untuk ArithmeticException

public class ArithmeticException{

public static void main (String[] args){

int num1=5, num2=0;

try{

int num3=num1/num2;

System.out.println(“The num3 = “+num3);

}

catch(ArithmeticException obj){

System.out.println(“Division by zero”);

}

}

} Dengan menangani exception maka program terhindar dari kerusakan. Sebelum isi dari catch

dieksekusi, obyek yang merepresentasikan exception diletakkan ke dalam variabel obj, yang berisi data

tentang exception.

5.1.2 Multiple Catch

Sebuah blok try dapat diikuti oleh banyak blok catch. Hal ini penting ketika sebuah blok try

mempunyai Statement yang mungkin akan memunculkan berbagai tipe exception. Contoh :

public class MultipleCatch{

public static void main (String[] args){

int num1=5, num2=0;

int arrNum[]= {1,2,3 };

try{

int num3=num1/num2;

System.out.println(“The num3 = “+num3);

System.out.println(“The 3 elemen is “+ArrNum[3]);

}

catch(ArithmeticException obj){

System.out.println(“Division by zero”);

}

catch(ArrayIndexOutOfBondException obj){

System.out.println(“Error…Out Of Bounds”);

}

Page 31: Modul Pelatihan Java Rev 2.0

31

catch(Exception obj){

System.out.println(“Other error”);

}

}

}

Pada kode di atas terdapat tiga catch untuk menangani exception yaitu ArithmeticException,

ArrayIndexOutOfBoundException, dan Exception. Blok catch yang pertama akan dieksekusi jika di dalam

blok try melempar ArithmeticException, blok catch yang kedua akan dieksekusi jika di dalam blok try

melempar ArrayIndexOutOfBoundException, dan blok catch yang terakhir akan menangkap exception

yang lain. Ketika program mengeksekusi int num3=num1/num2;, maka ArithmeticException akan

muncul dan akan ditangkap oleh blok catch yang pertama (ArithmeticException obj).

Kelas Exception merupakan superclass dari semua tipe kelas exception. Jika blok catch yang pertama

berisi obyek dari kelas Exception maka blok catch berikutnya tidak akan dieksekusi, hal ini disebut

unreachable code. Untuk menghindari error unreachable code, maka catch yang di dalamnya

mengandung kelas Exception diletakkan pada urutan blok catch yang terakhir.

5.1.3 Statement Finally

Statement yang berada di dalam blok finally akan dieksekusi paling akhir ketika sedang mengeksekusi blok try, meskipun tidak ada exception yang muncul atau ada exception yang muncul.

Statement finally digunakan untuk melakukan sesuatu yang penting ketika terdapat exception atau

tidak. Sintaks try-catch-finaly :

try{

//block of code

}

catch (<exception name> <object name>){

//block of exception code

}

finally{

//block of code that is always executed

}

Jika sebuah exception dilempar atau tidak dilempar, blok finally akan dieksekusi meskipun tidak ada

Statement catch yang cocok dengan exception yang muncul. Untuk menghindari duplikasi kode maka

dapat diletakkan di dalam blok finally. Blok finally merupakan pilihan, boleh ada atau tidak di dalam try

catch blok, tetapi hanya satu blok finally saja yang dapat dibuat dalam satu buah blok try.

5.1.4 Throwing Exception

Suatu saat dibutuhkan untuk melempar exception pada program yang dibuat. Hal ini terjadi jika

di dalam program ditemukan beberapa exceptional atau kondisi error tetapi tidak ada alasan untuk

menangani error tersebut di mana permasalahan ditemukan. Program dapat melempar sebuah

exception dengan harapan dapat ditangkap dan ditangani oleh blok catch. Hal ini dapat dilakukan

dengan melempar exception secara eksplisit dengan menggunakan Statement throw. Contoh:

dibutuhkan untuk melempar exception ketika user salah memasukkan nilai.

Statement throw akan menyebabkan terminasi dari aliran control program Java dan menghentikan

eksekusi ketika Statement tersebut dieksekusi. Exception yang dilempar oleh Statement throw akan ditangkap oleh blok catah yang ada, jika tidak ada blok catch yang sesuai dengan exception yang

dilempar maka program akan diterminasi. Contoh pengggunaan Statement throw:

public class ThrowingStatement{

Page 32: Modul Pelatihan Java Rev 2.0

32

static double root(double A,double B, double C){

double disc=0;

try {

if(A==0){

throw new IllegalArgumentException("A can't be zero");

}

else{

disc = (B*B)-(4*A*C);

if (disc<0)

throw new IllegalArgumentException("Discriminant< 0");

}

}

//endtry

catch(IllegalArgumentException obj){

System.out.println("Illegal Argument in : "+obj);

}

return ((-B + Math.sqrt(disc))/(2*A));

}

public static void main(String[] args){

double Ans = root(0,2,4);

}

}

Program di atas mempunyai kondisi A!= 0dan B*B-4*A*C>=0. Method akan melempar sebuah

exception IllegalArgumentException jika kondisi tersebut tidak terpenuhi. Ketika sebuah

kondisi illegal ditemukan dalam method, melempar sebuah exception merupakan cara yang masuk akal.

Jika program yang memanggil method mengetahui cara menangani error, maka dapat menangkap

exception, jika tidak maka program akan rusak dan harus diperbaiki.

Statement Throws digunakan oleh method untuk menspesifikasikan tipe-tipe exception yang akan dilempar di dalam method. Jika method yang melempar exception tidak dapat menanganinya maka

exception harus ditangani oleh bagian yang memanggil method tersebut. Hal ini dilakukan dengan

Statement throws. Statement throws digunakan untuk menuliskan tipe-tipe exception yang terdapat di

dalam method. Contoh :

class ThrowingStatement{

static double root(double A,double B, double C) throws

IllegalArgumentException{

double disc=0;

if(A==0){

throw new IllegalArgumentException("A can't be zero");

}

Page 33: Modul Pelatihan Java Rev 2.0

33

else{

disc = (B*B)-(4*A*C);

if (disc<0)

throw new IllegalArgumentException("Discriminant< 0");

}

return ((-B + Math.sqrt(disc))/(2*A));

}

public static void main (String[] args){

double Ans;

try{

Ans = root(0,2,4);

}

catch(IllegalArgumentException obj){

System.out.println("Illegal Argument in : "+obj);

}

}

}

5.2 User defined Exception

User defined exception merupakan exception yang dibuat oleh programmer sesuai dengan

permintaan pada aplikasi. Tiap aplikasi yang dibuat kemungkinan mempunyai batasan yang spesifik.

Statement throw, throws, try, catch, dan finally digunakan dalam mengimplementasikan user define

exception. Kelas Exception menuruni semua method yang ada di dalam kelas Throwable. User defined

exception juga menuruni semua method yang didefinisikan di dalam kelas Throwable. Contoh :

class MyException extends Exception{

public String toString(){

return "MyException caught : The Input value cannot less than

0";

}

}

public class UserException {

static int TestUAQ, TestUTQ;

static void setValue(int UAQ,int UTQ) throws MyException{

if ((UAQ<0)||(UTQ<0))

throw new MyException();

TestUAQ=UAQ;

TestUTQ=UTQ;

System.out.println("The value UAQ : "+TestUAQ+", UTQ :

"+TestUTQ);

Page 34: Modul Pelatihan Java Rev 2.0

34

}

public static void main (String[] args){

try{

setValue(80,90);

setValue(-70,60);

}

catch(MyException obj){

System.out.println("The Exception raised : "+obj);

}

}

}

5.3 Beberapa Catatan tentang Exception

1. Pada multiple catch exception, exception yang merupakan superclass harus berada di bawah

exception subclass-nya.

2. Kode program pada klausa finally akan selalu dieksekusi, meskipun terjadi exception atau tidak,

meskipun exception yang ada berhasil ditangani atau tidak.

3. Sebuah method yang meng-override tidak dapat mendeklarasikan checked exception baru yang

tidak dideklarasikan oleh method yang di-override.

4. Sebuah method yang meng-override tidak dapat mendeklarasikan checked exception yang

merupakan superclass dari exception yang dideklarasikan pada method yang di-override.

5. Sebuah method yang meng-override dapat mendeklarasikan checked exception yang merupakan

turunan dari exception yang dideklarasikan pada method yang di-override.

6. Sebuah method yang meng-override dapat mendeklarasikan segala jenis unchecked exception

tanpa peduli apakah exception tersebut dideklarasikan oleh method yang di-override.

Page 35: Modul Pelatihan Java Rev 2.0

35

6 Input/Output Overview

Dalam bab ini akan dibahas tentang bagaimana cara melakukan pengaksesan data kedalam file, baik

melakukan proses pembacaan ataupun penulisan. Akan dibahas tentang pengaksesan data

menggunakan stream dan random access file.

Tujuan

1. Penggunaan file menggunakan kelas File.

2. Penggunaan byte stream.

3. Penggunaan character stream.

4. Pengaksesan dengan random-access file

6.1 Implementasi Kelas File

Kelas file dalam package java.io menyediakan berbagai macam method untuk mengakses atribut-

atribut dari file dan direktori, seperti hak akses dari, tanggal pembuatan dan akses, alamat dari

direktori di mana file tersebut berada, dan lain-lain. Sebuah obyek yang dibuat dari kelas File yang

akan merepresentasikan file atau direktori. Terdapat beberapa konstruktor yang bisa kita gunakan

untuk membuat instance pada kelas File:

1. File(File obyekDirektori, String namaFile):

Membuat sebuah instance pada kelas File di mana obyekDirektori adalah sebuah obyek

dari kelas File yang menunjuk sebuah direktori, sedang namaFile adalah file yang akan

diakses.

2. File (String alamatDirektori):

Membuat sebuah obyek dari kelas File. alamatDirektori merupakan alamat di

direktori mana file yang akan diakses berada.

3. File(String alamatDirektori, String namaFile):

Membuat sebuah obyek dari kelas File. alamatDirektori menentukan alamat direktori

dari file sedangkan nama file menentukan file mana yang akan diakses.

Keterangan: Alamat disini bisa berupa alamat absolut atau alamat relatif.

Terdapat beberapa method yang bisa digunakan di dalam sebuah obyek dari kelas File, antara lain:

Tabel 6.1 Method dalam kelas File

Method Keterangan

boolean canRead() Akan mengembalikan nilai true jika file yang sedang diakses saat ini dapat

dibaca (readable). Jika tidak akan mengembalikan nilai false.

boolean

canWrite()

Akan mengembalikan nilai true jika file bisa ditulis (writable). Jika tidak

akan mengembalikan nilai false

boolean exists() Akan mengembalikan nilai true jika argumen yang ditunjuk pada konstruktor instantiasi obyek merupakan sebuah file atau direktori. Jika

bukan file atau direktori akan mengembalikan nilai false.

boolean isFile() Akan mengembalikan nilai true jika argumen yang ditulis dalam

Page 36: Modul Pelatihan Java Rev 2.0

36

konstruktor merupakan sebuah file. Selain itu akan bernilai false.

boolean

isDirectory()

Akan mengembalikan nilai true jika argumen yang ditulis dalam

konstruktor adalah sebuah direktori. Selain itu akan mengembalikan nilai

false.

boolean

isAbsolute()

Akan mengembalikan nilai true jika argument yang ditulis dalam

konstruktor adalah sebuah alamat absolut dari file atau direktori. Selain

itu akan mengembalikan nilai false.

String

getAbsolutePath()

Akan mengembalikan sebuah string alamat absolut dari sebuah file atau

direktori.

String getName() Akan mengembalikan sebuah string nama dari file atau direktori.

String getPath() Akan mengembalikan sebuah string alamat dari di mana file atau

direktori tersebut.

String

getParent()

Akan mengembalikan sebuah string alamat induk dari file atau direktori

tersebut. (direktori di mana file atau direktori tersebut disimpan)

long length() Mengembalikan panjang dari file, dalam ukuran byte. Jika berupa sebuah

direktori akan mengembalikan nilai 0 (nol).

long

lastModified()

Akan mengembalikan sebuah representasi waktu kapan terakhir kali file

atau direktori tersebut dimodifikasi.

String[] list() Akan mengembalikan sebuah array berbentuk string yang akan

menyimpan daftar isi (file dan direktori) dari sebuah direktori. Jika

bukan sebuah direktori akan mengembalikan nilai null.

Berikut adalah contoh penggunaan kelas File.

import java.io.File;

import java.io.IOException;

class AksesFile{

String daftar[] = new String[20];

public void displayData() {

try {

File obj1 = new File("D:\\IO","KelasFile.java");

File obj2 = new File("D:\\IO");

System.out.println("Sebuah obyek file");

System.out.println("Nama File : "+obj1.getName());

System.out.println("getAbsolutPath : "+obj1.getAbsolutePath());

System.out.println("getPath : "+obj1.getPath());

System.out.println("Lokasi : "+obj1.getParent());

System.out.println("Panjang : "+obj1.length());

Page 37: Modul Pelatihan Java Rev 2.0

37

System.out.println("Last Modif : "+obj1.lastModified());

System.out.println();

System.out.println("Sebuah obyek Direktori");

System.out.println("Nama Direktori : "+obj2.getName());

System.out.println("getAbsolutPath : "+obj2.getAbsolutePath());

System.out.println("getPath : "+obj2.getPath());

System.out.println("Lokasi : "+obj2.getParent());

System.out.println("Panjang : "+obj2.length());

System.out.println("last Modif : "+obj2.lastModified());

daftar = obj2.list();

System.out.println("Isi dari direktori : ");

for (int i=0;i<daftar.length;i++) {

System.out.println("\t"+daftar[i]);

}

}

catch (Exception e) {

System.out.println(e);

}

}

}

public class KelasFile {

public static void main(String[] args){

AksesFile aksesFile = new AksesFile();

aksesFile.displayData();

}

}

Keluaran dari program di atas adalah:

Page 38: Modul Pelatihan Java Rev 2.0

38

Gambar 6.1 Contoh penggunaan File

6.2 Penggunaan Stream dalam Java

Stream dalam sebuah program java digunakan untuk melakukan pembacaan atau penulisan kedalam

sebuah asal (source) atau tujuan (destination). Operasi Input output (I/O) terdiri dari dua bagian, yaitu

input yang berasal dari sebuah sumber (misal sebuah keyboard, jaringan komputer, file) kemudian

data masukan tadi akan diproses dan akan dikeluarkan menuju sebuah tujuan (misal monitor, jaringan

komputer, file).

Di dalam Java, package java.io terdiri dari berbagai macam kelas dan interface stream I/O yang

mendukung operasi I/O. Stream dibagi menjadi dua jenis, byte stream dengan unit dasar satu byte data

dan character stream dengan dasar satu karakter Unicode.

6.2.1 Implementasi Byte Stream

Byte stream menggunakan byte sebagai unit dasar operasi baca dan tulis terhadap streamnya.

Terdapat dua Kelas byte stream yaitu InputStream dan OutputStream.

6.2.1.1 Ouput Stream

Kelas OutputStream merupakan stream yang digunakan untuk menulis data dalam bentuk

byte. Beberapa contohnya adalah digunakan untuk menulis kedalam layar monitor atau file. Beberapa

method yang digunakan dalam kelas OutputStream

Tabel 6.2 Method pada kelas OutputStream

Method Keterangan

write(byte b) Menulis sekian b byte kedalam sebuah file.

write(byte b[])

Menulis array berisi byte kedalam sebuah file.

write(byte b[],

int offset, int

length)

Menulis kedalam byte di mana datanya berasal dari sebuah array b,

dimulai dari lokasi offset sebanyak sekian length byte.

close() Menutup stream output.

flush() Menghapus buffer stream output.

Kelas System dalam package java.lang memiliki sebuah variabel statik yang digunakan untuk

merepresentasikan sebuah layar monitor. Variabel tersebut adalah System.out, yang merupakan

instance dari kelas PrintStream yang bisa menggunakan method write() untuk menulis

kedalam layar monitor. Contoh penggunaannya sebagai berikut.

import java.io.*;

public class CobaSystemOut {

public static void main(String[] args) {

byte[] data = new byte[10];

int panjang=0;

System.out.print("Masukkan data : ");

try {

panjang=System.in.read(data);

Page 39: Modul Pelatihan Java Rev 2.0

39

System.out.print("Yang anda ketik : ");

System.out.write(data);

System.out.println("Panjang Karakter : "+panjang);

System.out.print("index ke-1 sebnyk 3 : ");

System.out.write(data,1,3);

} catch (IOException e) {

System.out.print("Terjadi Exception");

}

}

}

Untuk melakukan operasi penulisan ke dalam sebuah file digunakan kelas FileOutputStream.

Beberapa konstruktor yang bisa digunakan dalam kelas FileOutputStream adalah:

1. FileOutputStream(File objFile):

Membuat sebuah obyek File stream yang menghubungkan dengan sebuah file. objFile

merupakan sebuah file obyek yang merepresentasikan sebuah file.

2. FileOutputStream(String alamatFile):

Membuat sebuah obyek File stream yang menghubungkan dengan sebuah file. String

alamatFile merupakan alamat dari file yang akan dijadikan tujuan penulisan.

3. FileOutputStream(File objFile, boolean bool):

Membuat sebuah obyek File stream yang menghubungkan dengan sebuah file. objFile

merupakan sebuah file obyek yang merepresentasikan sebuah file, sedang boolean bool jika

bernilai true menunjukkan bahwa penulisan file dilakukan dalam mode append (penambahan

data di akhir file)

4. FileOutputStream(String s, boolean bool):

Membuat sebuah obyek File stream yang menghubungkan dengan sebuah file. String

alamatFile merupakan alamat dari file yang akan dijadikan tujuan penulisan, sedang

boolean bool jika bernilai true menunjukkan bahwa penulisan file dilakukan dalam mode

append (penambahan data di akhir file)

Beberapa method untuk melakukan penulisan kedalam stream dengan kelas FileOutputStream

Tabel 6.3 Method dalam kelas FileOutputStream

Method Keterangan

write(byte b) Menulis byte b kedalam file stream.

write(byte b[], int

offset, int length)

Menulis sejumlah length byte dari posisi offset kedalam

file stream, sebanyak length byte.

Berikut adalah contoh dari penggunaan FileOutputStream.

import java.io.*;

public class ContohFOS {

public static void main(String args[]){

Page 40: Modul Pelatihan Java Rev 2.0

40

byte buffer[]=new byte[100];

try{

System.out.println("Masukkan data:");

System.in.read(buffer, 0, 100);

}

catch(IOException e){

System.out.println(e);

}

try{

FileOutputStream objFOS;

objFOS= new FileOutputStream("textFOS.txt");

objFOS.write(buffer);

System.out.println("Data telah ditulis...");

}

catch(FileNotFoundException f){

System.out.println(f);

}

catch(IOException i){

System.out.println(i);

}

}

}

Runtime dari kode di atas

Gambar 6.2 Contoh FOS

Hasil penulisan dalam file textFOS.txt

Page 41: Modul Pelatihan Java Rev 2.0

41

Gambar 6.3 textFOS.txt

6.2.1.2 Input Stream

Input stream adalah stream yang membaca data dalam bentuk byte. Java menyediakan kelas

InputStream yang merupakan kelas abstrak untuk melakukan proses input untuk membaca data

dari berbagai macam sumber (seperti file, keyboard dan jaringan) dan menampilkan datanya kedalam

layar monitor. Beberapa method yang digunakan dalam kelas InputStream.

Tabel 6.4 Method InputStream

Method Keterangan

int read() Membaca satu byte data dari input stream.

int read(byte b[]) Membaca beberapa byte dari input stream dan

memasukkannya kedalam array b

int read(byte b[], int

offset, int length)

Membaca sebanyak length byte dari stream dan

memasukkannya kedalam array b.

Jika memasuki akhir dari stream akan mengembalikan nilai -1

available() Mengembalikan jumlah byte yang bisa dibaca dari sebuah

stream.

long skip(long n) Melewatkan sekian n byte dari input stream.

mark(int nbyte): Menandai posisi yang ada pada input stream saat ini.

reset(): Mengembalikan posisi kepada lokasi yang telah ditandai dari

method mark.

void close()

Menutup input stream dan melepaskan sumber daya yang

terikat pada stream tersebut.

Kelas System dalam package java.lang memiliki satu anggota static yang merupakan referensi

dari sebuah keyboard. Variabel dengan nama System.in merupakan sebuah instance dari kelas

InputStream yang dapat digunakan untuk membaca dari dari keyboard. Berikut adalah contoh

penggunaan System.in yang akan digunakan untuk membaca inputan user dari keyboard.

public class CobaSystemIn{

public static void main(String args[]){

byte buffer[]=new byte[80];

System.out.print("Ketik sesuatu, ");

System.out.print("akhiri dengan ");

System.out.println("menekan tombol enter");

try {

System.in.read(buffer);

}

catch(Exception e) {

Page 42: Modul Pelatihan Java Rev 2.0

42

System.out.println(e);

}

System.out.println();

String str=new String(buffer);

System.out.println("isi Teks:");

System.out.print(str);

}

}

Berikut adalah hasil dari kode di atas:

Gambar 6.4 Obyek System.in

Untuk melakukan operasi input pembacaan data dari dalam file digunakan kelas

FileInputStream. Berikut adalah beberapa konstruktor yang bisa digunakan dalam kelas

FileInputStream.

1. FileInputStream(File namaFile):

Membuat sebuah obyek yang akan menggunakan file dengan nama namaFile sebagai sumber inputannya.

2. FileInputStream(String alamatFile):

Membuat sebuah obyek yang akan menggunakan sebuah file dengan alamat alamatFile

(berbentuk string) sebagai sumber inputannya.

3. FileInputStream(FileDescriptor obyekFile):

Membuat sebuah obyek yang akan menggunakan sebuah obyekfile yang sudah ditentukan

sebelumnya sebagai sumber inputannya.

Beberapa method yang digunakan dalam kelas FileInputStream

Tabel 6.5 Method dalam kelas FileInputStream

Method Keterangan

read() Membaca satu byte data dari stream inputan.

read(byte b[], int offset,

int length)

Membaca sekian length byte data dari stream input

dan memasukkannya kedalam sebuah array b.

long skip(long n) Melewatkan sekian n byte data dari stream input.

Berikut adalah contoh penggunaan FileInputStream.

Page 43: Modul Pelatihan Java Rev 2.0

43

import java.io.*;

public class ContohFIS{

public static void main(String args[]){

byte buffer[]=new byte[100];

try{

FileInputStream file=new FileInputStream("dokumen.txt");

file.read(buffer,0,50);

}

catch(Exception e){

System.out.println(e);

}

System.out.println("Isi file dokumen.txt adalah:");

String str=new String(buffer);

System.out.println(str);

}

}

Berikut adalah hasil dari kode di atas

Gambar 6.5 Contoh FIS

6.2.2 Implementasi Character Stream

Kelas-kelas stream karakter menangani proses I/O dengan basis unit adalah sebuah karakter dengan

menggunakan representasi Unicode yang disimbolkan dengan 16 bit. Stream karakter terdiri dari

kelas-kelas Reader dan Writer dalam package java.io.

6.2.2.1 Kelas Reader

Kelas java.io.Reader merupakan sebuah kelas abstrak yang menyediakan berbagai macam

method untuk melakukan proses pembacaan dalam bentuk karakter Unicode dari berbagai sumber

data seperti harddisk, keyboard atau memori. Karena merupakan sebuah kelas abstrak, maka kelas

ini tidak bisa diinstantiasi, tetapi sub-kelasnya lah yang akan digunakan untuk proses pembacaan data.

Terdapat berbagai macam method dalam kelas Reader, tetapi sebenarnya hanya method read()

dan close() saja yang kita perlukan.

Tabel 6.6 Method dalam kelas Reader

Method Keterangan

int read() Membaca satu karakter dan mengembalikan sebuah nilai

Page 44: Modul Pelatihan Java Rev 2.0

44

integer dari karakter yang dibaca. Jika yang dibaca adalah

EOF maka akan dikembalikan nilai -1.

int read(char buffer[])

Membaca karakter dan memasukkannya kedalam sebuah

array buffer dan mengembalikan sebuah bilangan dari

karakter yang dibaca. Jika EOF akan mengembalikan nilai -1

abstract void close() Menutup stream.

Kelas FileReader

Kelas FileReader digunakan untuk membaca karakter dari dalam file, tetapi kelas ini tidak

memiliki method di dalamnya. Method-nya sendiri diturunkan dari kelas induknya yaitu Reader dan

InputStreamReader. Terdapat beberapa konstruktor dala kelas FileReader ini.

1. FileReader(File objFile)

Membuat sebuah kelas FileReader dengan inputan sebuah obyek objFile.

2. FileReader(String namaFile)

Membuat sebuah kelas FileReader dengan inputan sebuah nama namaFile.

Berikut adalah contoh penggunaan FileReader

import java.io.*;

public class contohFR{

public static void main(String args[]){

try{

File file=new File("cthFileReader.txt");

FileReader f=new FileReader(file);

int ch;

while((ch=f.read())!=-1){

System.out.print((char)ch);

}

}

catch(FileNotFoundException fnf){

System.out.println(fnf);

}

catch(IOException io){

System.out.println(io);

}

}

}

File yang akan dibaca dari kode di atas berisi hal berikut.

Page 45: Modul Pelatihan Java Rev 2.0

45

Gambar 6.6 Contoh FileReader

Berikut adalah hasil eksekusi dari kode di atas

Gambar 6.7 Hasil eksekusi FileReader

Kelas BufferedReader

Kelas BufferedReader membaca teks dalam bentuk stream karakter dan memasukkannya

kedalam sebuah buffer di dalam stream input. Dengan menggunakan buffer, maka proses pembacaan

bisa dilakukan lebih dari satu kali pada saat yang sama, sehingga bisa lebih meningkatkan performansi

dari aplikasi. Contoh penggunaan dari kelas ini adalah untuk mendapatkan inputan dari user melalui

konsole. Beberapa konstruktor dari kelas BufferedReader ini.

1. BufferedReader(Reader objStream)

Membuat sebuah obyek BufferedReader dengan ukuran buffer default.

2. BufferedReader(Reader objStream, int ukuranBuffer)

Membuat sebuah obyek BufferedReader dengan ukuran buffer sebesar

ukuranBuffer.

Berikut adalah contoh dari BufferedReader

import java.io.*;

public class contohBR{

public static void main(String args[]){

System.out.println("Ketik :");

BufferedReader br=

new BufferedReader(new InputStreamReader(System.in));

String str=new String();

try{

str=br.readLine();

}

catch(IOException io){

Page 46: Modul Pelatihan Java Rev 2.0

46

System.out.println(io);

}

System.out.println();

System.out.println("Isi ketikan: ");

System.out.println(str);

}

}

Hasil dari kode di atas adalah

Gambar 6.8 Contoh BufferedReader

6.2.2.2 Kelas Writer

Kelas java.io.Writer merupakan sebuah kelas abstrak yang menyediakan berbagai macam

method untuk melakukan proses penulisan dalam bentuk karakter Unicode ke berbagai tujuan data

seperti harddisk dan monitor. Karena merupakan sebuah kelas abstrak, maka kelas ini tidak bisa

diinstantiasi, tetapi sub-kelasnya lah yang akan digunakan untuk proses pembacaan data. Berikut

adalah kelas-kelas turunan dari kelas Writer. Terdapat banyak method dalam kelas Writer, tetapi

hanya method write(), flush() dan close() saja yang kita butuhkan.

Tabel 6.7 Method dalam kelas Writer

Method Keterangan

int write(int ch) Menulis sebuah karakter kedalam stream output-karakter.

int write(char buffer[]) Menulis sebuah array karakter kedalam stream output-

karakter.

abstract void close() Menutup stream.

Void flush() Mem-flush buffer output

Kelas FileWriter

Kelas FileWriter digunakan untuk menulis data kedalam sebuah file, tetapi kelas ini tidak

memiliki method di dalamnya. Methodnya sendiri diturunkan dari kelas induknya yaitu Writer dan

OutputStreamReader. Terdapat beberapa konstruktor dala kelas FileWriter ini.

1. FileWriter(String namaFile)

Membuat sebuah obyek FileWriter dengan parameter inputan nama file yang akan ditulis.

2. FileWriter(String namaFile, boolean boolAppend)

Membuat sebuah obyek FileWriter dengan parameter inputan nama file yang akan ditulis,

sedangkan boolAppend digunakan untuk menentukan bahwa penulisan akan dilakukaan

secara menambahkan data di bagian paling bawah jika boolAppend bernilai true.

Page 47: Modul Pelatihan Java Rev 2.0

47

3. FileWriter(File objFile)

Membuat sebuah obyek FileWriter dengan parameter inputan sebuah obyek dari kelas

File.

Berikut adalah contoh dari penggunaan kelas FileWriter.

import java.io.*;

public class ContohFW{

public static void main (String args[]){

String str="contoh dari";

String str2="penggunaan kelas FileWriter";

try{

FileWriter fout = new FileWriter("cthFileWriter.txt" );

fout.write(str, 0, str.length() );

fout.write(str2, 0, str2.length() );

System.out.println("Data sudah ditulis...");

fout.close();

}

catch (IOException io){

System.out.println(io);

}

}

}

Hasil dari kode di atas

Gambar 6.9 Contoh FileWriter

File cthFileWriter.txt akan berisi.

Gambar 6.10 Isi cthFileWriter.txt

Page 48: Modul Pelatihan Java Rev 2.0

48

Kelas PrintWriter

Kelas PrintWriter merupakan turunan dari kelas Writer dan akan menuliskan karakter yang

telah terformat kedalam stream karakter output. Di dalam kelas ini terdapat beberapa method yang

akan digunakan yaitu print() dan println(). Terdapat beberapa konstruktor dalam kelas ini.

1. PrintWriter(OutputStream streamObj)

Membuat sebuah obyek dari kelas PrintWriter dengan menggunakan obyek dari kelas

OutputStream.

2. PrintWriter(OutputStream streamObj, boolean autoflush)

Membuat sebuah obyek dari kelas PrintWriter dengan menggunakan obyek dari kelas

OutputStream. Parameter autoflush menandakan bahwa method println() akan

memflush kedalam buffer output.

3. PrintWriter(Writer outWriter, boolean autoflush)

Membuat sebuah obyek dari kelas PrintWriter dengan menggunakan obyek dari karakter

stream output. Parameter autoflush menandakan bahwa method println() akan

memflush kedalam buffer output.

Contoh penggunaan kelas PrintWriter.

import java.io.*;

public class contohPW{

public static void main(String args[]){

PrintWriter pw=null;

try{

FileWriter file=new FileWriter("cthPrintWriter.txt");

pw=new PrintWriter(file);

}

catch(IOException io){

System.out.println(io);

}

pw.print("30108999:");

pw.print("Chairil Anwar:");

pw.print("Bandung");

pw.println();

pw.print("30208999:");

pw.print("Budiman:");

pw.print("Jakarta");

pw.println();

pw.print("30308999:");

pw.print("Agus Subagus:");

pw.print("Subang");

Page 49: Modul Pelatihan Java Rev 2.0

49

pw.println();

System.out.println("Data Telah Ditulis...");

pw.close();

}

}

Eksekusi dari kode di atas

Gambar 6.11 Contoh PrintWriter

Hasil penyimpanan data di atas pada file cthPrintWriter.txt

Gambar 6.12 Isi cthPrintWriter.txt

6.3 Implementasi RandomAccessFile

Random access file (pengaksesan file secara acak) memungkinkan kita untuk mengakses isi dari sebuah

file secara tidak berurutan. Dengan cara ini kita bisa membaca dan menulis data teks dan byte pada

lokasi manapun dalam sebuah file. Ambil sebuah kasus ketika yang kita inginkan tidak semua teks dari

sebuah file kita butuhkan, tetapi hanya pada posisi tertentu saja, misal pada baris ke-sekian. Maka

dengan menggunakan Random access file ini kita bisa langsung menuju ke posisi yang diinginkan dan

mengambil teks yang kita butuhkan saja.

Kelas java.io.RandomAccessFile mengimplementasikan sebuah interface DataInput dan

DataOutput yang bisa digunakana untuk melakukan proses baca dan tulis kedalam file. Di dalam

kelas ini, kita harus mendefinisikan proses apa yang akan kita lakukan, apakah membaca atau juga

akan menulis kedalam file tersebut. Terdapat beberapa konstruktor yang bisa digunakan dalam kelas

RandomAccessFile, antara lain:

1. RandomAccessFile(File obyekFile, String mode):

Membuat sebuah obyek dari kelas RandomAccessFile, di mana argumen obyekFile adalah

obyek yang menentukan file mana yang akan dibuka, sedangkan argumen mode menentukan

jenis hak akses pembukaan file tersebut.

2. RandomAccessFile(String namaFile, String mode):

Page 50: Modul Pelatihan Java Rev 2.0

50

Membuat sebuah obyek dari kelas RandomAccessFile, di mana argumen namaFile adalah

nama dari file yang akan dibuka, sedang argumen mode menentukan jenis hak akses

pembukaan file tersebut.

Terdapat beberapa jenis hak akses pembukaan file, antara lain:

Tabel 6.8 Jenis akses pembukaan file

Nilai Keterangan

"r" Membuka file hanya untuk dilakukan proses pembacaan saja. Jika dilakukan

proses penulisan pada obyek ini maka akan menghasilkan sebuah

IOException

"rw" Membuka sebuah file untuk dilakukan proses baca dan tulis. Jika file yang

ditunjuk tidak ada, maka akan dibuat sebuah file baru.

"rws" Membuka sebuah file untuk dilakukan proses baca dan tulis, sebagaimana

mode “rw”, untuk mode “s” juga akan dilakukan proses update terhadap

isi dan metadata dari file tersebut, yang akan dituliskan secara

tersinkronisasi.

"rwd"

Membuka sebuah file untuk dilakukan proses baca dan tulis, sebagaimana

mode “rw”, untuk mode “s” juga akan dilakukan proses update terhadap

isi dari file tersebut, yang akan dituliskan secara tersinkronisasi.

Terdapat beberapa method yang bisa digunakan di dalam sebuah obyek dari kelas File, antara

lain:

Tabel 6.9 Method dalam kelas RandomAccessFile

Method Keterangan

void close()

Menutup sebuah obyek RandomAccessFile dan melepas semua

sumber daya yang digunakan, seperti stream dan pointer yang digunakan dalam file tersebut.

long getFilePointer() Mendapatkan posisi pointer saat ini di dalam sebuah file.

long length() Mendapatkan panjang dari sebuah file.

void seek(long

position)

Menentukan posisi pointer kepada lokasi yang ditentukan

(posisi sebelum lokasi tersebut).

int skipBytes(int n) Akan melewati sekian n byte karakter dari posisi sekarang.

Berikut adalah contoh penggunaan RandomAccessFile.

import java.io.RandomAccessFile;

import java.io.IOException;

class RAC{

RandomAccessFile file=null;

Page 51: Modul Pelatihan Java Rev 2.0

51

public void aksesFile(){

try{

/*

membuka file work.txt, dengan mode akses read dan

write jika file tidak ditemukan, maka akan dibuat

sebuah file baru

*/

file=new RandomAccessFile("work.txt","rw");

file.writeChar('A');

file.writeChar('K');

file.writeInt(4);

file.writeInt(6);

file.seek(0);

System.out.println(file.readChar());

System.out.println(file.readChar());

System.out.println(file.readInt());

System.out.println(file.readInt());

file.close();

}

catch(IOException e){

System.out.println("Exception: " +e);

}

}

}

class ContohRandomAccessFile{

public static void main(String[] args){

RAC obj = new RAC();

obj.aksesFile();

}

}

Ouput dari contoh di atas

Page 52: Modul Pelatihan Java Rev 2.0

52

Gambar 6.13 Contoh RandomAccessFile

7 Multithreading Overview

Sebuah program sekuensial berarti sebuah program yang hanya memiliki satu aliran eksekusi. Setiap

eksekusi, ia memiliki sebuah titik awal eksekusi, kemudian sebuah sekuen eksekusi, dan kemudian

berakhir. Selama runtime, pasti hanya satu proses yang telah dieksekusi. Bagaimanapun juga, di dunia

nyata, pasti dibutuhkan sesuatu yang dapat mengatur proses yang terjadi dan berjalan bersama-

sama.Oleh karena itu, thread hadir untuk menjadi solusi dalam mengatasi permasalahan tersebut.

Tujuan

1. Mampu mendefinisikan threads

2. Mengerti perbedaan state dalam threads

3. Mengerti konsep prioritas dalam threads

4. Mengetahui bagaimana menggunakan method di dalam class Thread

5. Membuat sendiri sebuah thread

6. Menggunakan sinkronisasi pada thread yang bekerja bersama-sama dan saling bergantung satu

dengan yang lainya

7. Memungkinkan thread untuk dapat berkomunikasi dengan thread lain yang sedang berjalan

8. Mengerti dan menggunakan kemampuan concurency

7.1 Multithreading di Java

Sebuah thread merupakan sebuah pengontrol aliran program. Untuk lebih mudahnya, bayangkanlah thread sebagai sebuah proses yang akan dieksekusi di dalam sebuah program tertentu. Java

mendukung adanya Multithreading. Pada saat menjalankan Program, sebuah thread utama akan dibuat

oleh Java untuk mengeksekusi Program tersebut, yang dimulai dengan memanggil method main().

Untuk membuat thread baru yang terpisah dari thread utama, terdapat dua cara yang dapat dilakukan

yakni:

Membuat class yang mengimplementasikan interface Runnable dan mengimplementasikan

method run()

Membuat class yang merupakan turunan dari class Thread dan meng-override method run(). Berikut terdapat sebuah contoh kelas yang tidak menggunakan Thread.

class HelloRunner {

int i;

public void tampil() {

i = 0;

while (i<5) {

System.out.println("Hello " + i++);

}

}

}

public class DemoThread1 {

Page 53: Modul Pelatihan Java Rev 2.0

53

public static void main(String args[]) {

HelloRunner r1 = new HelloRunner();

HelloRunner r2 = new HelloRunner();

System.out.println("Jalankan Hello Runner 1");

r1.tampil();

System.out.println("Jalankan Hello Runner 2");

r2.tampil();

System.out.println("Selesai");

}

}

Berikut kode program untuk membuat Thread dengan mengimplementasikan interface Runnable.

class HelloRunner implements Runnable{

int i;

public void run() {

Thread tr = Thread.currentThread();

i = 0;

while (i<5) {

System.out.println(tr.getName()+" : Hello " + i++);

try {

Thread.sleep(500);

}

catch (InterruptedException e) {

System.out.println("Program di interrupt");

}

}

}

}

public class DemoThread3 {

public static void main(String args[]) {

HelloRunner r1 = new HelloRunner();

HelloRunner r2 = new HelloRunner();

Thread t1 = new Thread(r1);

Thread t2 = new Thread(r2);

t1.start();

t2.start();

}

}

Jika menggunakan turunan kelas Thread, maka kode programnya sebagai berikut.

class HelloRunner extends Thread{

int i;

@Override

public void run() {

Thread tr = Thread.currentThread();

i = 0;

while (i<5) {

System.out.println(tr.getName()+" : Hello " + i++);

try {

Thread.sleep(500);

}

catch (InterruptedException e) {

System.out.println("Program di interrupt");

}

Page 54: Modul Pelatihan Java Rev 2.0

54

}

}

}

public class DemoThread5 {

public static void main(String args[]) {

HelloRunner r1 = new HelloRunner();

HelloRunner r2 = new HelloRunner();

r1.start();

r2.start();

}

}

Lakukan eksekusi terhadap ketiga kode program di atas, maka terlihat proses yang mengalami

Multithreading. Untuk kode kedua (mengimplementasikan interface Runnable) dan kode ketiga

(menurunkan kelas Thread) memiliki kelebihan dan kekurangan masing-masing. Penggunaan interface Runnable mensyaratkan pembuatan obyek tambahan selain HelloRunner, yakni obyek Thread. Di lain

sisi, penggunaan turunan kelas Thread akan membatasi jika programmer ingin Thread mewarisi sifat

dari kelas lain dikarenakan Java tidak memperbolehkan adanya multiple inheritance.

7.2 Priority Thread

Untuk menentukan thread mana yang akan menerima control dari CPU dan akan dieksekusi pertama

kali, setiap thread akan diberikan sebuah prioritas. Sebuah prioritas adalah sebuah nilai integer dari

angka 1 sampai dengan 10, di mana semakin tinggi prioritas dari sebuah thread, berarti semakin besar

kesempatan dari thread tersebut untuk dieksekusi terlebih dahulu.

Untuk memberikan nilai prioritas kepada Thread, digunakan method setPriority.

7.3 State dari Thread

Sebuah thread memungkinkan untuk memiliki beberapa state:

1. Running: Sebuah thread yang pada saat ini sedang dieksekusi dan di dalam control dari CPU.

2. Ready to run: Thread yang sudah siap untuk dieksekusi, tetapi masih belum ada kesempatan

untuk melakukannya.

3. Resumed: Setelah sebelumnya di block atau diberhentikan sementara, state ini kemudian siap

untuk dijalankan.

4. Suspended: Sebuah thread yang berhenti sementara, dan kemudian memperbolehkan CPU

untuk menjalankan thread lain bekerja.

5. Blocked: Sebuah thread yang di-block merupakan sebuah thread yang tidak mampu berjalan,

karena ia akan menunggu sebuah resource tersedia atau sebuah event terjadi.

6. End

7.4 Sinkronisasi Thread

Marilah kita perhatikan sebuah kode sederhana yang mencetak sebuah string dengan urutan tertentu.

Berikut ini adalah listing program tersebut:

class TwoStrings {

static void print(String str1, String str2) {

System.out.print(str1);

try {

Thread.sleep(500);

} catch (InterruptedException ie) {

Page 55: Modul Pelatihan Java Rev 2.0

55

}

System.out.println(str2);

}

}

class PrintStringsThread implements Runnable {

Thread thread;

String str1, str2;

PrintStringsThread(String str1, String str2) {

this.str1 = str1;

this.str2 = str2;

thread = new Thread(this);

thread.start();

}

public void run() {

TwoStrings.print(str1, str2);

}

}

class TestThread {

public static void main(String args[]) {

new PrintStringsThread("Hello ", "there.");

new PrintStringsThread("How are ", "you?");

new PrintStringsThread("Thank you ", "very much!");

}

}

Program ini diharapkan dapat mencetak dua argument object Runnable secara berurutan.

Permasalahannya adalah, pendeklarasian method sleep akan menyebabkan thread yang lain akan

dieksekusi walaupun thread yang pertama belum selesai dijalankan pada saat eksekusi method print

dari class TwoStrings.

Solusi dari masalah ini adalah dengan melakukan sinkronisasi terhadap method print, sehingga pada

satu saat hanya boleh ada satu Thread yang menggunakan method print tersebut. Proses sinkronisasi

juga dapat dilakukan kepada obyek. Berikut contoh proses sinkronisasi terhadap kasus di atas.

class TwoStrings {

synchronized static void print(String str1, String str2) {

System.out.print(str1);

try {

Thread.sleep(500);

} catch (InterruptedException ie) {

}

System.out.println(str2);

}

}

class PrintStringsThread implements Runnable {

Thread thread;

String str1, str2;

PrintStringsThread(String str1, String str2) {

this.str1 = str1;

this.str2 = str2;

thread = new Thread(this);

thread.start();

}

public void run() {

TwoStrings.print(str1, str2);

Page 56: Modul Pelatihan Java Rev 2.0

56

}

}

class TestThread {

public static void main(String args[]) {

new PrintStringsThread("Hello ", "there.");

new PrintStringsThread("How are ", "you?");

new PrintStringsThread("Thank you ", "very much!");

}

}

7.5 Komunikasi antar Thread

Java juga menyediakan mekanisme untuk Thread saling berkomunikasi. Berikut contohnya.

class SharedData {

int data;

synchronized void set(int value) {

System.out.println("Generate " + value);

data = value;

}

synchronized int get() {

System.out.println("Get " + data);

return data;

}

}

class Producer implements Runnable {

SharedData sd;

Producer(SharedData sd) {

this.sd = sd;

new Thread(this, "Producer").start();

}

public void run() {

for (int i = 0; i < 5; i++) {

sd.set((int)(Math.random()*100));

}

}

}

class Consumer implements Runnable {

SharedData sd;

Consumer(SharedData sd) {

this.sd = sd;

new Thread(this, "Consumer").start();

}

public void run() {

for (int i = 0; i < 5 ; i++) {

sd.get();

}

}

}

class TestProducerConsumer {

public static void main(String args[]) throws Exception {

SharedData sd = new SharedData();

new Producer(sd);

Page 57: Modul Pelatihan Java Rev 2.0

57

new Consumer(sd);

}

}

Di bawah ini adalah contoh dari keluaran program :

Generate 8

Generate 45

Get 52

Generate 65

Get 65

Generate 23

Get 23

Generate 49

Get 49

Get 35

Hasil tersebut bukanlah yang diharapkan. Dari program di atas, diinginkan setiap kali producer

melakukan generate sebuah nilai, maka consumer akan mendapatkan nilai tersebut. Untuk mengatasi

problem di atas, dibuat sebuah mekanisme komunikasi antara producer dan consumer menggunakan

method wait() dan notify(). Berikut solusinya.

class SharedData {

int data;

boolean valueSet = false;

synchronized void set(int value) {

if (valueSet) {

//baru saja membangkitkan sebuah nilai

try {

wait();

} catch (InterruptedException ie) {

}

}

System.out.println("Generate " + value);

data = value;

valueSet = true;

notify();

}

synchronized int get() {

if (!valueSet) {

//produsen belum men-set sebuah nilai

try {

wait();

} catch (InterruptedException ie) {

}

}

System.out.println("Get " + data);

valueSet = false;

notify();

return data;

}

}

class Producer implements Runnable {

SharedData sd;

Producer(SharedData sd) {

this.sd = sd;

Page 58: Modul Pelatihan Java Rev 2.0

58

new Thread(this, "Producer").start();

}

public void run() {

for (int i = 0; i < 5; i++) {

sd.set((int)(Math.random()*100));

}

}

}

class Consumer implements Runnable {

SharedData sd;

Consumer(SharedData sd) {

this.sd = sd;

new Thread(this, "Consumer").start();

}

public void run() {

for (int i = 0; i < 5 ; i++) {

sd.get();

}

}

}

class TestProducerConsumer {

public static void main(String args[]) throws Exception {

SharedData sd = new SharedData();

new Producer(sd);

new Consumer(sd);

}

}

Page 59: Modul Pelatihan Java Rev 2.0

59

8 Collection Overview

Programmer yang perlu menggunakan list atau pohon biner, seharusnya tidak perlu lagi membuat

data struktur ini dari awal. Struktur data ini sudah banyak dimengerti dan diprogram ribuan kali

sebelumnya. Masalahnya adalah bagaimana agar struktur data yang tangguh tersedia dan siap

digunakan oleh programmer. Di bagian ini kita akan melihat bagaimana Java menyelesaikan masalah

ini.

Tujuan

1. Memahami pemrograman generik pada Java

2. Mampu menggunakan List

3. Mampu menggunakan Set

4. Mampu menggunakan Map

8.1 Pemrograman Generik

Pemrograman generik adalah penulisan kode yang bisa digunakan oleh berbagai macam tipe data.

Kepada kita, Java telah menyajikan classes dan interfaces Collection yang lain, di mana semuanya dapat

ditemukan di java.util package. Contoh dari classes Collection termasuk LinkedList, ArrayList, HashSet

dan TreeSet. Class tersebut benar-benar implementasi dari collection interfaces yang berbeda. Induk

hirarki dari collection interfaces adalah interfaces Collection itu sendiri. Sebuah collection hanyalah

sebuah grup dari object yang diketahui sebagai elemennya sendiri. Collection memperbolehkan

penggandaan/salinan dan tidak membutuhkan pemesanan elemen secara spesifik.

Beberapa method yang ada di interface Collection.

1. public boolean add(Object o)

Memasukkan Object o ke dalam collection ini. Mengembalikan nilai true jika o telah sukses

ditambahkan ke dalam collection.

2. public void clear()

Menghapus semua elemen dari collection ini.

3. public boolean remove(Object o)

Menghapus single instance dari Object o pada collection ini, jika hal tersebut telah diinputkan.

Mengembalikan nilai true jika o telah ditemukan dan dihapus dari collection. 4. public boolean contains(Object o)

Mengembalikan nilai true jika collection ini berisi Object o.

5. public boolean isEmpty()

Mengembalikan nilai true jika collection ini tidak berisi object atau elemen apapun.

6. public int size()

Mengembalikan jumlah dari elemen pada collection ini.

7. public Iterator iterator()

Mengembalikan sebuah iterator yang menunjukkan kita pada isi collection ini.

8. public boolean equals(Object o)

Mengembalikan nilai true jika Object o sama dengan yang ada pada collection ini.

9. public int hashCode()

Mengembalikan nilai hash code (yaitu ID) untuk collection ini. Objects atau collections

yang sama memiliki nilai hash code atau ID yang sama.

Beberapa implementasi dari interface Collection beserta karakteristiknya.

1. List, antara lain:

a. ArrayList: Menyediakan iterasi yang cepat dan random access.

b. Vector: ArrayList yang performa lebih lambat, namun menyediakan method yang

tersinkronisasi.

Page 60: Modul Pelatihan Java Rev 2.0

60

c. LinkedList: Bagus untuk menambahkan elemen di ujung struktur data, contohnya

Stack dan Queue.

d. PriorityQueue: List yang diurutkan berdasarkan prioritas elemen.

2. Set, antara lain:

a. HashSet: Akses cepat, menjamin tidak ada duplikasi, namun data tidak terurut.

b. LinkedHashSet: Tidak ada duplikat, iterasi berdasarkan urutan input.

c. TreeSet: Tidak ada duplikat, iterasi dilakukan terurut.

Selain implementasi interface Collection, terdapat juga interface Map yang dapat digunakan seperti

Collection, namun dengan menambahkan properti key sebagai unique atributte dari sebuah elemen.

a. HashMap: Update data tercepat, menggunakan pasangan kunci dan nilai, membolehkan nilai null.

b. Hashtable: HashMap yang lebih lambat karena ada method yang tersinkronisasi. Tidak

membolehkan nilai null.

c. LinkedHashMap: Iterasi lebih cepat, iterasi berdasarkan urutan input, membolehkan nilai null.

d. TreeMap: Map yang terurut.

Untuk melakukan iterasi terhadap sebuah Collection, digunakan kelas Iterator. Berikut contoh

proses iterasi sebuah Collection.

Iterator iter = kol.iterator();

while ( iter.hasNext() ) {

Object item = iter.next();

System.out.println(item);

}

Mulai dari java versi 1.5, proses looping sudah menyediakan fitur untuk mengakses elemen

Collection secara langsung.

.....

ArrayList nameList = new ArrayList();

nameList.add("Mikalai");

nameList.add("Michael");

nameList.add("Craig");

for (Object name:nameList) {

System.out.println(name);

}

.....

8.2 Generic

Generic adalah sebuah mekanisme yang digunakan mulai dari Java 1.5 untuk mendefinisikan elemen

yang boleh ditampung ke dalam sebuah Collection. Contoh penggunaannya adalah sebagai berikut.

ArrayList<String> genArrList = new ArrayList<String>();

genArrList.add("A generic string");

String myString = genArrList.get(0);

JoptionPane.showMessageDialog(this, myString);

Pada ArrayList di atas didefinisikan Generic untuk tipe String. Maka, ArrayList hanya akan dapat

menampung elemen bertipe String atau turunan dari String.

Page 61: Modul Pelatihan Java Rev 2.0

61

9 Aplikasi Desktop GUI Overview

Tanpa mempelajari tentang grapichal user interface (GUI) API masih tetap bisa membuat suatu

program. Tetapi, program akan kelihatan tidak menarik dan tidak nyaman digunakan bagi para user.

Memiliki GUI yang baik dapat memberi efek pada penggunaan aplikasi. Java menyediakan banyak tool

seperti Abstract Windowing Toolkit dan Swing untuk mengembangkan aplikasi GUI yang interaktif.

Tujuan

1. Mendesain aplikasi GUI menggunakan Swing.

2. Menjelaskan tentang flow layout, border layout, dan grid layout dalam komponen GUI.

3. Membuat komponen Swing jButton, jTextField, jCheckBox, jRadioButton, jComboBox dalam

GUI

4. Membuat tampilan yang komplek dalam mendesain aplikasi GUI.

9.1 Layout Manager

Posisi dan ukuran suatu komponen ditentukan oleh layout manager. Layout manager mengatur

tampilan dari komponen di dalam kontainer. Berikut ini beberapa layout manager yang terdapat di

dalam Java.

1. FlowLayout

2. BorderLayout

3. GridLayout

4. GridBagLayout

5. CardLayout

Layout manager dapat diatur menggunakan method setLayout dari class Container. Method ini

dapat ditulis sebagai berikut.

void setLayout(LayoutManager mgr)

Jika Anda memilih untuk tidak menggunakan layout manager, Anda dapat mengisi null sebagai

argumen untuk method ini. Tetapi selanjutnya, Anda akan mengatur posisi elemen secara manual

dengan menggunakan method setBounds dari class Components.

public void setBounds(int x, int y, int width, int height)

Method ini mengatur posisi berdasarkan pada argumen x dan y, dan ukuran berdasarkan argumen

width dan height. Hal ini akan cukup menyulitkan dan membosankan untuk aplikasi jika Anda

memiliki beberapa obyek komponen di dalam object container. Anda akan memanggil method ini

untuk setiap komponen.

9.1.1 FlowLayout Manager

FlowLayout Manager adalah default manager untuk class Panel dan subclassnya, termasuk class applet.

Cara meletakkan komponen dari FlowLayout Manager dimulai dari kiri ke kanan dan dari atas ke

bawah, dimulai dari pojok kiri atas. Seperti pada saat Anda mengetik menggunakan editor kata pada

umumnya. Berikut adalah bagaimana FlowLayout Manager bekerja, di mana memiliki tiga constructor

seperti daftar di bawah ini.

1. FlowLayout()

Membuat object baru FlowLayout dengan posisi di tengah dan lima unit horizontal dan

vertikal gap dimasukkan pada komponen sebagai default.

2. FlowLayout(int align)

Membuat object baru FlowLayout dengan posisi spesifik dan lima unit horizontal dan vertikal

gap dimasukkan pada komponen sebagai default.

3. FlowLayout(int align, int hgap, int vgap)

Membuat object baru FlowLayout dengan argumen pertama sebagai posisi pada komponen

Page 62: Modul Pelatihan Java Rev 2.0

62

dan hgap untuk horizontal dan vgap untuk vertikal pada komponen

Gap dapat dikatakan sebagai jarak antara komponen dan biasanya diukur dengan satuan pixel. Posisi

argumen mengikuti penulisan sebagai berikut:

1.FlowLayout.LEFT

2.FlowLayout.CENTER

3.FlowLayout.RIGHT

Berikut contoh program menggunakan FlowLayout.

import java.awt.*;

class FlowLayoutDemo extends Frame {

public static void main(String args[]) {

FlowLayoutDemo fld = new FlowLayoutDemo();

fld.setLayout(new FlowLayout(FlowLayout.RIGHT, 10, 10));

fld.add(new Button("ONE"));

fld.add(new Button("TWO"));

fld.add(new Button("THREE"));

fld.setSize(100, 100);

fld.setVisible(true);

}

}

Gambar 9.1 Contoh FlowLayout

9.1.2 BorderLayout Manager

BorderLayout membagi kontainer menjadi lima bagian di antaranya utara, selatan, timur, barat, dan

tengah. Setiap komponen dimasukkan ke dalam region yang spesifik. Region utara dan selatan

membentuk jalur horizontal sedangkan region timur dan barat membentuk jalur vertikal. Dan region

tengah berada pada perpotongan jalur horizontal dan vertikal. Tampilan ini adalah bersifat default

untuk object Window, termasuk object dari subclass Window yaitu tipe Frame dan Dialog.

Constructor BorderLayout antara lain:

1. BorderLayout()

Membuat object BorderLayout baru tanpa spasi yang diaplikasikan di antara komponen yang berbeda.

2. BorderLayout(int hgap, int vgap)

Membuat object BorderLayout baru dengan spasi unit hgap horizontal dan unit vgap vertikal

yang diaplikasikan di antara komponen yang berbeda.

Seperti pada FlowLayout Manager, parameter hgap dan vgap disini juga menjelaskan jarak antara

komponen dengan kontainer. Untuk menambahkan komponen kedalam region yang spesifik, gunakan

method menambahkan dan melewatkan dua argumen yaitu : komponen yang ingin dimasukkan ke

dalam region dan region mana yang ingin dipakai untuk meletakkan komponen. Perlu diperhatikan

bahwa hanya satu komponen yang dapat dimasukkan dalam satu region. Menambahkan lebih dari satu

komponen pada kontainer yang bersangkutan, maka komponen yang terakhir ditambahkan yang akan

ditampilkan. Berikut ini adalah daftar dari kelima region.

1. BorderLayout.NORTH

Page 63: Modul Pelatihan Java Rev 2.0

63

2. BorderLayout.SOUTH

3. BorderLayout.EAST

4. BorderLayout.WEST

5. BorderLayout.CENTER

Berikut ini adalah contoh program yang menunjukkan bagaimana BorderLayout bekerja.

import java.awt.*;

class BorderLayoutDemo extends Frame {

public static void main(String args[]) {

BorderLayoutDemo bld = new BorderLayoutDemo();

bld.setLayout(new BorderLayout(10, 10));

bld.add(new Button("NORTH"), BorderLayout.NORTH);

bld.add(new Button("SOUTH"), BorderLayout.SOUTH);

bld.add(new Button("EAST"), BorderLayout.EAST);

bld.add(new Button("WEST"), BorderLayout.WEST);

bld.add(new Button("CENTER"), BorderLayout.CENTER);

bld.setSize(200, 200);

bld.setVisible(true);

}

} Berikut ini adalah hasil dari contoh program tersebut.

Gambar 9.2 Contoh BorderLayout

9.1.3 GridLayout Manager

Dengan GridLayout manager, komponen juga diposisikan dari kiri ke kanan dan dari atas ke bawah

seperti pada FlowLayout manager. GridLayout manager membagi kontainer menjadi baris dan kolom.

Semua region memiliki ukuran yang sama. Hal tersebut tidak mempedulikan ukuran sebenarnya dari

komponen. Berikut ini adalah daftar dari constructor untuk class GridLayout.

1. GridLayout()

Membuat object GridLayout baru dengan satu baris dan satu kolom sebagai default

2. GridLayout(int rows, int cols) Membuat object GridLayout baru dengan jumlah baris dan kolom sesuai dengan keinginan

3. GridLayout(int rows, int cols, int hgap, int vgap)

Membuat object GridLayout baru dengan jumlah baris dan kolom yang ditentukan. Unit spasi

hgap horizontal dan vgap vertikal diaplikasikan ke dalam komponen.

Berikut contoh GridLayout.

import java.awt.*;

class GridLayoutDemo extends Frame {

public static void main(String args[]) {

Page 64: Modul Pelatihan Java Rev 2.0

64

GridLayoutDemo gld = new GridLayoutDemo();

gld.setLayout(new GridLayout(2, 3, 4, 4));

gld.add(new Button("ONE"));

gld.add(new Button("TWO"));

gld.add(new Button("THREE"));

gld.add(new Button("FOUR"));

gld.add(new Button("FIVE"));

gld.setSize(200, 200);

gld.setVisible(true);

}

}

Berikut ini adalah output dari program.

Gambar 9.3 Contoh GridLayout

Untuk membuat tampilan yang lebih lengkap, layout manager yang berbeda dapat digabungkan

dengan menggunakan panel. Panel adalah kontainer dan komponen pada saat yang sama. Komponen

dapat ditambahkan ke dalam panel. Perhatikan teknik yang digunakan pada contoh berikut.

import java.awt.*;

class ComplexLayout extends Frame {

public static void main(String args[]) {

ComplexLayout cl = new ComplexLayout();

Panel panelNorth = new Panel();

Panel panelCenter = new Panel();

Panel panelSouth = new Panel();

/* Panel utara */

// Panel menggunakan FlowLayout sebagai default

panelNorth.add(new Button("ONE"));

panelNorth.add(new Button("TWO"));

panelNorth.add(new Button("THREE"));

/* Panel tengah */

panelCenter.setLayout(new GridLayout(4,4));

panelCenter.add(new TextField("1st"));

panelCenter.add(new TextField("2nd"));

panelCenter.add(new TextField("3rd"));

panelCenter.add(new TextField("4th"));

/* Panel selatan */

panelSouth.setLayout(new BorderLayout());

panelSouth.add(new Checkbox("Choose me!"), BorderLayout.CENTER);

panelSouth.add(new Checkbox("I'm here!"), BorderLayout.EAST);

Page 65: Modul Pelatihan Java Rev 2.0

65

panelSouth.add(new Checkbox("Pick me!"), BorderLayout.WEST);

/* Menambahkan panel pada container Frame */

// Frame menggunakan BorderLayout sebagai default

cl.add(panelNorth, BorderLayout.NORTH);

cl.add(panelCenter, BorderLayout.CENTER);

cl.add(panelSouth, BorderLayout.SOUTH);

cl.setSize(300,300);

cl.setVisible(true);

}

}

Berikut ini adalah output dari program.

9.2 Komponen Swing

Seperti pada package AWT, package dari Swing menyediakan banyak class untuk membuat aplikasi

GUI. Package tersebut dapat ditemukan di javax.swing. Perbedaan utama antara keduanya adalah

komponen Swing ditulis menyeluruh menggunakan Java. Kesimpulannya, program GUI ditulis

menggunakan banyak class dari package Swing yang mempunyai tampilan look and feel yang sama

meski dijalankan pada paltform yang berbeda. Lebih dari itu, Swing menyediakan komponen yang

lebih menarik seperti color chooser dan option pane.

Tabel 9.1 Komponen Swing

Komponen Swing Penjelasan

JComponent class induk untuk semua komponen Swing, tidak termasuk top-level

kontainer

JButton Tombol “push”

JCheckBox Item yang dapat dipilih atau tidak oleh pengguna, pemilihan dapat lebih

dari satu

JFileChooser Form untuk memilih sebuah file

JTextField Form text satu baris

JFrame Frame tempat meletakkan komponen, diperlukan content pane sebelum

menambah sebuah komponen

JPanel Class Container sederhana tetapi bukan top-level

JOptionPane Menampilkan popup kotak dialog

JDialog Digunakan untuk menginformasikan sesuatu kepada pengguna

atau prompt pengguna untuk input

JColorChooser Memungkinkan pengguna untuk memilih warna yang diinginkan

Page 66: Modul Pelatihan Java Rev 2.0

66

9.3 Membuat Swing HelloWorld dengan Netbeans

Netbeans dilengkapi dengan GUI builder yang dikenal dengan Matisse. Tools ini sangat powerful dan

produktif dalam membuat komponen GUI. Berikut beberapa contoh cara membuat aplikasi dengan

Netbeans GUI Builder menggunakan beberapa komponen Swing.

9.3.1 Contoh Penggunaan JButton dan JTextField

Berikut contoh aplikasi penjumlahan menggunakan Netbeans

Gambar 9.4 Contoh aplikasi penjumlahan

Untuk membuat aplikasi ini menggunakan Matisse, lakukan langkah-langkah berikut ini:

1. Buat project baru di Netbeans (kalau sudah membuat project, tidak perlu membuat lagi)

dengan cara memilih menu: File > New Project

Kemudian ikuti petunjuk yang diberikan dialog.

2. Buat class JFrame baru, caranya dengan memilih menu: File > New File

Kemudian akan muncul dialog seperti di bawah ini :

Gambar 9.5 Jendela dialog new file

3. Pilih kategori: Java GUI Forms > JFrame Form

Seperti terlihat di dialog New File dialog di atas, kemudian beri nama Penjumlahan.java

4. Buat tampilan form seperti gambar bawah ini, caranya dengan klik Jendela Pallete di sebalah

kanan untuk memilih komponen apa yang akan dibuat, kemudian klik di jendela Design untuk

menempatkan komponen yang sudah dipilih tadi ke dalam form. Hasilnya terlihat seperti pada

gambar di bawah ini:

Page 67: Modul Pelatihan Java Rev 2.0

67

Gambar 9.6 Jendela design Netbens Matisse

5. Ganti nama setiap komponen agar mudah dikenali. Klik kanan di atas setiap komponen yang

ada dalam Jendela Design di atas, kemudian pilih menu: Klik kanan > Change Variable Name

...

Ganti nama komponen-komponen tersebut (sesuai urutan dari kiri ke kanan, atas ke bawah)

menjadi : lblKeterangan, txtA, lblPlus, txtB, btnHitung, lblHasil.

6. Menambahkan variable untuk menampung nilai yang akan dijumlahkan. Klik tombol Source

untuk membuka jendela yang menampilkan kode sumber dari program di atas kemudian

tambahkan kode di bawah ini tepat di bawah definisi dari class Penjumlahan:

private String str = "Hasilnya adalah : ";

private int a, b; 7. Menangani penekanan tombol btnHitung. Klik kanan di atas komponen btnHitung kemudian

pilih menu: Events > Action > actionPerformed

Anda akan dibawa ke jendela Source, dan akan menemukan kode program seperti di bawah

ini:

private void btnHitungActionPerformed(

java.awt.event.ActionEvent evt) {

// TODO add your handling code here:

}

JLabel dan JTextField mempunyai method getText dan setText untuk mengambil dan

mengeset text yang ditampilkan.

Ubah kode program di atas menjadi :

private void btnHitungActionPerformed(

java.awt.event.ActionEvent evt) {

// TODO add your handling code here:

a = Integer.parseInt(txtA.getText());

b = Integer.parseInt(txtB.getText());

int hasil = a + b;

lblHasil.setText(str + hasil);

}

8. Compile dan jalankan program. Tekan tombol SHIFT + F6, atau klik kanan file

Penjumlahan.java kemudian pilih menu Run File.

Page 68: Modul Pelatihan Java Rev 2.0

68

9.3.2 Contoh Penggunaan JCheckBox dan JRadioButton Berikut contoh aplikasi menggunakan JCheckBox dan JRadioButton.

Gambar 9.7 Contoh check box dan radio button

Untuk membuat program di atas ikuti langkah-langkah berikut ini:

1. Buat class baru bertipe JFrame Form, kemudian beri nama Pilihan.java 2. Buat tampilan di atas menggunakan Matisse. komponen yang harus dibuat adalah:

dua object JradioButton (radioBerwarna dan radioTransparan)

satu object ButtonGroup (groupTipeWarna)

empat object JCheckBox (chkHijau, chkBiru, chkMerah, chkKuning)

satu object JTextArea (txtWarna)

satu object JScrollPane (scrollWarna) Untuk melihat semua komponen yang ada dalam Jendela Design, gunakan Jendela Inspector di

sisi kiri bawah.

3. Masukkan object radioBerwarna dan radioTransparan ke dalam object groupTipeWarna.

Caranya dengan:

a. Memilih komponen radioBerwarna di Jendela Design

b. Klik tab code di Jendela Properties

c. Pilih properti : Post-Creation Code

d. Masukkan kode berikut ini kedalam dialog yang muncul :

groupTipeWarna.add(radioBerwarna);

JRadioButton yang mempunyai group yang sama, harus dimasukkan dalam sebuah object

ButtonGroup yang sama. Lakukan langkah yang sama terhadap object radioTransparan.

4. Menangani event ketika JRadioButton diklik. Caranya dengan:

e. Memilih komponen radioBerwarna di Jendela Design

f. Klik kanan komponen radioBerwarna, kemudian pilih menu:

Event > Action > actionPerformed

g. Anda akan dibawa ke dalam Jendela Code, dan menemukan kode berikut ini :

private void radioBerwarnaActionPerformed(

java.awt.event.ActionEvent evt) {

// TODO add your handling code here:

}

Ubahlah kode di atas menjadi :

private void radioBerwarnaActionPerformed(

java.awt.event.ActionEvent evt) {

// TODO add your handling code here:

if(radioBerwarna.isSelected()){

lblTipeWarna.setText("Tipe warna : " +

radioBerwarna.getText());

Page 69: Modul Pelatihan Java Rev 2.0

69

}

}

Lakukan langkah yang sama terhadap radioTransparan.

5. Buat sebuah private method untuk menangani event pemilihan terhadap JCheckBox. Method

tampilkanWarna ini nantinya akan dipanggil setiap kali salah satu dari JCheckBox dipilih. Yang

dilakukan oleh metod tampilkanWarna adalah mengecek status setiap JCheckBox, apakah

sedang dipilih atau tidak. Jika sedang dipilih maka text dari JCheckBox tersebut akan

ditampilkan dalam txtWarna. Class StringBuffer digunakan untuk menampung nilai text dari

JCheckBox yang statusnya terpilih.

private void tampilkanWarna(){

StringBuffer warna = new StringBuffer();

if(chkBiru.isSelected()){

warna.append(chkBiru.getText() + " ");

}

if(chkHijau.isSelected()){

warna.append(chkHijau.getText() + " ");

}

if(chkKuning.isSelected()){

warna.append(chkKuning.getText() + " ");

}

if(chkMerah.isSelected()){

warna.append(chkMerah.getText() + " ");

}

txtWarna.setText(warna.toString());

} 6. Menangani event pemilihan JCheckBox. Caranya sebagai berikut:

a. Pilih komponen chkHijau di Jendela Design.

b. Klik kanan komponen chkHijau untuk memunculkan context (popup) menu.

c. Pilih menu: Event > Action > actionPerformed

d. Anda akan dibawa ke Jendela Code, kemudian dalam method chkHijauActionPerformed

tersebut panggil method tampilkanWarna. seperti di bawah ini :

private void chkHijauActionPerformed(

java.awt.event.ActionEvent evt) {

// TODO add your handling code here:

tampilkanWarna();

} Lakukan hal ini untuk semua JCheckBox.

7. Compile dan jalankan program dengan menekan tombol SHIFT + F6.

9.3.3 Contoh Penggunaan JList dan JComboBox

Berikut contoh program menggunakan JList dan JComboBox.

Page 70: Modul Pelatihan Java Rev 2.0

70

Gambar 9.8 Contoh JList dan JComboBox

Ikuti langkah-langkah berikut ini untuk membuat program di atas:

1. Buatlah class JFrame Form baru dan beri nama ListAndCombo.java.

2. Buat tampilan program di atas menggunakan Matisse, kemudian tambahkan komponen-

komponen:

a. Empat buah JLabel : lblPekerjaan, lblPilihanPekerjaan, lblHobby, lblPilihanHobby.

b. Satu buah JComboBox : cmbPekerjaan

c. Satu buah JList : lstHobby

d. Satu buah JtextArea : txtPilihanHobby

3. Untuk merubah isi dari JComboBox dan JList kita akan menggunakan Jendela Properties,

Jendela ini letaknya di sebelah kanan bawah, di bawah Jendela Pallete dan akan muncul hanya

jika jendela Design yang dipilih.

Gambar 9.9 Jendela Properties

Pilih komponen JComboBox di Jendela Design, Jendela Properties akan menampilkan

properties dari JComboBox. Pada bagian model di dalam Jendela Properties masukkan item Pelajar, Mahasiswa, Programmer, Technical Writer dan Tester dipisahkan dengan koma.

4. Pilih JList di Jendela Design maka Jendela Properties untuk JList akan muncul. Di bagian model

isikan item : Membaca, Olahraga, Trekking, Coding, Menonton Film, Bersepeda dan Mengajar.

Setiap item dipisahkan dengan koma.

5. Menangani pemilihan JComboBox. Klik kanan JComboBox di Jendela Design, kemudian pilih

menu: Events > Action > actionPerformed

Jendela Code akan terbuka, tambahkan code seperti di bawah ini:

Page 71: Modul Pelatihan Java Rev 2.0

71

private void cmbPekerjaanActionPerformed(

java.awt.event.ActionEvent evt) {

// TODO add your handling code here:

lblPilihanPekerjaan.setText("Pekerjaan:

"+cmbPekerjaan.getSelectedItem());

}

Method getSelectedItem dari JComboBox digunakan untuk memperoleh item yang sedang di

pilih dalam JComboBox.

6. Untuk menangani pemilihan item dari JList berbeda dengan JComboBox. JList akan

mengaktifkan ListSelection event ketika user memilih item dalam JList. Untuk menangani

event ini, lakukan langkah-langkah berikut :

a. Klik kanan pada JList di dalam Jendela Design, kemudian pilih menu:

Events > ListSelection > valueChanged

b. Dalam jendela kode yang ketik kode seperti berikut ini:

private void lstHobbyValueChanged(

javax.swing.event.ListSelectionEvent evt) {

// TODO add your handling code here:

Object[] selectedItems = lstHobby.getSelectedValues();

if(selectedItems == null || selectedItems.length == 0)

txtPilihanHobby.setText("");

else{

StringBuffer strValues = new StringBuffer();

for(Object item : selectedItems){

strValues.append(item.toString()+",");

}

txtPilihanHobby.setText(strValues.substring(0,

strValues.length()-2));

}

} Method getSelectedValues dari JList mengembalikan item-item yang terpilih.

9.3.4 Contoh Penggunaan Menu, Popup Menu dan Toolbar

Untuk membuat menu pada program sebagai berikut.

1. Buat sebuah class JFrame dan beri nama ToolbarMenu.java

2. Pilih komponen Menu Bar dari Jendela Pallete kemudian klik JFrame di Jendela Design. Sebuah

class JMenuBar akan ditambahkan di dalam JFrame. Ganti namanya menjadi menuBar.

3. Klik kanan JMenuBar yang baru saja kita buat di Jendela Inspector, kemudian pilih menu:

Add > JMenu

Ganti nama JMenu tersebut menjadi menuFile. Kemudian alihkan perhatian anda ke Jendela

Properties

Page 72: Modul Pelatihan Java Rev 2.0

72

Gambar 9.10 Jendela Properties dari class JMenu

Isi properti text dengan string “File”. Kemudian set isi properti mnemonic dengan string “f”,

hal ini akan menyebabkan tampilanya menuFile menjadi File dan user dapat menekan tombol

ALT + F untuk mengaktifkan menu menuFile.

4. Langkah berikutnya adalah menambahkan JMenuItem ke dalam JMenu menuFile yang telah

dibuat di langkah sebelumnya. caranya, klik kanan di JMenu menuFile di Jendela Inspector,

kemudian pilih menu: Add > JMenuItem

Tambahkan berturut-turut menuNew, menuOpen dan menuSave. Pilih JMenuItem dari

Jendela Inspector, kemudian untuk masing-masing JMenuItem set text dan mnemonic yang

sesuai dari Jendela Properties.

5. Dalam struktur menu yang bagus, menu yang mempunyai fungsi serupa diletakkan dalam

urutan berdekatan dan dipisahkan dengan separator (pemisah). Klik kanan di JMenu menuFile

kemudian pilih menu: Add > JSeparator

6. Berikutnya kita akan menambahkan JMenu baru ke dalam JMenu menuFile. JMenu yang baru

ini akan bertindak sebagai sub menu. Caranya juga sama : klik kanan di JMenu menuFile

kemudian pilih menu: Add > JMenu

Beri nama menuSetting, set text dan mnemonic yang sesuai pada Jendela Properties.

7. Perilaku JCheckBoxMenuItem tidak berbeda jauh dengan JCheckBox biasa, bedanya hanyalah

JCheckBoxMenuItem berada dalam struktur menu. Cara menambahkan JCheckBoxMenuItem

sama dengan komponen lain: klik kanan JMenu menuSetting kemudian pilih menu:

Add > JCheckBoxMenuItem

Beri nama chkLineNumber, set text dan mnemonic yang sesuai pada Jendela Properties. JCheckBoxMenuItem sedikit spesial dibandingkan dengan JMenuItem, karena

JCheckBoxMenuItem memiliki properties selected. Properties selected ini digunakan untuk

menentukan apakah JCheckBoxMenuItem dalam keadaan terpilih atau tidak.

8. Dalam contoh ini kita akan mempunyai dua buah JRadioButtonMenuItem, radioBinary dan

radioText. Keduanya dibuat dengan langkah yang sama dengan komponen lain, klik kanan di

JMenu menuSetting, kemudian pilih menu: Add > JRadioButtonMenuItem

Set text dan mnemonic yang sesuai dari Jendela Properties.

9. Menambahkan ButtonGroup. Seperti halnya JRadioButton, JRadioButtonMenuItem juga

memerlukan ButtonGroup agar hanya satu buah JRadioButtonMenuItem yang bisa dipilih.

Cara menambahkan ButtonGroup sangat mudah, klik item ButtonGroup dari Jendela Pallete

kemudian klik Jendela Design, maka otomatis ButtonGroup akan ditambahkan. Ganti

namanya menjadi groupOpenMethod. Dalam Jendela Inspector, ButtonGroup yang baru

Page 73: Modul Pelatihan Java Rev 2.0

73

dibuat tadi akan berada dalam kategori Other Components, seperti terlihat dalam gambar di

bawah ini:

Gambar 9.11 ButtonGroup berada dalam kategori Other Components

10. Pilih masing-masing JRadioButtonMenuItem dari Jendela Inspector, kemudian perahatikan

Jendela Properties dari JRadioButtonMenuItem tersebut, pada bagian groupButton pilih item

groupOpenMethod, seperti terlihat dalam gambar di bawah ini:

Gambar 9.12 Properties dari JRadioButtonMenuItem

11. Compile dan jalankan class ToolbarMenu.java. Klik kanan class ToolbarMenu dari Jendela

Design kemudaian pilih menu Run File atau tekan tombol SHIFT + F6.

Untuk menambahkan aplikasi dengan PopUp Menu, lakukan langkah berikut ini.

1. Buka class ToolbarMenu.java, yang telah dibuat dalam langkah sebelumnya, dalam Jendela

Design.

2. Klik Jendela Pallete dan pilih JPopupMenu, kemudian klik Jendela Design. Secara otomatis

JPopupMenu akan ditambahkan dalam class ToolbarMenu.java. JPopupMenu tidak terlihat

dalam Jendela Design, namun anda bisa mengkasesnya melalui Jendela Inspector.

3. Seperti halnya JMenuBar, JPopupMenu dapat memiliki child berupa JMenu, JMenuItem,

JCheckBoxMenuItem, JRadioButtonMenuItem dan JSeparator. Menambahkan JMenuItem ke

dalam JPopupMenu sangat sederhana, caranya: klik kanan pada JPopupMenu di Jendela Design,

kemudian pilih menu: Add > JMenuitem

Page 74: Modul Pelatihan Java Rev 2.0

74

Ganti nama objectnya menjadi menuCut, beralihlah ke Jendela Properties kemudian set text

dan mnemonic yang sesuai. Lakukan langkah ini untuk JMenuItem yang lain, menuCopy dan

menuPaste.

4. Ketika tombol kanan mouse di klik di atas JFrame, JPopupMenu akan tampil. Agar behavior

tersebut berjalan, kita perlu menangani event mouseClick terhadap JFrame. Caranya :

a. Klik kanan JFrame di Jendela Design, kemudian pilih menu:

Events > Mouse > mouseClicked

b. Di dalam jendela source yang terbuka masukkan kode berikut ini:

private void formMouseClicked(java.awt.event.MouseEvent evt){

// TODO add your handling code here:

if(evt.getButton() == MouseEvent.BUTTON3){

popUpMenu.show(

(Component)evt.getSource(),

evt.getX(),evt.getY());

}

}

Kondisi if di atas digunakan apakah tombol yang diklik mouse adalah tombol sebelah kanan,

jika nilai kembalian method getButton sama dengan nilai BUTTON3 maka benar tombol

kanan yang ditekan. Method show digunakan untuk memunculkan popup menu, parameter

pertama diisi dengan Component di mana nantinya popup menu akan ditampilkan, sedangkan

parameter kedua dan ketiga diisi dengan letak koordinat popup menu akan ditampilkan.

5. Simpan file ToolbarMenu.java, compile dan jalankan. Kemudian coba munculkan popup menu

dengan mengklik kanan JFrame.

Untuk menambahkan toolbar pada aplikasi, lakukan langkah berikut ini.

1. Buatlah sebuah java package baru untuk menampung semua icon yang akan digunakan.

caranya klik kanan di jendela Projects bagian nama project, pilih menu: New > Java Package

Beri nama images untuk java package yang baru saja kita buka.

2. Memasukkan Icon ke dalam package. Untuk memasukkan image ke dalam package kita perlu

tahu di mana project disimpan, misalkan project disimpan dalam folder:

c:\javaswing

Buka file explorer, kemudian navigasi ke folder

c:\javaswing\src\images

Copy semua icon yang diperlukan ke dalam folder di atas. Build Project akan berhasil jika

tidak ada satupun error dalam kode program. Sebelum melakukan build project pastikan

terlebih dahulu tidak ada error dalam kode. Lakukan build setiap kali menambahkan file non-

java ke dalam folder source file. Agar file tersebut ikut tercopy ke dalam folder build\classes

penting

3. Build project.

4. Buka class ToolbarMenu.java yang sudah dibuat di langkah sebelumnya.

5. Buat sebuah object JToolBar, caranya: klik item JToolBar dari Jendela Pallete, kemudian klik

JFrame di Jendela Design. Secara otomatis sebuah object JToolBar akan dimasukkan ke dalam

JFrame. Ganti namanya menjadi toolBar.

6. Klik item JButton dalam Jendela Pallete kemudian klik komponen JToolBar yang baru saja kita

buat tadi. JButton baru akan diletakkan di atas JToolBar, ganti nama JButton tersebut menjadi

btnNew. Letakkan lagi satu buah JButton di atas JToolBar dan beri nama btnMaximize.

7. Agar tampilan JButton terlihat cantik, kita perlu mengeset beberapa nilai dari properti JButton, seperti terlihat pada gambar di bawah ini:

Page 75: Modul Pelatihan Java Rev 2.0

75

Gambar 9.13 Jendela Properties JButton

a. Text, hapus nilai textnya.

b. Border, pilih bordernya menjadi empty border dan set nilai bordernya menjadi [5,5,5,5].

Tujuan pemberian empty border ini agar tombol berukuran lebih besar dibandingkan dengan

icon yang akan digunakan nanti, dan setiap mouse melewati JButton, ada efek transisi yang

cantik. Untuk mengedit border dari JButton, Matisse menyediakan Jendela Border untuk

memilih border yang kita inginkan untuk Jbutton. Border yang dipilih bisa single border, atau

composite border yang terdiri dari beberapa border.

Gambar 9.14 Jendela Border Editor dari Jbutton

c. Opaque, uncheck nilai opaque. Bertujuan agar tombolnya berwarna transparan, sehingga

mempunyai warna background yang sama dengan background JToolBar.

d. Icon, ganti iconya dengan icon yang telah disiapkan. Untuk memasukkan icon ke dalam

JButton, tekan tombol di samping pilihan Icon di dalam Jendela Properties, kemudianakan

muncul Dialog Icon Editor seperti di bawah ini:

Page 76: Modul Pelatihan Java Rev 2.0

76

Gambar 9.15 Jendela icon editor

Pilih radio button Classpath, kemudian tekan tombol Select File dan pilih salah satu icon yang

telah disiapkan. Tekan OK. Lakukan langkah-langkah yang sama terhadap JButton yang lain.

8. Compile dan jalankan class ToolbarMenu untuk melihat hasilnya.

9.3.5 JDialog

Beberapa contoh penggunaan JDialog sebagai berikut.

JOptionPane.showMessageDialog(null, "Simple plain dialog",

"Plain dialig", JOptionPane.PLAIN_MESSAGE);

Gambar 9.16 Tampilan dialog sederhana

JOptionPane.showMessageDialog(null, "Your action was succeed, “ +

“you can proceed to next assigment", "Information dialog",

JOptionPane.INFORMATION_MESSAGE);

Gambar 9.17 Tampilan dialog dengan tipe dialog Information

JOptionPane.showMessageDialog(null, "You neet to be sure to do this

action!", "Dialog Peringatan", JOptionPane.WARNING_MESSAGE);

Page 77: Modul Pelatihan Java Rev 2.0

77

Gambar 9.18 Dialog dengan tipe Warning

JOptionPane.showMessageDialog(null, "Something goes wrong and

generate error message", "Error Dialog", JOptionPane.ERROR_MESSAGE);

Gambar 9.19 Dialog dengan tipe Error

JOptionPane.showConfirmDialog(null, "Choose yes or no","Confirmation

Dialog", JOptionPane.YES_NO_OPTION, JOptionPane.WARNING_MESSAGE);

Gambar 9.20 Option dialog dengan tipe Information dan pilihan YES_NO

JOptionPane.showConfirmDialog(null, "Choose yes, no or

cancel","Confirmation Dialog", JOptionPane.YES_NO_CANCEL_OPTION,

JOptionPane.PLAIN_MESSAGE);

Gambar 9.21 OptionDialog dengan tipe Plain dan pilihan YES_NO_CANCEL

JOptionPane.showInputDialog(null, "Input your name here","Input

Dialog", JOptionPane.INFORMATION_MESSAGE);

Page 78: Modul Pelatihan Java Rev 2.0

78

Gambar 9.22 InputDialog dengan tipe message Information

String[] options = {"Apple","Mango","Grape","Guava"};

JOptionPane.showInputDialog(null, "Choose this one Option","Input

dialog", JOptionPane.WARNING_MESSAGE,null,options,"Apple");

Gambar 9.23 InputDialog dialog dengan tipe Warning, Options berupa array of String

dan initialValue = 'Apple'

9.3.6 JFileChooser

Aplikasi berikut ini adalah contoh penggunaan JFileChooser untuk membuka dan menyimpan file.

Gambar 9.24 Contoh program menggunakan JFileChooser

Tampilan JFileChooser ketika tombol open ditekan adalah seperti di bawah ini:

Gambar 9.25 Tampilan JFileChooser

Page 79: Modul Pelatihan Java Rev 2.0

79

Untuk membuat aplikasi di atas lakukan langkah-langkah berikut ini:

1. Buat class JFrame Form baru, beri nama Chooser.java

2. Masukkan dua buah JTextField: txtOpen dan txtSave, dua buah Jbutton: btnOpen dan btn

save, sebuah JLabel: lblStatus. Sesuaikan penataan komponen sesuai dengan gambar di atas.

3. Tambahkan sebuah object JFileChooser sebagai field dari class Chooser, beri nama chooser.

public class Chooser{

JFileChooser chooser = new JFileChooser();

//kode lain di sini

} 4. FileNameExtentionFilter digunakan sebagai file filter dalam JFileChooser. Metode filteringnya

adalah mencocokkan ekstensi file dalam file system dengan ekstensi yang ada dalam

FileNameExtentionFilter. Contoh kode di bawah ini akan menyebabkan JFileChooser

mempunyai pilihan “JPEG File”, dan jika pilihan tersebut dipilih, maka file dengan ekstensi

“jpg”, “jpeg”,”JPG” atau“JPEG” saja yang akan ditampilkan oleh JFileChooser.

FileNameExtensionFilter JPEGFilter =

New FileNameExtensionFilter(

"JPEG File","jpg","jpeg",”JPG”,”JPEG”);

chooser.addChoosableFileFilter(JPEGFilter);

5. Set direktori yang akan dituju oleh JFileChooser. Untuk mengetahui di mana direktori aktif

aplikasi, kita bisa menggunakan system property “user.dir”. Kode berikut ini akan

menyebabkan JFileChooser dibuka pada direktori aktif aplikasi:

String dir = System.getProperty("user.dir");

chooser.setCurrentDirectory(new File(dir));

6. Menghandle event penekanan tombol btnSave. Ketika tombol btnSave ditekan, chooser akan

menampilkan dialog save file, kemudian mengambil nama file yang dipilih dan menampilkannya

dalam txtSave, serta menampilkanya dalam lblStatus. Berikut ini kodenya :

private void btnSaveActionPerformed(ActionEvent evt) {

// TODO add your handling code here:

int ret = chooser.showSaveDialog(this);

if(ret == JFileChooser.APPROVE_OPTION){

File f = chooser.getSelectedFile();

lblStatus.setText("Status : saving file" + f.getAbsolutePath());

txtSave.setText(f.getAbsolutePath());

}

}

7. Menghandle penekanan tombol btnOpen. Kode untuk menangani penekanan tombol

btnOpen mirip dengan kode untuk menangani penenakan tombol btnSave, perbedaanya

adalah btnOpen akan menampilkan dialog open file, berikit ini kodenya:

private void btnBrowseActionPerformed(ActionEvent evt){

// TODO add your handling code here:

int ret = chooser.showOpenDialog(this);

if(ret == JFileChooser.APPROVE_OPTION){

File f = chooser.getSelectedFile();

lblStatus.setText("Status : opening file" + f.getAbsolutePath());

txtOpen.setText(f.getAbsolutePath());

}

}

8. Compile dan jalankan aplikasinya dengan menekan tombol SHIFT + F6

Page 80: Modul Pelatihan Java Rev 2.0

80

10 Akses Database Via JDBC Overview

Bagian ini akan membahas bagaimana mengakses database via JDBC. Dengan mengakses database,

kita dapat membuat aplikasi yang bisa melakukan penyimpanan data ke dalam storage dan juga

mengakses untuk keperluan proses bisnis tertentu.

Tujuan

1. Memahami konsep JDBC

2. Myenggunakan JDBC

10.1 Pengenalan JDBC

Java Database Connectivity (JDBC) merupakan Application Programming Interface (API), dalam

paket java.sql.*, yang memungkinkan untuk mengakses segala database menggunakan Java. Dari JDBC

ini kemudian muncul konsep‐konsep yang berdiri di atas JDBC, seperti SQL‐Mapping (misal

menggunakan iBatis), Data Access Object (DAO, misal menggunakan SpringDAO), dan Object

Relational Mapping (ORM, misal menggunakan Oracle Toplink dan Hibernate). Posisi JDBC dalam

program Java dapat dilihat pada gambar berikut:

Gambar 10.1 Posisi JDBC dalam program Java

10.2 Menggunakan JDBC

Pada dasarnya, untuk mengakses database dengan JDBC, diperlukan langkah-langkah berikut:

a. Load Database Driver

b. Buat koneksi

c. Lakukan pemrosesan query

d. Tutup koneksi

Berdasarkan langkah di atas maka kita memerlukan Database Driver dari masing‐masing vendor database (misal untuk MySQL bisa diunduh dari http://mysql.com ) supaya JDBC bisa mengakses

database dari vendor tersebut. Untuk me‐load sebuah driver digunakan dynamic class loading,

contoh:

Class.forName(“com.mysql.jdbc.Driver”);

Sintaks di atas digunakan untuk me‐load database driver milik MySQL ke dalam system property

“jdbc.drivers”. Setelah driver di‐load,class javax.sql.DriverManager dibutuhkan untuk me‐load system property “jdbc.drivers”. Saat koneksi dibutuhkan, method getConnection() dari Driver manager

digunakan untuk membuat koneksi JDBC.

Connection con = DriverManager.getConnection(

"jdbc:mysql://host:port/dbname",

Page 81: Modul Pelatihan Java Rev 2.0

81

"dbuser",

"dbpass" );

Setelah koneksi berhasil terbentuk, maka bisa dilakukan interaksi dengan database melalui

perintah‐perintah SQL, dengan terlebih dahulu membuat objek Statement sebagai berikut:

. . . . .

Statement stmt = con.createStatement();

ResultSet rset = stmt.executeQuery(SQLQuery);

. . . . .

SQLQuery merupakan suatu String yang berisi query ke database. Hasil query tersebut disimpan di

objek ResultSet. Untuk menampilkan hasil dari query tersebut, digunakan variabel rset yang

kemudian dimasukkan dalam suatu loop sebagai berikut:

. . . . .

while(rset.next()){

System.out.print(rset.getString(1)+"--");

System.out.print(rset.getString(2)+"--");

System.out.print(rset.getString(3));

System.out.println();

}

. . . . . perintah while di atas akan mengambil hasil kolom pertama, kedua dan ketiga. Bila koneksi telah

dilakukan dan aplikasi tidak lagi membutuhkan koneksi ke database, session yang terbentuk antara

aplikasi dengan database sebaiknya ditutup dengan kode sebagai berikut:

try{

con.close();

}catch(SQLException ex){}

10.3 Membuat Form CRUD dengan JDBC

Pada bagian ini, kita akan mencoba untuk membuat sebuah aplikasi CRUD (Create, Read, Update,

Delete) sederhana menggunakan JDBC. Sebelumnya dibuat dulu database dengan satu tabel

mahasiswa dengan 4 atribut (Nama, NIM, JenisKelamin dan Jurusan).

Untuk membuat form CRUD, lakukan langkah-langkah berikut ini. Pertama kita buat aplikasi desktop

menggunakan JTable sesuai gambar di bawah ini.

1. Pilih File > New File > Swing GUI Form > JFrame Form.

Page 82: Modul Pelatihan Java Rev 2.0

82

Gambar 10.2 Dialog window

2. Isi nama Classnya dan pilih packagenya sesuai anak panah.

3. Pertama kita membuat Table dengan Mendrag JTable pada Palette. Kita beri nama dgn klik

kanan pilih “change variable name”,kita beri nama misal : “table”

4. Pilih Table klik kanan Properties,seperti gambar di bawah ini :

Gambar 10.3 Tabel Properties

5. Buat kolom dengan klik Model lalu isi nama kolom – kolomnya seperti gambar di bawah ini

sesuai anak panah:

Gambar 10.4 JTable Model

6. Setting di source code nya. Pada baris paling akhir di sourcenya buat obyek untuk

TableModel langsung ketik code di bawah ini:

private javax.swing.table.DefaultTableModel tblModel =

getDefaultTabelModel();

7. Buat fungsi getDefaultTabelModel(); dan Tabel untuk pengaturan tablenya seperti pada

gambar di bawah ini, juga diketik secara manual:

Page 83: Modul Pelatihan Java Rev 2.0

83

8. Setting di konstruktornya, untuk pengaturan lebar kolomnya. Tambahkan source code

berikut:

tabel.setModel(tblModel);

Tabel(tabel,new int[]{120,180,120,120}); 9. Cara menginput data kedalam ke JTable. Pertama kali kita deklarasikan dulu variable array

satu dimensi di luar fungsi supaya dikenal disemua fungsi yang lain.

String data[] = new String [4];

Di dalam fungsi private void cmdsimpanactionperformed() tambahkan kode berikut.

10. Cara Menampilkan Data dari JTable kedalam Form di Netbeans. Nanti kita akan mengklik 2x

baris dalam JTable yang berisi data yang akan ditampilkan kedalam Form di Netbeans, caranya

pilih Inspector kemudian ikuti petunjuk di bawah ini:

Page 84: Modul Pelatihan Java Rev 2.0

84

Gambar 10.5 Inspector window

Setelah itu akan muncul Fungsi :

private void tabelMouseClicked(java.awt.event.MouseEvent evt) {

}

Kita modifikasi Fungsi tersebut sehingga menjadi seperti di bawah ini :

Dengan code di atas maka secara otomatis jika kita klik 2x baris dalam JTable maka

data dalam baris terpilih akan muncul dalam Form kemudian bisa kita edit dan delete.

11. Cara mengedit data dalam JTable. Setelah data muncul dalam Form untuk mengeditnya ikuti

code di bawah ini:

Page 85: Modul Pelatihan Java Rev 2.0

85

12. Cara menghapus data dalam JTable. Ketikan code di bawah ini:

private void cmdhapusActionPerformed(

java.awt.event.ActionEvent evt) {

tblModel.removeRow(row);

}

Langkah berikutnya adalah melakukan setting terhadap database dan koneksi JDBC yang digunakan.

1. Pertama kita buat file dengan extention .ini pada folder lib dengan terlebih dahulu membuat

folder lib(misal : database.ini). yang isinya seperti di bawah ini:

Gambar 10.6 Setting JDBC

2. Lalu kita buat file Database.java untuk melakukan relasi dengan file Database.ini yang isinya:

Page 86: Modul Pelatihan Java Rev 2.0

86

3. Memanggil class Database.java jika kita ingin melakukan pemrosesan data yang berhubungan

ke database. Untuk mengambil data dari file database.ini kita akan memodifikasi program

seperti di bawah ini pada sebelum dan dalam Konstruktor:

4. Lalu kita buat Function setDefaultTable():

Page 87: Modul Pelatihan Java Rev 2.0

87

5. Setelah code di atas selesai, data dari mysql akan tertampil pada table di Form javanya seperti

gambar di bawah ini:

Gambar 10.7 Aplikasi jadi

Berikutnya adalah membuat fungsi untuk pemrosesan data dengan Java. Berikut langkah-langkahnya.

1. Untuk pembuatan menu input . klik kanan tombol “Input” lalu pilih

Event ->action->Action Performed

Setelah itu buatlah code dalam function yg baru terbentuk seperti di bawah ini:

Page 88: Modul Pelatihan Java Rev 2.0

88

2. Untuk pembuatan menu cari . klik kanan tabel di Netbeans lalu pilih

Event ->Mouse->Mouse Click.

Kita menggunakan metode “klik”,jika tablenya diklik maka data dari table akan tertampil di

Formnya.Lalu tambahkan coding dalam Fungsi tabelMouseClicked seperti code di bawah ini:

3. Untuk pembuatan menu edit . klik kanan tombol ”ubah” di Netbeans lalu pilih

Event ->Action->ActionPerformed.

Untuk lebih jelasnya lihat code berikut:

Page 89: Modul Pelatihan Java Rev 2.0

89

4. Untuk pembuatan menu Hapus . klik kanan tombol ”Hapus” di Netbeans lalu pilih

Event ->Action->ActionPerformed.

Setelah data dicari, Menu yang terakhir adalah delete (untuk menghapus data):

Page 90: Modul Pelatihan Java Rev 2.0

90

11 Networking Overview

Java memberikan kemudahan dalam pengembangan aplikasi yang meliputi berbagai fungsi yang melalui

jaringan. Pada bagian ini, akan dibahas tentang konsep dasar jaringan dan aplikasi via jaringan

sederhana menggunakan Java.

Tujuan

1. Mengerti konsep dasar jaringan

2. Membuat aplikasi menggunakan package jaringan Java

11.1 Konsep Dasar Jaringan

Jika sebelumnya Anda telah mengetahui, bahwa internet adalah jaringan global dengan berbagai jenis

komputer yang berbeda yang tersambung dalam berbagai cara. Walaupun terdapat perbedaan dalam

software dan hardware yang tersambung bersama-sama, hal tersebut sangatlah bagus bahwa internet

masih dapat berfungsi. Hal ini memungkinkan karena standar komunikasi memiliki ketetapan dan juga

keselarasan. Standar ini menjamin kesesuaian dan kekuatan komunikasi di antara luasnya sistem pada

internet. Mari kita pelajari beberapa standar yang berlaku.

11.1.1 IP Address

Pada setiap komputer yang tersambung dengan internet memiliki alamat IP yang unik. Alamat IP

secara logika hampir sama dengan alamat pengiriman surat tradisional di mana memiliki arti bahwa

alamat yang bersifat unik tersebut mewakili dari keterangan sebuah object. Alamat tersebut

diwakilkan dalam 32-bit nomor yang digunakan sebagai pengenal yang bersifat unik dari setiap

komputer yang tersambung dengan internet. 192.1.1.1 adalah contoh dari sebuah alamat IP. Mereka

juga bisa ditulis dengan bentuk simbol seperti docs.rinet.ru.

11.1.2 Protokol

Karena terdapat jenis komunikasi yang berbeda-beda yang mungkin terjadi pada internet, di sana

harus terdapat suatu jumlah yang sama untuk mekanisme penangangan komunikasi. Setiap jenis

komunikasi membutuhkan protokol yang spesifik dan unik. Protokol mengatur peraturan dan standar

yang menetapkan jenis komunikasi internet yang khusus. Hal tersebut menjelaskan format data yang

dikirim lewat internet, seiring dengan bagaimana dan kapan itu dikirim. Konsep dari protokol

tentunya tidak terlalu asing untuk kita. Mengingat sudah beberapa kali Anda telah menggunakan jenis percakapan ini:

"Hallo."

"Hallo. Selamat siang. Bolehkah saya berbicara dengan Joan?"

"Okay, mohon tunggu sebentar."

"terima kasih."

...

Ini adalah protokol sosial yang digunakan ketika dalam pembicaraan melalui telepon. Jenis protokol

tipe ini memberikan kita kepercayaan untuk mengetahui apa yang harus dilakukan dalam situasi

tersebut. Mari kita lihat beberapa protokol penting yang digunakan pada internet. Hypertext

Transfer Protocol (HTTP) adalah salah satu protokol yang sering digunakan. Digunakan untuk

mentransfer dokumen HTML pada Web. Kemudian, ada juga File Transfer Protocol (FTP) di mana

lebih umum dibandingkan dengan HTTP dan memperbolehkan Anda untuk mentransfer file biner

lewat intenet. Kedua protokol tersebut memiliki peraturan masing-masing dan standar dalam

pengiriman data. Java juga mendukung kedua protokol tersebut.

Page 91: Modul Pelatihan Java Rev 2.0

91

11.1.3 Port

Sekarang, protokol hanya bisa dipertimbangkan jika digunakan dalam konteks suatu jasa. Sebagai

contoh, protokol HTTP digunakan ketika Anda menyediakan isi Web melalui layanan HTTP. Setiap

komputer pada internet dapat menyediakan berbagai jenis layanan melalui berbagai jenis protokol

yang mendukung. Masalahnya, bagaimanapun juga, kita harus mengetahui jenis layanan sebelum

sebuah informasi dapat ditransfer. Untuk itulah port digunakan.

Port adalah 16-bit nomor di mana mengenal setiap layanan yang ditawarkan oleh server jaringan.

Untuk menggunakan layanan khusus dan oleh karena itu, jalur komunikasi yang melewati protokol

tertentu, Anda perlu menyambungkan pada port yang sesuai. Port dihubungkan dengan nomor dan

beberapa nomor bersifat spesifik yang berhubungan dengan jenis layanan khusus. Port dengan layanan

pekerjaan tertentu disebut port standar. Sebagai contoh, layanan FTP terletak pada port 21

sedangkan layanan HTTP terletak pada port 80. Jika Anda ingin menggunakan file transfer FTP, Anda

perlu terhubung dengan port 21 pada komputer Anda. Sekarang, semua standar layanan tertentu

diberikan nilai port di bawah 1024.

port dengan nilai di atas 1024 disediakan untuk komunikasi custom. Jika terdapat kasus di mana port

dengan nilai di atas 1024 telah digunakan oleh beberapa komunikasi custom, Anda harus mencari

nilai lain yang tidak digunakan.

11.1.4 Paradigma client/server

Paradigma client/server adalah dasar untuk framework jaringan Java. Tentunya, penetapan ini terdiri

dari dua elemen besar, yaitu client dan server. Client adalah mesin yang membutuhkan beberapa

jenis informasi sedangkan server adalah mesin yang menyimpan informasi dan menunggu untuk

menyampaikannya pada client.

Paradigma ini menjelaskan sebuah skenario sederhana. Tentunya, client terhubung dengan server dan

meminta informasi. Kemudian server mengingat permintaan dan mengembalikan informasi yang

tersedia kepada client.

11.1.5 Socket

Konsep umum jaringan yang terakhir sebelum kita membahas lebih dalam tentang Java networking

adalah dengan memperhatikan sockets. Kebanyakan pemrograman Java network menggunakan jenis

khusus dari komunikasi jaringan yang diketahui sebagai sockets. Socket adalah software abstrak

untuk media input atau output komunikasi. Socket digunakan oleh Java untuk mengatasi komunikasi

pada jaringan level rendah. Jalur komunikasi ini memungkinkan untuk mentransfer data melalui port khusus. Singkatnya, socket adalah point terakhir untuk komunikasi antara dua mesin.

11.2 Java Networking Package

Package dari java.net menyediakan banyak class yang berguna untuk pengembangan aplikasi jaringan.

Untuk daftar lengkap dari class jaringan dan interface, dapat dilihat pada dokumentasi API.

Pembelajaran akan difokuskan pada empat class yaitu : class ServerSocket, Socket, MulticastSocket,

dan DatagramPacket.

11.2.1 Class ServerSocket dan Socket

Class ServerSocket menyediakan fungsi-fungsi dasar dari sebuah server. Tabel berikut menjelaskan

dua dari empat constructor pada class ServerSocket:

Tabel 11.1 Contructor class ServerSocket

Nama Constructor Fungsi

ServerSocket(int port) Ketika sebuah server menetapkan suatu port tertentu, sebuah

port 0 menugaskan sebuah server kepada port bebas manapun.

Page 92: Modul Pelatihan Java Rev 2.0

92

Panjang antrian maksimum untuk koneksi yang akan datang

diatur sebanyak 50 sebagai defaultnya.

ServerSocket(int port, int backlog) Ketika sebuah server menetapkan suatu port tertentu, panjang

antrian maksimum untuk koneksi yang akan datang berdasarkan

pada parameter backlog.

Berikut ini adalah beberapa method class pada ServerSocket:

Tabel 11.2 Method class ServerSocket

Nama method Fungsi

public Socket accept() Menyebabkan server untuk menunggu dan mendengarkan dari

koneksi client, kemudian menerimanya.

public void close() Menutup socket server. Client tidak dapat lagi terhubung ke

server hingga dibuka kembali

public int getLocalPort() Mengembalikan port di mana socket juga membatasi

public boolean isClosed() Mendeteksi apakah socket tertutup atau belum

Contoh yang berhasil melakukan implementasi sebuah server sederhana, di mana sebuah informasi sederhana dikirim oleh client dapat dilihat pada listing program berikut ini:

import java.net.*;

import java.io.*;

public class EchoingServer {

public static void main(String [] args) {

ServerSocket server = null;

Socket client;

try {

server = new ServerSocket(1234);

//1234 nomor port yang belum digunakan

} catch (IOException ie) {

System.out.println("Cannot open socket.");

System.exit(1);

}

while(true) {

try {

client = server.accept();

OutputStream clientOut = client.getOutputStream();

PrintWriter pw = new PrintWriter(clientOut, true);

InputStream clientIn = client.getInputStream();

BufferedReader br = new BufferedReader(new

InputStreamReader(clientIn));

pw.println(br.readLine());

} catch (IOException ie) {

}

}

Page 93: Modul Pelatihan Java Rev 2.0

93

}

}

Ketika class ServerSocket mengimplementasikan server socket, Class Socket mengimplementasikan

socket client. Class Socket memiliki delapan constructor, dua di antaranya siap dipanggil. Langsung

saja kita lihat dua constructor tersebut.

Tabel 11.3 Constructor class Socket

Nama Constructor Fungsi

Socket(String host, int port) Membuat sebuah socket client di mana dihubungkan dengan

diberikan nomor port pada host tertentu.

Socket(InetAddress address, int

port)

Membuat sebuah socket client di mana dihubungkan dengan

diberikannya nomor port pada alamat IP tertentu.

Berikut adalah beberapa dari method class pada Socket:

Tabel 11.4 Method class Socket

Nama Method Fungsi

public void close() Menutup socket client

public InputStream getInputStream() Menerima kembali input stream yang berhubungan

dengan socket ini.

public OutputStream getOutputStream() Menerima kembali output stream yang berhubungan

dengan socket ini.

public InetAddress getInetAddress() Mengembalikan alamat IP kepada socket ini pada saat

masih terhubung.

public int getPort() Mengembalikan remote port kepada socket ini pada

saat masih terhubung.

public boolean isClosed() Mendeteksi apakah socket telah tertutup atau tidak

Contoh yang berhasil melakukan implementasi sebuah client sederhana, di mana mengirim data

kepada server dapat dilihat pada listing program di bawah ini:

import java.io.*;

import java.net.*;

public class MyClient {

public static void main(String args[]) {

try {

//Socket client = new Socket("133.0.0.1", 1234);

Socket client = new Socket(InetAddress.getLocalHost(), 1234);

InputStream clientIn = client.getInputStream();

OutputStream clientOut = client.getOutputStream();

PrintWriter pw = new PrintWriter(clientOut, true);

BufferedReader br = new BufferedReader(new

Page 94: Modul Pelatihan Java Rev 2.0

94

InputStreamReader(clientIn));

BufferedReader stdIn = new BufferedReader(new

InputStreamReader(System.in));

System.out.println("Type a message for the server: ");

pw.println(stdIn.readLine());

System.out.println("Server message: ");

System.out.println(br.readLine());

pw.close();

br.close();

client.close();

} catch (ConnectException ce) {

System.out.println("Cannot connect to the server.");

} catch (IOException ie) {

System.out.println("I/O Error.");

}

}

}

11.2.2 Class MulticastSocket dan DatagramPacket

Class MulticastSocket sangat berguna untuk aplikasi yang mengimplementasikan komunikasi secara

berkelompok. Alamat IP untuk kelompok multicast berkisar antara 224.0.0.0 hingga 239.255.255.255.

Meskipun begitu, alamat 224.0.0.0 telah dipesan dan seharusnya tidak digunakan. Class ini memiliki

tiga constructor tetapi yang akan dibahas hanya salah satu dari ketiga constructor ini.

Tabel 11.5 Constructor class MulticastSocket

Nama Constructor Fungsi

MulticastSocket(int port) Membuat multicast socket dibatasi dengan pemberian nomor port

Tabel berikutnya memberikan penjelasan beberapa method MulticastSocket.

Tabel 11.6 Method class MulticastSocket

Nama Method Fungsi

public void joinGroup(InetAddress mcastaddr) Bergabung dengan kelompok multicast pada

alamat tertentu

public void leaveGroup(InetAddress mcastaddr) Meninggalkan kelompok multicast pada alamat

tertentu

public void send(DatagramPacket p) Metode turunan dari class DatagramSocket.

Mengirim p dari socket ini.

Sebelum seseorang dapat mengirim pesan kepada suatu kelompok, pertama kali yang harus dilakukan

oleh orang tersebut adalah harus menjadi anggota dari multicast kelompok dengan menggunakan

method joinGroup. Sekarang seorang anggota dapat mengirim pesan melalui method send. Jika Anda

telah selesai berbicara dengan kelompok, Anda dapat menggunakan method leaveGroup untuk

melepaskan keanggotaan Anda.

Page 95: Modul Pelatihan Java Rev 2.0

95

Sebelum melihat contoh dalam menggunakan class multicastSocket, pertama-tama mari kita lihat

pada class DatagramPacket. Perhatikan bahwa dalam method send dari class multiSocket, dibutuhkan

parameter yaitu object DatagramPacket. Sehingga, kita harus mengerti object jenis ini sebelum

menggunakan method send.

Class DatagramPacket digunakan untuk mengirim data melalui protokol connectionless seperti

multicast. Masalah yang ditimbulkan bahwa pengiriman packet tidak terjamin. Mari kita perhatikan

dua dari enam constructor.

Tabel 11.7 Constructor class DatagramPacket

Nama Constructor Fungsi

DatagramPacket(byte[] buf, int length) Constructor dari datagramPacket untuk menerima paket

dengan panjang length. Seharusnya kurang dari atau sama

dengan ukuran dari buffer buf.

DatagramPacket(byte[] buf, int length,

InetAddress address, int port)

Constructor dari datagramPacket untuk mengirim paket

dengan panjang length dengan nomor port tertentu dan host

tertentu.

Berikut adalah beberapa method dari class DatagramPacket.

Tabel 11.8 Method class DatagramPacket

Nama Method Fungsi

public byte[] getData() Mengembalikan buffer di mana data telah disimpan

public InetAddress getAddress() Mengembalikan alamat IP mesin di mana paket yang dikirim

atau yang diterima

public int getLength() Mengembalikan panjang data yang dikirim atau diterima

public int getPort() Mengembalikan nomor port pada remote host di mana

paket yang dikirim atau yang diterima

Contoh multicast kita juga mengandung dua class, server dan client. Server menerima pesan dari

client dan mencetak pesan tersebut. Berikut adalah class server:

import java.net.*;

public class ChatServer {

public static void main(String args[]) throws Exception {

MulticastSocket server = new MulticastSocket(1234);

InetAddress group = InetAddress.getByName("234.5.6.7");

//getByName – Mengembalikan alamat IP yang diberikan oleh Host

server.joinGroup(group);

boolean infinite = true;

/* Server terus-menerus menerima data dan mencetaknya*/

while(infinite) {

byte buf[] = new byte[1024];

DatagramPacket data = new DatagramPacket(buf,buf.length);

server.receive(data);

Page 96: Modul Pelatihan Java Rev 2.0

96

String msg = new String(data.getData()).trim();

System.out.println(msg);

}

server.close();

}

}

Berikut adalah class client:

import java.net.*;

import java.io.*;

public class ChatClient {

public static void main(String args[]) throws Exception {

MulticastSocket chat = new MulticastSocket(1234);

InetAddress group = InetAddress.getByName("234.5.6.7");

chat.joinGroup(group);

String msg = "";

System.out.println("Type a message for the server:");

BufferedReader br = new BufferedReader(new

InputStreamReader(System.in));

msg = br.readLine();

DatagramPacket data = new DatagramPacket(msg.getBytes(),

0, msg.length(), group, 1234);

chat.send(data);

chat.close();

}

}