Anda di halaman 1dari 44

Contoh Program Java Sederhana : Hitung Luas Lingkaran berikut ini merupakan contoh program java sederhana untuk

menghitung luas lingkaran. public class HitungLuasLingkaran {

public double luas;

public static void main(String[] args) { System.out.print("Masukkan jari : "); String jari=System.console().readLine(); System.out.println("Luasnya adalah " + Math.pow(Double.parseDouble(jari), 2)) * 3.14); } }

Simpan dengan nama HitungLuasLingkaran.java kemudian compile melalui CMD,


javac HitungLuasLingkaran.java java HitungLuasLingkaran

Pemrograman dengan Java


Ari Hermawan Java sebagai salah satu bahasa pemrograman baru menjanjikan banyak kemudahan bagi programer junior maupun senior. Tutorial ini akan membawa Anda mengenal lebih jauh bahasa ini melalui pembahasan konsep model perancangan dan petunjuk sederhana penggunaannya.

Apakah Java?
Java adalah bahasa pemrograman berorientasi objek yang dikembangkan oleh Sun Microsystems sejak tahun 1991. Bahasa ini dikembangkan dengan model yang mirip dengan bahasa C++ dan Smalltalk, namun dirancang agar lebih mudah dipakai dan platform independent, yaitu dapat dijalankan di berbagai jenis sistem operasi dan arsitektur komputer. Bahasa ini juga dirancang untuk pemrograman di Internet sehingga dirancang agar aman dan portabel.

Platform Independent
Platform independent berarti program yang ditulis dalam bahasa Java dapat dengan mudah dipindahkan antar berbagai jenis sistem operasi dan berbagai jenis arsitektur komputer. Aspek ini sangat penting untuk dapat mencapai tujuan Java sebagai bahasa pemrograman Internet di mana sebuah program akan dijalankan oleh berbagai jenis komputer dengan berbagai jenis sistem operasi. Sifat ini berlaku untuk level source code dan binary code dari program Java. Berbeda dengan bahasa C dan C++, semua tipe data dalam bahasa Java mempunyai ukuran yang konsisten di semua jenis platform. Source code program Java sendiri tidak perlu dirubah sama sekali jika Anda ingin mengkompile ulang di platform lain. Hasil dari mengkompile source code Java bukanlah kode mesin atau instruksi prosesor yang spesifik terhadap mesin tertentu, melainkan berupa bytecode yang berupa file berekstensi .class. Bytecode tersebut dapat langsung Anda eksekusi di tiap platform yang dengan menggunakan Java Virtual Machine (JVM) sebagai interpreter terhadap bytecode tersebut. JVM sendiri adalah sebuah aplikasi yang berjalan di atas sebuah sistem operasi dan menerjemahkan bytecode program Java dan mengeksekusinya, sehingga secara konsep bisa dianggap sebagai sebuah interpreter. Proses pengeksekusian program Java dapat dilukiskan seperti di Gambar 1. Dengan cara ini, sebuah program Java yang telah dikompilasi akan dapat berjalan di platform mana saja, asalkan ada JVM di sana. Kompiler dan interpreter untuk program Java berbentuk Java Development Kit (JDK) yang diproduksi oleh Sun Microsystems. JDK ini dapat didownload gratis dari situs java.sun.com. Interpreter untuk program Java sendiri sering juga disebut Java Runtime atau Java Virtual Machine. Interpreter Java, tanpa kompilernya, disebut Java Runtime Environment (JRE) dapat didownload juga di situs yang sama. Untuk mengembangkan program Java dibutuhkan JDK, sementara jika hanya ingin menjalankan bytecode Java cukup dengan JRE saja. Namun untuk
2

mengeksekusi applet (sebuah bytecode Java juga) Anda biasanya tidak perlu lagi mendownload JRE karena browser yang Java-enabled telah memiliki JVM sendiri.

Library
Selain kompiler dan interpreter, bahasa Java sendiri memiliki library yang cukup besar yang dapat mempermudah Anda dalam membuat sebuah aplikasi dengan cepat. Library ini sudah mencakup untuk grafik, desain user interface, kriptografi, jaringan, suara, database, dan lain-lain.

OO
Java adalah bahasa pemrograman berorientasi objek. Pemrograman berorientasi objek secara gamblang adalah teknik untuk mengorganisir program dan dapat dilakukan dengan hampir semua bahasa pemrograman. Namun Java sendiri telah mengimplementasikan berbagai fasilitas agar seorang programer dapat mengoptimalkan teknik pemrograman berorientasi objek. Sedikit perbandingan tambahan dengan bahasa C dan C++, Java banyak mewarisi konsep orientasi objek dari C++ namun dengan menghilangkan aspek-aspek kerumitan dalam bahasa C++ tanpa mengurangi kekuatannya. Hal ini mempermudah programer pemula untuk mempelajari Java namun mengurangi keleluasaan programer berpengalaman dalam mengutakatik sebuah program. Di balik kemudahan yang ditawarkan Java, luasnya fasilitas library Java sendiri membuat seorang programer membutuhkan waktu yang tidak singkat untuk dapat menguasai penggunaan library-library tersebut.

Memulai Pemrograman Java


Untuk membuat program Java, seperti telah disebutkan sebelumnya, Anda membutuhkan JDK. Proses instalasi JDK tersebut sangat mudah dan tidak membutuhkan pengetahuan tertentu. Namun untuk menggunakannya Anda perlu melakukan beberapa penyesuaian dengan sistem operasi Anda. Umumnya yang perlu Anda lakukan adalah memasukkan path ke direktori JDK Anda ke setting path pada sistem operasi Anda. Misalkan direktori JDK Anda adalah C:\jdk1.4 maka pada Windows 98 Anda cukup menambahkan baris perintah SET PATH=C:\jdk1.4\bin pada file autoexec.bat Anda. Untuk Windows NT/2000/XP Anda cukup menambahkan direktori C:\jdk1.4\bin pada variabel path di System Environment. Caranya: klik kanan ikon My Computer, pilih Properties. Kemudian pilih tab Advanced. Lalu klik tombol Environment Variables, cari variabel path, kemudian tambahkan path direktori JDK Anda ke dalam variabel tersebut. Untuk Linux, tambahkan baris perintah SET CLASSPATH=(direktori jdk Anda) ke file profile Anda. Untuk mencoba JDK, ketikkan perintah java dan javac pada shell prompt (atau DOS Command Prompt). Jika perintah tersebut sudah dikenali maka program java atau javac akan menampilkan sintaks penggunaan. Untuk kemudahan dan berbagai fasilitas tambahan Anda dapat menggunakan Integrated Development Environment (IDE) untuk bahasa Java seperti Visual Caf dari Symantec atau JBuilder dari Borland.

Urutan langkah-langkah yang harus Anda lakukan untuk membuat sebuah program Java sederhana adalah: 1. Membuat source code program dengan editor teks apapun. Ingat, file tersebut harus berekstensi .java dan case sensitive. 2. Mengkompile source code dengan perintah javac. Misalnya: javac HelloWorld.java. Jika berhasil, hasilnya adalah file bytecode berakhiran .class. 3. Mengeksekusi bytecode dengan perintah java. Parameter dari perintah ini adalah nama file hasil kompilasi tanpa ekstensi .class. Contoh: java HelloWorld.

Source Code
Berikut kode untuk HelloWorld.java:
public class HelloWorld { public static void main(String[] args) { System.out.println("Apa Kabar Dunia?"); } }

Dan ini sebuah contoh lain, yaitu applet sederhana untuk menampilkan teks di applet. Sebutlah file ini bernama HelloWorldApplet.java:
import java.awt.Graphics; public class HelloWorldApplet extends java.applet.Applet { public void paint(Graphics g) { g.drawString("Apa Kabar Dunia?", 5, 25); } }

Secara gamblang dapat diperhatikan bahwa struktur kedua program sangat mirip, dan hanya berbeda dalam konteks eksekusi. Kedua program ini akan dibahas lebih lanjut setelah kita membahas cara mengkompile dan mengeksekusi program tersebut. Perlu diingat bahwa bahasa Java bersifat case sensitive, sehingga Anda harus memperhatikan penggunaan huruf besar dan kecil. Selain itu penulisan source code program tidak harus memperhatikan bentuk tertentu, sehingga Anda bisa saja menuliskan semua baris source code tersebut dalam satu baris asal Anda tidak lupa membubuhkan tanda titik koma (;), atau menuliskan tiap kata dalam satu baris tersendiri. Namun dianjurkan Anda mengikuti layout seperti pada contoh agar program Anda mudah dibaca dan dimengerti.

Kompilasi
Setelah kedua file disave dengan nama HelloWorld.java dan HelloWorldApplet.java, kita akan mengkompile kedua program tersebut dengan perintah:
prompt> javac HelloWorld.java prompt> javac HelloWorldApplet.java

Perlu diperhatikan bahwa direktori aktif Anda saat ini adalah direktori tempat Anda meletakkan file-file program tersebut. Anda tetap dapat mengkompile program Anda dari direktori berbeda dengan perintah:
prompt> javac (direktori program)/namafile.java

Setelah perintah ini selesai, Anda akan melihat bahwa telah tercipta dua buah file .class, yaitu bytecode hasil kompilasi source code kita.

Sintaks Program
Sekarang kita akan mencoba membahas elemen-elemen dalam kedua source code tersebut. Pada awal Listing 2 kita menemukan perintah import. Pada tahap awal ini Anda perlu mengetahui bahwa pernyataan tersebut hanya berfungsi mempermudah penulisan metode atau dalam bahasa pemrograman lain disebut prosedur atau fungsi. Jadi Anda hanya perlu menulis Graphics sebagai pengganti java.awt.Graphics, karena kita telah mengimpor java.awt.Graphics. Kemudian di masing-masing listing terdapat pernyataan public class. Pernyataan ini adalah pernyataan pembuka sebuah kelas. Kelas sendiri digunakan untuk menciptakan objek. Ingat bahwa Java berorientasi objek. Kata public di depannya berfungsi agar kelas tersebut dapat diakses oleh semua program lain. Untuk saat ini anggaplah objek sebagai suatu item yang dapat dimanipulasi oleh sebuah program. Dalam Listing 2 terdapat tambahan kata extends. Hal ini berarti kelas yang kita buat akan mewarisi sifat-sifat dari kelas yang kita extends. Dengan kata lain kita menjadikan kelas yang kita extends sebagai himpunan bagian dari kelas kita buat. Kemudian kita menemukan baris pernyataan public static void main(String[] args) dan public void paint(Graphics g). Keduanya adalah pernyataan pembuka sebuah metode. Metode sendiri adalah kumpulan pernyataan untuk melakukan suatu tugas tertentu dalam kelas. Keduanya sebenarnya mempunyai fungsi yang sama namun dalam konteks yang berbeda. Dalam setiap aplikasi harus ada sebuah metode yang bernama main yang akan dieksekusi pertama kali saat program tersebut dieksekusi. Sementara dalam applet, metode yang pertama kali akan dieksekusi ketika applet diload adalah paint. Kata public di depannya mempunyai fungsi yang sama dengan kata public yang ada di depan baris permulaan kelas. Namun nantinya Anda akan menemukan juga bentuk lain seperti private dan protect yang akan kita bahas nanti.

Pada Listing 1 terdapat kata static pada pernyataan pembuka metode main. Hal ini berarti metode main tidak mengubah atau menggunakan objek yang diciptakan oleh kelas tersebut, sehingga dapat dikatakan berdiri sendiri dan tidak terikat dengan objek. Dalam metode main dalam aplikasi, parameternya adalah selalu String[] args, di mana args hanyalah sebuah nama dari objek array dari String. Array ini nantinya akan berisi parameter-parameter yang diberikan user sebagai argumen command line. Sementara Anda tidak perlu mengerti mengenai parameter tersebut, cukup diingat bahwa bentuk metode main harus selalu demikian. Kemudian di dalam kedua metode pada kedua listing tersebut, kita menemukan sebuah pernyataan. Anda tentu dapat saja meletakkan lebih dari satu pernyataan dalam sebuah metode. Setiap pernyataan dalam sebuah metode dipisahkan oleh titik koma dan akan dieksekusi satu persatu. Kedua pernyataan pada listing ternyata memanggil sebuah metode lain yaitu metode println dan paint. Tentunya dapat Anda perhatikan bahwa untuk memanggil sebuah metode diperlukan tiga komponen yaitu: 1. Objek yang ingin kita pakai. Dalam hal ini objek System.out dan Graphics g. 2. Nama metode yang ingin kita pakai. Dalam hal ini println dan paint. 3. Sepasang tanda kurung yang berisi informasi tambahan yang diperlukan oleh metode yang dipanggil, yaitu parameter. Dalam Listing 1, pernyataan System.out.println("Apa Kabar Dunia?"); berarti carilah objek out dalam kelas System kemudian panggil metode println dari objek out dengan parameter berupa string "Apa Kabar Dunia?". Sedang dalam Listing 2, pernyataan g.drawString("Apa Kabar Dunia?", 5, 25); berarti carilah objek g kemudian panggil metode drawString pada objek g dengan parameter "Apa Kabar Dunia?, 5, 25);.

Eksekusi
Setelah selesai membahas sintaks dasar Java dalam kedua listing, selanjutnya kita akan mencoba mengeksekusi kedua program ini. Untuk program pertama yang berupa aplikasi biasa, kita tinggal mengetikkan perintah java HelloWorld pada prompt dan pesan Apa Kabar Dunia? akan tampil di layar (atau mungkin di tempat lain, bergantung sistem operasi Anda). Sedangkan untuk applet kita mesti membuat sebuah file HTML sebagai pembungkusatau pemanggilnya. Berikut diberikan contoh file HTML untuk membungkus applet yang kita buat.
<HTML> <HEAD> <TITLE>Coba Applet</TITLE> </HEAD> <BODY> <APPLET CODE="HelloWorldApplet.class" WIDTH=150 HEIGHT=25> </APPLET> </BODY> </HTML>

Beri nama helloword.html dan simpanlah di direktori yang sama dengan lokasi file-file .java dan .class sebelumnya. Untuk mengeksekusi applet kita cukup membuka file HTML tersebut
6

di browser yang Java-enabled atau mengetikkan perintah appletviewer namafile.html di prompt.

Penutup
Untuk saat ini Anda telah mempunyai gambaran tentang bagaimana proses pembuatan program Java secara sederhana dalam bentuk aplikasi biasa atau applet. Anda juga dapat mencoba mengembangkan program sederhana tersebut sesuai dengan keinginan Anda berdasarkan hal-hal yang sudah Anda ketahui. Konsep dasar yang sudah Anda dapatkan akan dikembangkan lebih lanjut dalam topik-topik tutorial selanjutnya. Selamat mencoba! Ari Hermawan mahasiswa Fakultas Ilmu Komputer UI yang sehari-hari berada di Lab kampus memelototi forum-forum Java dan majalah Java di Internet. Sebagai pimpinan pokuz, konsultan Java independen ini selalu disibukkan dengan usaha mempromosikan Java di Indonesia. arih, nick Internetnya, dapat dihubungi di arih@pokuz.net.

Contoh Program Java: Perulangan While


Ada 3 jenis perintah perulangan dalam bahasa Java, yaitu: 1. while 2. do-while 3. for Perintah while memiliki struktur sbb: [inisialisasi variabel] while (kondisi variabel) { statemen_yang_akan_dikerjakan; update_nilai_variabel; } // kembali ke pengecekan kondisi variabel. Contoh source code nya adalah sbb: import java.util.Scanner; public class Main { public static void main(String[] args) { int jumlah; Scanner sc = new Scanner(System.in); System.out.print(Masukkan jumlah data : ); jumlah = sc.nextInt(); int i=1; while (i<=jumlah) { System.out.print(i+" "); i++; } System.out.println(""); } }

Bab 1 : Pengenalan Terhadap Java 1. Sebutkan kelebihan-kelebihan yang dimiliki oleh Java yang Anda ketahui! Jawaban : Bersifat portable dan platform independent . Program Java yang Anda tulis akan dapat dieksekusi di platform mana pun tanpa memerlukan kompilasi ulang (portable) asalkan Java Virtual Machine untuk platform tersebut tersedia. Memiliki garbage collection yang dapat mendealokasikan memori secara otomatis. Anda tidak perlu secara eksplisit membebaskan suatu lokasi memori yang dipakai karena ini akan dilakukan secara otomatis oleh Java. Menghilangkan pewarisan berganda yang terdapat pada C++. Walaupun kelihatannya lebih sebagai suatu kekurangan, namun banyak para ahli yang mengakui bahasa konsep pewarisan berganda lebih banyak mengakibatkan kerugian dari pada keuntungan. Java telah didesain sedemikian rupa sehingga Anda tidak akan memerlukan tehnik ini dalam pembuatan program apa pun. Mengurangi pointer aritmetik. Pengaksesan lokasi memori secara langsung dengan menggunakan pointer memungkinkan program untuk melakukan suatu tindakan yang tidak seharusnya atau tidak boleh dilakukan. Untuk mengurangi dan menghilangkan kemungkinan kesalahan seperti ini, penggunaan pointer pada Java telah dibatasi dengan menggunakan reference. Memiliki array sejati. Mengurangi kerancuan antara pemberian nilai pada statement kondisional. Contoh penggunaan tanda = dengan == pada kondisi if.

2. Apa yang Anda ketahui tentang karakteristik Java? Jawaban :


Berorientasi Objek, Java telah menerapkan konsep pemrograman berorientasi objek yang modern dalam implementasinya. Robust, Java mendorong pemrograman yang bebas dari kesalahan dengan bersifat strongly typed dan memiliki runtime checking. Portable, program Java dapat dieksekusi di platform mana pun selama tersedia Java Virtual Machine untuk platform tersebut. Multithreading, Java mendukung penggunaan multithreading yang telah terintegrasi secara langsung dalam bahasa Java. Dinamis, program Java dapat melakukan suatu tindakan yang ditentukan pada saat eksekusi program dan bukan pada saat kompilasi. Sederhana, Java menggunakan bahasa yang sederhana dan mudah dipelajari.
10

Terdistribusi, Java didesain untuk berjalan pada lingkungan yang terdistribusi seperti halnya internet. Aman, aplikasi yang dibuat dengan bahasa Java dapat dipastikan keamanannya terutama untuk aplikasi internet. Netral secara arsitektur, Java tidak terikat pada suatu mesin atau sistem operasi tertentu. Interpreted, aplikasi Java dapat dieksekusi pada platform yang berbeda-beda dengan melakukan interpretasi pada bytecode. Berkinerja Tinggi, bytecode Java telah sangat teroptimasi, sehingga eksekusi program dapat dilakukan secara cepat sekalipun dilakukan dengan cara interpretasi terhadap bytecode.

Bab 2: Pengenalan Objek: Paradigma Pemrograman Berbasis Objek 1. Jelaskan perbedaan antara state dan behavior. Berikan contohnya! Jawaban: State merupakan keadaan dari suatu objek, contohnya tinggi, berat, usia, merupakan state yang dimiliki oleh objek manusia. State ini bersifat pasif karena ia tidak dapat melakukan operasi apa pun, padanya justru dilakukan operasi. Oleh karena itu secara sederhana state dapat dianggap sebagai kata benda. Sedangkan behaviour merupakan operasi atau aktivitas yang dapat dilakukan oleh suatu objek, contohnya makan, minum, menua, bekerja, merupakan behaviour yang dimiliki oleh objek manusia. Aktivitas ini dapat (tidak selalu) mempengaruhi state dari objek itu sendiri, misalnya behaviour menua dapat merubah state umur. Oleh karena sifatnya ini, secara sederhana behaviour dianggap sebagai kata kerja. 2. Jelaskan apa yang dimaksud dengan class dan objek ! Apa bedanya dan berikan contohnya! Jawaban: Class digunakan untuk menggambarkan suatu model atau spesifikasi dari suatu entitas, sedangkan objek merupakan kenyataan, realisasi atau perwujudan dari class itu sendiri. Contoh sederhana : desain arsitektur gedung dan gedung yang dibuat berdasarkan desain tersebut. Desain arsitektur gedung dapat dianggap sebagai class, sedangkan gedung yang dibangun berdasarkan desain itu sendiri dapat dianggap sebagai objeknya.

11

Bab 3 : Sintaks Bahasa dan Tipe Data 1. Apa perbedaan antara tipe data primitif dan tipe data referensi? Jawaban : Tipe data primitif merupakan tipe data dasar yang dikenal oleh Java. Variabel dengan tipe data primitif dapat langsung digunakan untuk memegang data yang sesuai dengan tipe datanya. Contoh : int var = 3; maka nilai variabel var adalah 3. Sedangkan tipe data referensi digunakan untuk semua tipe data selain tipe data primitif termasuk di sini adalah array dan class. Variabel dengan tipe data referensi tidak memegang secara langsung nilai yang hendak disimpan, melainkan variabel ini hanya memegang referensi (alamat) dari nilai yang sebenarnya yang ada di memori. 2. Untuk melatih pengetahuan Anda akan tipe data, buatlah program untuk menghitung luas:

Segitiga Lingkaran Bujursangkar Empat persegi panjang

Hati-hati dengan konversi tipe data secara otomatis yang dilakukan oleh Java, terutama konversi dari tipe floating-point ke integer. Jawaban : public class HitungLuas { public static void main(String[] args) { // data segitiga int panjangSegitiga = 5; int tinggiSegitiga = 9; // data lingkaran int jari2Lingkaran = 15; // data bujursangkar int panjangSisi = 13;

12

// data persegi panjang int panjangPersegi = 35; int lebarPersegi = 45; double luas; // luas segitiga luas = ((double) (panjangSegitiga*tinggiSegitiga)/2); System.out.println("Luas Segitiga : " + luas); // luas lingkaran luas = 3.14*jari2Lingkaran*jari2Lingkaran; System.out.println("Luas Lingkaran : " + luas); // luas bujursangkar luas = panjangSisi*panjangSisi; System.out.println("Luas Bujursangkar : " + luas); // luas persegi panjang luas = panjangPersegi*lebarPersegi; System.out.println("Luas Persegi Panjang : " + luas); } }

output program :

13

Bab 4 : Operator 1. Apa perbedaan x++ dan ++x, jelaskan! Jawaban : Penggunaan x++ dan ++x jika tidak dikombinasikan dengan ekspresi lainnya tidak memiliki perbedaan sama sekali. Perbedaannya baru akan terasa jika penggunaannya digabung dengan suatu ekspresi. Namun secara sederhana x++ dapat diartikan : lakukan operasi terhadap x baru kemudian tambahkan tambahkan dengan 1. Sedangkan ++x dapar diartikan : jumlahksn x dengan 1, baru kemudian lakukan operasi terhadap x. Contoh : y = x++ + 10; sama dengan : y = x + 10; x = x + 1; Sedangkan y = ++x + 10; sama dengan : y = x + 1; x = x + 10; 2. Bagaimana menghitung perkalian dan pembagian dengan bilangan dua tanpa menggunakan operator matematika? Jawaban : Perkalian dengan bilangan dua dapat dilakukan dengan menggunakan operator bitwise << (geser kiri). Sedangkan untuk pembagian dapat dilakukan dengan menggunakan operator bitwise >> (geser kanan). Contoh penjelasan : 124/2 = 124 >> 1 124 = 0000000001111100 \\\\\\\\\\\\\\\ 0000000000111110 124*2 = 124 << 1 124 = 0000000001111100 >> 1 = 62

14

/////////////// 0000000011111000 3.

<< 1 = 248

Bagaimana menukar nilai dari dua variabel integer dengan tanpa menggunakan variabel perantara. Jawaban : Contoh : variabel A = 22 dan B = 34, tanpa menggunakan variabel perantara, tukarlah kedua nilai dari variabel tersebut sehingga variabel A = 34 dan B = 22. Untuk menukar nilai dari dua buah variabel integer tanpa menggunakan variabel perantara dapat digunakan operator bitwise XOR. Perhatikan contoh penjelasan berikut ini : A = 22 dan B = 34 Hasil dari A XOR B adalah A = 22 B = 34 A XOR B = 0000000000010110 = 0000000000100010 = 0000000000110100 = 52

Jika kita anggap hasil dari A XOR B adalah C maka A = 22 C = 52 B XOR C = 0000000000010110 = 0000000000110100 = 0000000000010110 = A

Dapat disimpulkan bahwa jika C = A XOR B, maka C XOR A = B dan C XOR B = A Dengan demikian, Anda dapat menuliskan kode berikut ini untuk menukar nilai dari dua buah variabel integer A dan B di atas : A = A ^ B; B = A ^ B; A = B ^ A;
15

Sehingga sekarang nilai variabel A = 34 dan B = 22 Bab 5 : Kontrol Alur Eksekusi Program 1. Buatlah program yang menghasilkan ouput seperti di bawah ini! Jawaban : public class Bintang { public static void main(String[] args) { int ukuran = 7; for (int i = 0; i<ukuran; i++) { int j; int spasiCounter = ukuran - i - 1; for (j = 0; j < spasiCounter; j++) { System.out.print(" "); } for (j = 0; j <= (i*2); j++) { if (j % 2 == 1) System.out.print(" "); else System.out.print("*"); } System.out.println(); } } }
16

Bab 6 : Class Buatlah sebuah class dengan nama Televisi, yang mempunyai property : deskripsi : untuk menyimpan nama/deskripsi dari televise. Property ini hanya dapat diset saat pembuatan saja, dapat dibaca namun tidak dapay diubah setelahnya. jumlahChannel : untuk menyimpan banyaknya channel yang dapat disimpan oleh televisi. Property ini hanya dapat diset saat pembuatan saja, dapat dibaca namun tidak dapat diubah setelahnya. channels : untuk menyimpan data channel stasiun televisi yang sudah diset. Property ini dapat dibaca dan diubah kapan saja. channelAktif : untuk menyimpan nomor channel yang sedang aktif saat ini. Property ini dapat dibaca dan diubah kapan saja. volume : untuk menyimpan informasi besarnya volume televisi yang sedang aktif saat ini. Property ini dapat dibaca dan diubah kapan saja.

Selain itu objek Televisi tersebut juga harus mendukung operasi berikut ini : Menset channel stasiun televisi yang diinginkan. Ini sama halnya jika Anda membeli televisi baru, hal pertama kali yang Anda lakukan tentunya adalah mendaftarkan semua channel stasiun televisi yang ada ke dalam televisi Anda.Sehingga berikutnya jika Anda ingin menonton televisi yang Anda inginkan, Anda cukup memasukkan nomor channel dari stasiun tersebut yang sudah terdaftar pada televisi tersebut. Anda juga tidak boleh menset channel lebih banyak dari jumlah channel yang dapat ditampung oleh televisi. Mengganti channel stasiun yang sedang aktif. Jika nomor channel yang diinginkan ternyata belum diset ke stasiun televisi manapun, tampilkan informasi yang memberitahukan hal tersebut. Mengubah volume suara. Menampilkan deskripsi dari televisi.

17

Class Televisi yang Anda buat tersebut harus dapat digunakan oleh program berikut ini : public class User { public static void main(String[] args) { Televisi tv = new Televisi("TV tempoe doeloe, 14 inches", 10); String[] semuaChannel = {"RCTI", "SCTV","INDOSIAR","LA TV", "METRO TV","TRANS TV","TPI","TV 7", "TVRI","TV G","AN TV"}; String[] channelFavorit = {"RCTI", "SCTV", "INDOSIAR", "LA TV", "MTRO TV","TRANS TV","TPI","TV 7"}; System.out.println("Televisi yang baru gua beli : " + tv.getDeskripsi()); tv.getChannels(); tv.setChannels(semuaChannel); tv.setChannels(channelFavorit); tv.setChannelAktif(3); tv.setVolume(10); tv.setChannelAktif(1); } }

18

Dengan hasil eksekusi seperti berikut ini : Jawaban : class Televisi { private String deskripsi; private int jumlahChannel; private String[] channels = null; private int channelAktif; private int volume; public Televisi(String deskripsi, int jumlahChannel) { this.deskripsi = deskripsi; this.jumlahChannel = jumlahChannel; } public String getDeskripsi() { return deskripsi; } public int getJumlahChannel() { return jumlahChannel; } public String[] getChannels() { if (channels == null) { System.out.println("Belum ada channel yang diset!"); }

19

return channels; } public void setChannels(String[] channels) { if (channels.length > jumlahChannel) { System.out.println("Maaf Tv ini hanya dapat menyimpan " + jumlahChannel + " channel"); } else { this.channels = channels; System.out.println("Informasi channel berhasil di update!"); } } public int getChannelAktif() { return channelAktif; } public void setChannelAktif(int channelAktif) { if (channelAktif > channels.length) { System.out.println("Channel yang Anda inginkan belum diset!"); return; } this.channelAktif = channelAktif; System.out.println("Pindah channel ke : " +
20

channels[channelAktif]); } public int getVolume() { return volume; } public void setVolume(int volume) { this.volume = volume; System.out.println("intensitas volume sekarang : " + volume); } }

Bab 7 : Pewarisan 1. Keuntungan apa yang dapat Anda peroleh dengan melakukan pewarisan dan kapan Anda mungkin perlu untuk melakukannya? Jawaban : Keuntungan terutama yang Anda dapatkan adalah reusable code, karena dengan menurunkan suatu class dari Superclass, Anda cukup menambahkan kode specific yang dimiliki oleh class itu saja sedangkan kode lainnya mungkin tidak perlu Anda ketik ulang karena telah didapat dari Superclass-nya.

21

2. Apa yang terjadi jika Anda mendeklarasikan member pada Subclass yang sama persis dengan yang dimiliki oleh superclass-nya? Bagaimana pula cara subclasss agar dapat mengakses member dari superclass tersebut Jawaban : Member yang Anda deklarasikan pada subclass yang sama persis dengan member yang dideklarasikan oleh superclass-nya dikatakan meng-override member dari superclass tersebut. Untuk mengakses member dari superclass ini dari subclass-nya harus digunakan keyword super. 3. Buatlah sebuah class turunan bernama class TelevisiModern dari class Televisi yang telah Anda buat pada soal di bab 6. Tambahkan fasilitas teletext dan cd player builtin yang dapat digunakan oleh contoh program berikut ini : public class User { public static void main(String[] args) {

TelevisiModern tv = new TelevisiModern("TV Modern, 29 inches", 100);

String[] semuaChannel = {"RCTI", "SCTV", "INDOSIAR", "LA TV", "METRO TV", "TRANS TV", "TPI", "TV 7", "TVRI", "TV G", "AN TV"};

String[] channelFavorit = {"RCTI", "SCTV", "INDOSIAR", "LA TV", "MTRO TV", "TRANS TV", "TPI", "TV 7"};

22

System.out.println("Televisi yang baru gua beli : " + tv.getDeskripsi());

tv.getChannels(); tv.setChannels(semuaChannel); tv.setChannelAktif(3); tv.setVolume(10); tv.setChannelAktif(10); tv.setChannelAktif(1); tv.setModusTampilan(TelevisiModern.TELETEX); tv.setHalamanTeletext(250); tv.setModusTampilan(TelevisiModern.TV); tv.playCD(); tv.setDiscTray("The Matrix"); tv.playCD(); } }

23

Dengan tampilan hasil eksekusi seperti berikut ini : Jawaban : public class TelevisiModern extends Televisi { public static final int TV = 0; public static final int TELETEXT = 1; int modusTampilan = TV; int halamanTeletext = 100; String discTray = null; public TelevisiModern(String deskripsi, int jumlahChannel) { super(deskripsi, jumlahChannel); } public void setHalamanTeletext(int halamanTeletext) { this.halamanTeletext = halamanTeletext; System.out.println("Berpindah ke halaman teletext " + halamanTeletext); } public void setModusTampilan(int modusTampilan) { switch (modusTampilan) { case TV: System.out.println("Modus tampilan : Televisi");

24

break; case TELETEXT: System.out.println("Modus tampilan : Teletext"); break; } } public String getDiscTray() { return discTray; } public void setDiscTray(String discTray) { this.discTray = discTray; }

public void playCD() { if (discTray == null) { System.out.println("Tidak ada CD di dalam disc tray!"); return; } System.out.println("Memutar file " + discTray); } }

25

Bab 8 : Interface Buatlah sebuah interface bernama Control dan rombaklah class TelevisiModern yang telah anda buat pada soal Bab 7 di atas agar mengimplmentasi interface Control ini sehingga semua fungsi objek dari class TelevisiModern tersebut dapat di akses melalui interface tersebut! Buat juga sebuah class baru bernama RemoteControl di mana objek dari class inilah yang akan menggunakan interface Control untuk mengakses fungsi objek dari class TelevisiModern tersebut! Class dan Interface yang telah dibuat tersebut harus dapat digunakan seperti dalam contoh program berikut ini: public class User { public static void main(String[] args) {

TelevisiModern tv1 = new TelevisiModern("TV Sony 29 inches", 200); TelevisiModern tv2 Hitachi 21 inches", 100); = new TelevisiModern("TV

String[] semuaChannel "INDOSIAR", "LA TV", TV", "TRANS TV", "TPI", "TV 7",

{"RCTI",

"SCTV", "METRO "TVRI",

"TV G", "AN TV"};

String[] channelFavorit "INDOSIAR", "LA TV", TV", "TRANS TV", "TPI", "TV 7"};

{"RCTI",

"SCTV", "METRO

26

tv1.setDiscTray("The Matrix"); tv2.setDiscTray("Spiderman"); // remote control diarahkan ke tv1 RemoteControl rc = new RemoteControl(tv1); rc.setChannels(semuaChannel); rc.setChannelAktif(3); rc.setVolume(10); rc.setChannelAktif(10); rc.setModusTampilan(TelevisiModern.TELETEXT); rc.setHalamanTeletext(250); rc.setModusTampilan(TelevisiModern.TV); rc.playCD(); System.out.println(); //remote control diarahkan ke tv2 rc.setTv(tv2); rc.setChannels(channelFavorit); rc.setVolume(20); rc.setChannelAktif(1); rc.playCD(); } }

27

Jawaban: public interface Control {

public String getDeskripsi(); public String[] getChannel(); public int getJumlahChannel(); public void setChannels(String[] channels); public int getChannelAktif(); public void setChannelAktif(int channelAktif); public int getVolume(); public void setVolume(int volume); } public class RemoteControl implements Control { Control tv = null; public RemoteControl(Control tv) { this.tv = tv; System.out.println("Remote diarahkan ke tv : " + tv.getDeskripsi()); } public void setTv(Control tv) { this.tv = tv; System.out.println("Remote diarahkan ke tv : " + tv.getDeskripsi()); } public String getDeskripsi() {

28

return tv.getDeskripsi(); } public int getJumlahChannel() { return tv.getJumlahChannel(); } public String[] getChannels() { return tv.getChannels(); } public void setShannels(String[] channels) { tv.setChannels(channels); } public int getChannelAktif() { return tv.getChannelAktif(); } public void setChannelAktif(int channelAktif) { tv.setChannelAktif(channelAktif); } public int getVolume() { return tv.getVolume(); } public void setVolume(int volume) { tv.setVolume(volume); }

29

public void setHalamanTeletext(int halamanTeletext) { tv.setHalamanTeletext(halamanTeletext); } public void setModusTampilan(int modusTampilan) { tv.setModusTampilan(modusTampilan); } public void playCD() { tv.playCD(); } }

Selanjutnya class TelevisiModern yang telah anda buat sebelumnya harus dideklarasikan agar mengimplementasi interface Control diatas. Bab 9 : Package dan Classpath

1.

Bagaimana cara anda memberitahu Java untuk menggunakan classpath yang anda inginkan dan bagaimana pula cara Java memanfaatkan classpath ini untuk mendapatkan class yang dibutuhkan ? Jawaban: Cara pertama adalah dengan menset environment variabel yang bernama CLASSPATH agar menampung semua path yang mungkin dibutuhkan untuk mendapatkan class ataupun interface yang akan digunakan. Misalnya, class yang dibutuhkan terletak pada direktori c:\java_projects\classes dan d:\java_tool\lib, maka environment variabel CLASSPATH harus berisi kedua path tersebut. Pada sistem operasi Windows hal ini dapat Anda lakukan dengan mengetikan perintah berikut ini pada command prompt (dos prompt):

30

set CLASSPATH= c:\java_projects\classes; d:\java_tool\lib Direktori yang terdaftar dalam CLASSPATH ini akan digunakan oleh Java sebagai titik awal (root) pencarian dari class yang dibutuhkan. Misalnya, jika anda mengetikkan perintah berikut ini: java TesMe maka Java akan mencari class TesMe ini dalam kedua direktori di atas. Jika class yang hendak anda eksekusi menggunakan package, misalnya anda hendak mengeksekusi program dengan mengetikan perintah berikut ini: java bab9.TesPackage maka Java akan mencari class TesPackage dalam direktori: c:\java_projects\classes \bab9 dan d:\java_tool\lib\bab9. Cara kedua yang dapat dilakukan untuk menset CLASSPATH adalah dengan mengunakan switch -classpath <daftar-direktori> pada waktu hendak mengompilasi ataupun hendak mengeksekusi suatu program. Contoh: java -classpath c:\java_projects bab9.TesPackage 2. keuntungan apa saja yang dapat anda peroleh dengan menggunakan package dalam program? Jawaban: Dengan menggunakan package anda menciptakan name space anda sendiri sehingga anda dapat menggunakan nama yang sama dengan class maupun interface asalkan kedua class maupun interface tersebut berada di dalam package yang berbeda. Selain itu dengan menggunakan package, file class maupun interface yang anda buat akan tersimpan dengan rapi dalam direktorinya masing-masing sehingga memudahkan pencarian. Menaruh file dalam jumlah besar ke dalam satu direktori saja akan mudah menimbulkan kebingungan pada saat pencarian.

31

3. Jelaskan fungsi keyword import dalam hubungannya dengan penggunaan package! Jawaban: Keyword import dipakai jika anda ingin menggunakan class ataupun interface yang berbeda pada package yang berbeda dari tempat dimana anda ingin menggunakannya. Dengan menggunakan keyword import ini, anda tidak perlu menuliskan full package class/interface name untuk dapat menggunakan class atau interface yang ada dalam suatu package. Anda cukup menggunakan nama classnya saja secara langsung. Bab 10 : Penanganan Eksepsi 1. Apa perbedaan antara keyword throw dengan keyword throws! Jawaban : Keyword throw digunakan untuk melempar suatu eksepsi dalam program, contoh kode: If (ada yang salah) Throw new Exception(Salah nih.!); Sedangkan keyword throws digunakan pada waktu mendeklarasikan suatu method untuk memberitahu bahwa method yang bersangkutan dapat melempar eksepsi dengan tipe yang dideklarasikan oleh keyword throws tersebut. Contoh kode : void methodAneh() throws IOException, Exception {} Penggunaan keyword throws ini juga hanya diperlukan jika eksepsi yang hendak dilempar merupakan eksepsi yang dicek (bukan merupakan turunan dari class RuntimeException dan umumnya merupakan turunan dari class Exception). 2. Jelaskan fungsi pembuatan subclass eksepsi sendiri! Jawaban : Dengan membuat class eksepsi sendiri berarti Anda membuat tipe data baru dimana tipe data baru ini dapat Anda gunakan untuk melempar suatu eksepsi untuk kemudian ditangkap pada bagian lain dari program. Dengan menggunakan tipe data eksepsi yang berbeda-beda, program dapat mengetahui apa kira-kira penyebab eksepsi yang bersangkutan sehingga dapat bertindak sebagimana mestinya.

32

Bab 11 : Pemrograman Multithreading 1. Menurut Anda, kapan sebaiknya menggunakan interface Runnable dan kapan membuat turunan dari class Thread? Jawaban : Interface Runnable digunakan jika Anda harus menurunkan class yang Anda buat dari class lainnya sehingga tidak memungkinkan lagi untuk diturunkan dari class Thread. Namun membuat class turunan dari class Thread sangat disarankan jika class yang Anda buat tersebut akan meng-override member dari class Thread tersebut. 2. Pertimbangan apa yang kira-kira digunakan pada saat Anda memutuskan penggunaan antara sinkronisasi pada method dengan sinkronisasi pada objek! Jawaban : Sinkronisasi pada method mengharuskan method tersebut dideklarasikan dengan menggunakan keyword synchronized. Jika ternyata pendeklarasian method tersebut tidak menggunakan keyword tersebut maka Anda tidak punya cara lain selain menggunakan tehnik sinkronisasi pada objek. Namun jika Anda memiliki source code dari class dimana method tersebut berada, Anda dapat saja mengubah method tersebut agar didelarasikan menggunakan keyword synchronized. Bab 12 : The Java Library 1. Jelaskan fungsi class wrappers dan hubungannya dengan tipe data primitif! Jawaban : Class wrappers digunakan untuk mempresentasikan tipe data primitif dalam bentuk objek. Ini diperlukan karena tipe data primitif tidak digunakan menggunakan referensinya. Sedangkan banyak operasi yang didukung oleh Java Library mengharuskan penggunaan referensi yang hanya didukung oleh tipe data referensi. 2. Berikut ini adalah sekumpulan string yang di dalamnya terdapat informasi No Induk Mahasiswa(NIM), Nama, dan IPK : 0256975648;Nilasari Kumala;3.1#0568974567;Timotius;3.8#0236971245;Stevabus Firman;2.6#0457878975;Dicky Suteja;0#0695475486;Andi Setiawan;3.4

33

Buatlah sebuah program untuk mengelompokkan semua informasi yang didapat dari string di atas, ke dalam collection atau map. Tambahkan fasilitas untuk mengurutkan data berdasarkan ketiga informasi tersebut dan tampilkan ke layer! Program yang Anda buat tersebut harus dapat digunakan seperti berikut ini : public class User { public static void main(String[] args) { String inputData = "0256975648;Niko Syah;3.1#0568974567; Titi Nur;3.8#0236972345;" + "StevanusFirman;2.6#0457878975; DickySuteja;2.0#0695475486;Andi Sujata;3.4"; Database database = new Database(inputData); System.out.println("Data Asli"); System.out.println("============="); database.tampilkanData(); System.out.println(); System.out.println("Diurutkan Berdasarkan NIM"); System.out.println("=============================="); database.urutkanBerdasarkanNim(); database.tampilkanData(); System.out.println(); System.out.println("Diurutkan Berdasarkan Nama"); System.out.println("=============================="); database.urutkanBerdasarkanNama(); database.tampilkanData();

34

System.out.println(); System.out.println("Diurutkan Berdasarkan IPK"); System.out.println("=============================="); database.tampilkanData(); } }

Dengan tampilan hasil eksekusi sebagai berikut : Jawaban : public class Mahasiswa { private String nim; private String nama; private double ipk; public Mahasiswa(String nim, String nama, double ipk) { this.nim = nim; this.nama = nama; this.ipk = ipk; } public String getNim() { return nim; } public void setNim(String nim) { this.nim = nim;

35

} public String getNama() { return nama; } public void setNama(String nama) { this.nama = nama; } public double getIpk() { return ipk; } public void setIpk(double ipk) { this.ipk = ipk; } }

import java.util.ArrayList; import java.util.StringTokenizer; public class Database { private ArrayList data = new ArrayList(); public Database(String inputData) { Mahasiswa datum; StringTokenizer tokens = new StringTokenizer(inputData, ";#");

36

while (tokens.hasMoreTokens()) { String nim = tokens.nextToken(); String nama = tokens.nextToken(); double ipk = Double.parseDouble(tokens.nextToken()); datum = new Mahasiswa(nim, nama, ipk); data.add(datum); } } public void tampilkanData() { for (int i = 0; i < data.size(); i++) { Mahasiswa datum = (Mahasiswa)data.get(i); System.out.print(datum.getNim() + "\t"); System.out.print(datum.getNama() + "\t\t"); System.out.println(datum.getIpk()); } } public void urutkanBerdasarkanNim() { ArrayList dataBaru = new ArrayList(data.size()); String str1, str2; int length; Mahasiswa datum, datumBaru; for(int i=0;i<data.size();i++){ datumBaru = (Mahasiswa)data.get(i);

37

if(i==0){ dataBaru.add(datumBaru); continue; } str1 = datumBaru.getNim(); length = dataBaru.size(); for(int j=0;j<length;j++){ datum = (Mahasiswa)dataBaru.get(j); str2 = datum.getNim(); if(str1.compareTo(str2)<0){ dataBaru.add(j,datumBaru); break; } else if (j==length-1) dataBaru.add(datumBaru); } } data = dataBaru; dataBaru = null; } public void urutkanBerdasarkanNama() { ArrayList dataBaru = new ArrayList(data.size()); String str1,str2;

38

int length; Mahasiswa datum,datumBaru; for (int i=0;i<data.size();i++) { datumBaru = (Mahasiswa)data.get(i); if(i==0) { dataBaru.add(datumBaru); continue; } str1 = datumBaru.getNama(); length = dataBaru.size(); for(int j=0;j<length;j++) { datum = (Mahasiswa)dataBaru.get(j); str2 = datum.getNama(); if(str1.compareTo(str2)<0) { dataBaru.add(j,datumBaru); break; } else if(j==length-1) dataBaru.add(datumBaru); } } data = dataBaru; dataBaru = null;

39

} public void urutkanBerdasarkanIpk() { ArrayList dataBaru = new ArrayList(data.size()); double num1, num2; int length; Mahasiswa datum, datumBaru; for (int i = 0; i < data.size(); i++) { datumBaru = (Mahasiswa)data.get(1); if (i == 0) { dataBaru.add(datumBaru); continue; } num1 = datumBaru.getIpk(); length = dataBaru.size(); for (int j = 0; j < length; j++) { datum = (Mahasiswa)dataBaru.get(j); num2 = datum.getIpk();

if (num1 < num2) { dataBaru.add(j, datumBaru); break; } else if (j == length - 1)

40

dataBaru.add(datumBaru); } } data = dataBaru; dataBaru = null; } }

Bab 13 : Operasi I/O 1. Jelaskan perbedaan utama antara Byte Streams dengan Character Streams! Jawaban : Sesuai dengan namanya, byte streams membaca maupun menulis data (stream) dengan menggunakan ukuran byte atau 8 bit, sedangkan character streams menggunakan ukuran character, di mana dalam Java yang menggunakan Unicode untuk mempresentasikan sebuah karakter, memiliki besar 2 byte atau 16 bit. Oleh karena itu penggunaan character streams umumnya hanya cocok digunakan untuk membaca ataupun menulis data yang berupa teks (string) saja. Jika data yang hendak dibaca ataupun ditulis bukan merupakan teks, sebaiknya digunakan byte streams. 2. Buatlah program untuk mengkopi suatu file teks! Nama file yang hendak dikopi dan hasil kopiannya harus dilewatkan sebagai parameter pada waktu eksekusi. Contoh eksekusi program : Java kopi fileA.txt fileB.txt Jawaban : public class Kopi { public static void main(String[] args) { if (args.length < 2) { System.out.println("Cara pemakaian : " );

41

System.out.println("java Kopi namaFileSumber namaFileTujuan"); return; } String sumber = args[0]; String tujuan = args[1]; String data; FileWriter fout = null; FileReader fin = null; try { try { fin = new FileReader(sumber); } catch (FileNotFoundException e) { System.out.println("File : " + sumber + "tidak ada atau tidak dapat dibuka."); return; } try { fout = new FileWriter(tujuan); } catch (FileNotFoundException e) { System.out.println("File : " + sumber + "tidak ada atau tidak dapat dibuka."); return; }

42

BufferedReader br = new BufferedReader(fin); data = br.readLine(); while (data != null) { // \r\n digunakan untuk pindah baris fout.write(data + "\r\n"); data = br.readLine(); } } catch (IOException e) { System.out.println("Eksepsi tidak diketahui : " + e); } finally { //tutup file if (fout != null) { try { fout.close(); } catch (IOException err) { System.out.println("Eksepsi tidak diketahui : " + err); } } if (fin != null) { try { fin.close(); } catch (IOException err) {

43

System.out.println("Eksepsi tidak diketahui : " + err); } } } } }

Bab 14 : Membuat User Interface dengan Swing Buatlah sebuah game sederhana dengan aturan sebagai berikut : 1. Tampilan game ini terdiri atas 40 button yang disusun 5 baris, 8 kolom. Dalam game ini, user harus mencari pasangan dari nilai yang ada pada masing-masing button. Untuk kesederhanaan, sebagai nilainya, Anda cukup menggunakan nilai integer dari 0-100. 2. Semua nilai dari masing-masing button ini harus disembunyikan dengan menggunakan lambang ?.

3. Untuk melihat nilai yang ada, user harus mengklik pada button yang bersangkutan. Selanjutnya user harus mencari pasangan dari nilai yang ditampilkan tersebut dengan mengklik button lainnya. Jika ternyata kedua nilai dari button yang telah ditampilkan tersebut tidak sama, maka nilai yang sudah ditampilkan tersebut harus ditutup lagi dengan lambang ?. Namun jika nilai dari kedua button sama maka nilai dari kedua button tersebut harus tetap ditampilkan dan button harus di disabled agar tidak bisa dipilih lagi. 4. Game akan dianggap selesai jika user berhasil membuka semua nilai yang disembunyikan oleh setiap button.

Berikut ini contoh tampilan hasil eksekusi program, Anda tidak harus mengikuti contoh tampilan ini. Jika memungkinkan, Anda dipersilahkan untuk menambahkan fasilitas apa pun yang mungkin akan membuat game ini semakin menarik untuk dimainkan.

44

Anda mungkin juga menyukai