Anda di halaman 1dari 24

Bagian 1 Konsep Dasar java

Pemrograman dengan Java


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 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 mengutak-atik 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.

<pre> <HTML> <HEAD> <TITLE>Coba Applet</TITLE> </HEAD> <BODY> <APPLET CODE="HelloWorldApplet.class" WIDTH=150 HEIGHT=25> </APPLET> </BODY> </HTML> </pre>

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 di browser yang Java-enabled atau mengetikkan perintah appletviewer namafile.html di prompt.

Bagian 2 Elemen Dasar Bahasa Java

Elemen Dasar Bahasa Java Anda tentunya telah mengerti tentang konsep pemrograman Java dari bagian pertama. Sekarang Anda akan menyelami lebih dalam pemrograman Java dengan mengenal secara detil dan spesifik mengenai bahasa Java itu sendiri. Dalam tutorial kali ini Anda akan lebih jauh mempelajari apa-apa yang dapat Anda lakukan dengan statement dan hal-hal dasar di bahasa Java dalam mendefinisikan sebuah metode seperti main atau yang lain. Namun sementara kita tidak akan membahas tentang paradigma pemrograman berorientasi objek seperti kelas dan objek dan bagaimana komunikasi antar objek dalam sebuah program. Statement dan Ekspresi
import java.awt.Graphics; int i = 0; System.out.println("Hallo " + nama + ", Selamat Datang!"); this.isRuning = false;

Statement-statement tadi hanya bertugas melakukan suatu tugas tanpa perlu mengembalikan suatu nilai atau hasil. Statement-statement yang mengembalikan suatu nilai tersebut kita sebut ekspresi. Berikut contoh ekspresi:
int arraySize = theArray.size(); int result = x + y + z;

Dalam menulis statement Anda tidak perlu menggunakan bentuk penulisan tertentu. Anda dapat saja menuliskan seluruh statement dalam satu baris walaupun hal ini sangat tidak dianjurkan. Yang paling penting untuk Anda ingat di sini adalah bahwa whitespace (enter, spasi, dan tab) tidak mempengaruhi program Anda, dan bahwa setiap statement harus selalu diakhiri tanda titik koma (;). Kelalaian

membubuhkan titik koma pada akhir statement dapat menyebabkan program Anda tidak dapat dikompile, atau lebih parah menyebabkan bug yang sulit ditemukan. Sebagai sedikit teka-teki, Java juga memiliki bentuk yang disebut compound statement atau blok. Namun hal itu belum akan kita bahas dalam tutorial kali ini. Komentar Komentar adalah salah satu bagian penting dalam penulisan source code program. Betapapun Anda menganggap sepele komentar dalam suatu source code program, percayalah suatu saat mungkin komentar-komentar tersebut dapat menyelamatkan Anda! Komentar digunakan oleh programer untuk menjelaskan bagian-bagian dari source code yang ditulisnya. Hal ini dapat membantu si programer itu sendiri maupun orang lain pada saat membaca apalagi mengembangkan atau memperbaiki source code. Dalam bahasa pemrograman manapun selalu ada fitur komentar. Java sendiri memiliki sintaks yang sangat mirip dengan C dan C++, dengan tambahan yang sangat istimewa yaitu komentar yang nantinya digunakan untuk menciptakan dokumentasi secara otomatis oleh suatu aplikasi yang disebut javadoc. Dalam Java ada 3 sintaks komentar: 1. komentar untuk satu baris saja, yaitu yang dimulai dengan tanda // sampai dengan akhir baris; 2. komentar untuk beberapa baris, yaitu yang dimulai dengan tanda /* dan diakhiri dengan tanda */; 3. komentar khusus untuk membuat dokumentasi program, yaitu yang dimulai dengan tanda /** dan diakhiri dengan tanda */. Berikut ini contoh ketiga sintaks komentar:
/** * Class for displaying message to standard output */ public class Diplayer { /** * This method is the main method. It will display the message * to the standard output */ public static void main (String[] args) { /* First we declare the mesg variable and assign a value into it, then we print out the String into standard output */ // variable declaration String mesg = Program ini berhasil!; // display the String variable System.out.println(mesg); } }

Pada waktu program tersebut dikompile, maka komentar akan diabaikan oleh kompiler. Jadi komentar tidak akan mempengaruhi program Anda dan hanya berfungsi sebagai bantuan bagi programer. Tapi ingat, kesalahan menuliskan bentuk komentar dapat menyebabkan program Anda tidak dapat

dikompile. Variabel dan Tipe Data Variabel dalam ilmu matematika adalah sesuatu yang menyimpan nilai yang dapat berubah-ubah. Demikian juga dalam bahasa pemrograman. Variabel dalam bahasa pemrograman adalah lokasi dalam memori di mana sebuah nilai disimpan, dan nilai tersebut dapat diubah. Setiap variabel memiliki nama, tipe, dan nilai. Untuk menggunakan variabel, pertama kita harus mendeklarasikan variabel tersebut. Informasi yang dibutuhkan dalam pendeklarasian variabel adalah tipe variabel tersebut. Tipe variabel sendiri akan kita bahas sebentar lagi. Setelah mendeklarasikan variabel, kita dapat memberi nilai kepada variabel tersebut, yang dalam bahasa pemrograman diistilahkan dengan assignment. Jadi assignment adalah proses pemberian nilai kepada sebuah variabel. Kita dapat mendefinisikan variabel di bagian manapun dari program sama seperti statement. Namun dianjurkan pendefinisian variabel diletakkan pada awal pendefinisian metode di mana variabel tersebut digunakan. Dalam beberapa hal, kita perlu melakukan pendefinisian variabel di tempat lain untuk menyesuaikan ruang lingkup berlakunya variabel tersebut. Untuk memahami lebih jauh pendefinisian variabel dan hal-hal yang dapat Anda lakukan dalam mendefinisikan variabel, perhatikanlah kode berikut ini.
public static void main (String[] args) { int x; // deklarasi variable biasa int y, z; // deklarasi dua variabel bertipe sama sekaligus boolean isRunning = true; // deklarasi sekaligus assignment nilai int a = 3, b = 4; int c, d = 6; // deklarasi sekaligus assignment nilai // deklarasi dan assignment variabel kedua

Kode tadi menunjukkan berbagai cara mendefinisikan variabel. Suatu saat mungkin Anda akan merasakan manfaat tertentu dalam menggunakan cara-cara pendefinisian tersebut. Namun disarankan Anda menggunakan cara biasa saja demi kerapian dan pencegahan kesalahan-kesalahan akibat kelalaian dalam penulisan program. Java memiliki tiga jenis variabel, yaitu: variabel instans, variabel kelas, dan variabel lokal. Variabel instans adalah variabel yang digunakan sebagai atribut dari sebuah objek. Instans adalah objek yang diciptakan dari sebuah kelas. Anggaplah kelas sebagai template untuk membuat objek. Anda akan memahami lebih jauh mengenai hal ini dalam pembahasan mengenai pemrograman berorientasi objek. Variabel kelas adalah variabel yang digunakan sebagai atribut dari sebuah kelas. Berbeda dengan variabel instans, variabel kelas akan bernilai sama bagi semua instans dari kelas ybs. Variabel kelas adalah variabel yang didefinisikan dan digunakan hanya dalam sebuah metode. Ketiga jenis variabel ini didefinisikan dengan cara yang sangat mirip tetapi variabel kelas dan instans diakses dan diassign dengan cara yang agak berbeda dibandingkan variabel lokal.Saat ini kita hanya akan memusatkan perhatian pada variabel lokal. Sebagai tambahan, tidak seperti bahasa pemrograman lain, Java tidak memiliki variabel global, yaitu

variabel yang tersedia bagi semua bagian program. Dalam Java kita menggunakan variabel kelas dan instans untuk mengkomunikasikan informasi global di antara objek-objek. Hal ini disebabkan Java menganut paradigma pemrograman berorientasi objek murni, sehingga segala hal dipandang sebagai interaksi antarobjek bukan antar bagian program. Nama sebuah variabel harus diawali huruf atau garis bawah (_) atau tanda dolar ($), dan tidak boleh diawali angka. Karakter berikutnya boleh angka. Ingat kembali Java bersifat case sensitive, jadi perhatikan besar kecil huruf yang Anda pakai dalam nama variabel. Java juga menggunakan set karakter Unicode. Namun hal ini tidak terlalu penting untuk Anda ketahui. Disarankan agar membuat nama variabel yang mengandung makna, sehingga memudahkan pembacaan program Anda, misalnya goButton, cancelButton, statusLabel, dll. Jenis Variabel Setiap variabel harus memiliki sebuah tipe. Tipe tersebut bisa berupa salah satu dari delapan tipe primitif Java, nama kelas atau interface, atau sebuah array. Saat ini kita hanya akan membahas tipe primitif dan tipe kelas saja.
Tipe Primitif

Java memiliki delapan jenis tipe primitif atau tipe-tipe dasar yang builtin. Tipe tersebut disebut primitif karena dibangun ke dalam sistem dan bukan benar-benar objek sehingga pemakaiannya lebih efisien. Tipe-tipe tersebut tidak bergantung pada arsitektur mesin, sehingga pemakaiannya tidak mengganggu portabilitas program Anda. Kedelapan tipe primitif ini dijelaskan dalam Tabel 1. Tipe
byte short int long

Ukuran
8 bits 16 bits 32 bits 64 bits

Nilai
-128 to 127 -32,768 to 32,767 -2,147,483,648 to 2,147,483,647 -9,223,372,036,854,775,808 to 9,223,372,036,854,775,807 single precision double precision unsigned true atau false

float double char boolean

32 bits 64 bits 16 bits 1 bit

Penting untuk diperhatikan bahwa tipe primitif dimulai dengan huruf kecil, karena ada kelas yang memiliki nama yang sama dengan tipe primitif tersebut yang disebut kelas pembungkus.
Tipe Kelas

Tipe kelas digunakan untuk menyimpan instans dari kelas atau instans subkelas dari kelas tersebut. Subkelas adalah kelas yang mewarisi sifat-sifat kelas tertentu.

Literal Literal adalah sebuah istilah dalam bahasa pemrograman yang berarti sesuatu nilai yang memiliki arti atau nilai sesuai dengan apa yang kita ketikkan. Misalnya kalau Anda memberi nilai 4 pada suatu variabel bertipe int, maka nilai variabel tersebut adalah 4. Bilangan, karakter, dan string kesemuanya merupakan literal. Berikut dijelaskan beberapa jenis literal dalam Java. Literal angka dapat berupa bilangan positif. Angka negatif ditulis dengan menambahkan tanda minus (-) di awal angka positif. Angka oktal dengan menambahkan angka 0 di awalnya. Angka heksadecimal dengan menambahkan 0x di awalnya. Literal angka floating point (pecahan desimal) biasanya memiliki dua bagian yaitu bagian integer dan bagian desimal. Untuk memaksa suatu bilangan menjadi misalnya float atau long, cukup tambahkan huruf F atau L di belakang bilangan tersebut. Untuk eksponen gunakan huruf E, seperti 3.0E-7 yang berarti 3,0 kali 10 pangkat minus 7 (0,0000003). Literal boolean terdiri atas true dan false. Escape
\n

Arti
Newline Tab Backspace Carriage return Formfeed Backslash Single quote Double quote Octal Hexadecimal Unicode character

\t

\b

\r

\f

\\

\'

\"

\ddd

\xdd

\udddd

Literal karakter terdiri sebuah karakter dalam kutip tunggal seperti 'a', '#', atau '1'. Literal karater juga memiliki karakter khusus yang mewakili karakter noncetak. Tabel 2 menunjukkan karakter-karakter khusus tersebut. Huruf d pada oktal, hekadecimal, dan escape Unicode mewakili bilangan biasa atau bilangan heksadecimal. Literal string pada dasarnya adalah kombinasi dari karakter dalam tanda kutip ganda. Maka itu karakter-karakter khusus dalam Tabel 2 juga berlaku dalam literal string. Sebagai kelas tersendiri (bukan tipe primitif) String mempunyai metode-metode sehingga Anda dapat melakukan penggabungan, tes, dan pengubahan literal String dengan mudah. Ekspresi dan Operator Ekspresi adalah statement yang secara nyata menyelesaikan tugas tertentu dan mengembalikan nilai yang dihasilkannya (statement biasa biasanya tidak akan mengembalikan nilai apapun). Karena

ekspresi dapat mengembalikan suatu nilai, maka Anda dapat mengassign nilai tersebut ke sebuah variabel atau mengoperasikannya dengan statement tertentu. Kebanyakan ekspresi dalam Java menggunakan operator. Operator adalah simbol khusus untuk operasi tertentu, seperti untuk operasi aritmatika, assignment, increment, decrement, dan berbagai operasi logika. Operator-operator tersebut membutuhkan satu atau dua bahkan 3 buah operan. Tabel 3 akan memuat berbagai jenis operator yang perlu Anda ketahui. A. Operator aritmatika Operator + * / % Arti Addition Subtraction Multiplication Division Modulus

B. Operator assignment Ekspresi x += y x -= y x *= y x /= y C. Operator perbandingan Operator == != < > <= >= Arti Equal Not equal Less than Greater than Less than or equal to Greater than or equal to Arti x=x+y x=xy x=x*y x=x/y

D. Operator bitwise Operator & | ^ << >> >>> ~ <<= >>= >>>= x&=y x|=y x^=y Arti Bitwise AND Bitwise OR Bitwise XOR Left shift Right shift Zero fill right shift Bitwise complement Left shift assignment (x = x << y) Right shift assignment (x = x >> y) Zero fill right shift assignment (x = x >>> y) AND assignment (x = x & y) OR assignment (x = x | y) XOR assignment (x = x ^ y)

E. Operator increment decrement Operator ++ -Arti increment decrement

F. Operator logika
Operator
&&

Arti AND OR

||

Dalam operator increment dan decrement, letak operator adalah penting. Operator yang terletak di

depan operan berarti nilai operan dioperasikan terlebih dahulu sebelum diambil. Sebaliknya jika operator berada di belakang operan, maka nilai operan diambil dulu sebelum dioperasikan. Dalam mengevaluasi sebuah ekspresi yang terdiri atas beberapa operator, Java akan mengerjakan operator-operator tersebut berdasarkan prioritas tertentu yang disebut presedensi operator. Presedensi operator ditunjukkan dalam Tabel 4. Operator . [] () Keterangan
Tanda kurung, (), digunakan untuk mengumpulkan ekspresi dalam satu group; tanda titik, ., digunakan untuk mengakses metode dan variabel dalam sebuah objek atau kelas; tanda kurung siku, [], digunakan dalam array. Operator instanceof menghasilkan true atau false berdasarkan apakah objek tertentu adalah sebuah instans dari kelas tertentu atau subkelas dari kelas tertentu.

++ -- ! ~ instanceof

new (type)expression Operator new digunakan untuk membuat instans baru dari kelas; () di sini berguna
untuk casting sebuah nilai menjadi tipe tertentu. Perkalian, pembagian, modulus Penambahan, pengurangan Bitwise geser kiri dan kanan Tes perbandingan relasional Persamaan AND XOR OR Logical AND Logical OR if...then...else

*/% +<< >> >>> < > <= >= == != & ^ | && || ?:

= += -= *= /= %= ^= Assignment &= |= <<= >>= >>>= Assignment Untuk membuat sebuah ekspresi dengan urutan pengerjaan tertentu, Anda dapat menggunakan tanda kurung untuk mengelompokkan ekspresi. Sesuai dengan presedensi operator, maka Java akan memproses terlebih dahulu ekspresi yang berada dalam tanda kurung.

Bagian 3 Konsep OOP di Java Konsep OOP di Java Pemrograman berorientasi objek diciptakan untuk mempermudah pengembangan program dengan cara mengikuti model yang telah ada dalam kehidupan nyata. Dalam paradigma ini, sesuai dengan model kehidupan nyata, segala bagian (entiti) dari suatu permasalahan adalah objek. Objek-objek ini kemudian juga dapat berupa gabungan dari beberapa objek yang lebih kecil. Sebagai contoh, tengoklah sebuah mobil. Mobil adalah sebuah objek dalam kehidupan nyata. Namun mobil sendiri terbentuk dari beberapa objek yang lebih kecil seperti roda ban, mesin, jok, dll. Mobil sebagai objek yang merupakan gabungan dari objek yang lebih kecil dibentuk dengan membentuk hubungan antara objek-objek penyusunnya. Begitu juga dengan sebuah program. Objek besar dapat dibentuk dengan menggabungkan beberapa objek-objek dalam bahasa pemrograman. Objek-objek tersebut berkomunikasi dengan saling mengirim pesan kepada objek lain. Konsep-konsep pemrograman berorientasi objek dalam Java secara umum sama dengan yang digunakan oleh bahasa-bahasa lain. Jadi kebanyakan konsep yang kita bahas juga terdapat dalam bahasa selain Java. Namun, terkadang terdapat perbedaan-perbedaan kecil antara penerapan konsepkonsep tersebut dalam masing-masing bahasa. Perbedaan-perbedaan ini juga akan dijelaskan seiring penjelasan masing-masing konsep. Objek Dalam penjelasan mengenai analogi, kita sudah menyinggung mengenai objek. Sekarang kita akan mengupas lebih dalam tentang objek sebagai konsep kunci dari pemrograman berorientasi objek. Baik dalam dunia nyata atau dalam sebuah program, sebuah objek memiliki dua karakteristik, yaitu state dan behaviour. State adalah keadaan dari sebuah objek, seperti mobil memiliki state warna, model, tahun pembuatan, kondisi, dll. Sedang behaviour adalah kelakuan dari objek tersebut, seperti mobil dapat melaju, membelok, membunyikan klakson, dll. Objek menyimpan statenya dalam satu atau lebih variabel, dan mengimplementasikan behaviournya dengan metode. Dengan penjelasan di atas, dapat disimpulkan bahwa objek adalah bagian software yang dibentuk dengan variabel-variabel dan metode-metode yang berhubungan dengan variabel tersebut. Dengan karakteristik tersebut, kita dapat memodelkan berbagai objek dalam kehidupan nyata ke dalam objek-objek dalam sebuah program. Lebih lanjut kita dapat memodelkan objek-objek abstrak ke dalam sebuah program. Contoh umum untuk konsep abstrak seperti ini adalah objek Event, yaitu objek untuk mewakili peristiwa klik atau tombol ditekan. Sebuah objek yang dibentuk dari sebuah kelas biasa disebut instans dalam terminologi OOP. Artinya objek tersebut adalah wujud nyata dari sebuah kelas. Variabel dan metode dari instans ini disebut variabel instans dan metode instans. Setiap instans menyimpan variabelnya sendiri-sendiri, jadi nilai variabel untuk tiap instans bisa berbeda.
Message (Pesan)

Objek-objek yang bekerja sama membentuk suatu sistem harus saling berkomunikasi untuk menjalankan sistem tersebut. Dalam sebuah program, objek-objek berkomunikasi satu sama lain dengan mengirimkan pesan. Sebagai contoh, jika sebuah objek ingin memanggil metode dari objek lain, maka objek ini akan mengirimkan sebuah pesan yang meminta objek tujuan untuk menjalankan metode yang dikehendaki. Pesan ini akan berisi informasi-informasi yang dibutuhkan objek tujuan untuk dapat menunaikan permintaan tadi.

Sebuah pesan dibentuk oleh informasi berikut ini: 1) objek yang dituju; 2) nama metode yang ingin dipanggil; 3) parameter yang dibutuhkan metode tersebut. Misalnya:
anotherObject.aMethod(parameter1);

Bila sebuah objek ingin memanggil metode miliknya sendiri, maka informasi pertama adalah dirinya sendiri. Untuk menunjuk diri sendiri dalam Java digunakan kata kunci this. Maka contoh sebelumnya akan menjadi:
this.aMethod(parameter1);

Atau kita dapat menghilangkan informasi pertama sehingga menjadi:


aMethod(parameter1);

karena bila informasi pertama tidak ada, kompiler akan secara otomatis menunjuk ke objek itu sendiri. Ada dua keuntungan dalam penggunaan pesan, yaitu: 1) semua kebutuhan interaksi antarobjek dapat dilakukan; 2) objek-objek yang saling berinteraksi tidak harus berada dalam satu proses atau bahkan dalam satu komputer.
Kelas

Kelas adalah semacam cetakan, atau template, untuk membuat objek. Ibaratkan sebuah rancangan rumah yang digunakan untuk membangun ratusan rumah. Rumah yang dibangun tersebut adalah objek dari kelas rancangan rumah. Hal ini dapat dilakukan karena semua objek rumah yang dibangun memiliki karakteristik yang sama, sehingga dapat dibuatkan semacam blueprintnya. Tetapi objek-objek yang dibangun tetap akan memiliki bentuk fisik tertentu sendiri-sendiri, seperti variabel dalam sebuah program, atau pintu sebuah objek rumah. Dengan penjelasan ini, kelas dapat kita definisikan kembali menjadi sebuah blueprint, atau prototipe, yang mendefinisikan variabel dan metode yang sama untuk semua objek sejenis. Sebagai contoh, misalkan kita ingin membuat kelas Rumah, maka kita harus membuat sebuah kelas yang mendefinisikan semua variabel yang dimiliki objek dari kelas tersebut. Selain itu, kelas tersebut juga harus mendeklarasikan metode-metode yang dimiliki objek dari kelas dan juga membuat implementasi dari metode tersebut. Dengan adanya kelas ini, kita dapat membuat sebanyak apapun objek-objek rumah yang sejenis, yaitu jenis yang didefinisikan oleh kelas Rumah. Setiap objek Rumah diciptakan, sistem akan mengalokasikan sejumlah memori untuk objek tersebut dan variabelvariabelnya. Dengan begitu setiap objek akan memiliki salinan masing-masing untuk setiap variabel instans. Setelah mengenal konsep kelas, saatnya Anda dikenalkan dengan variabel kelas. Variabel kelas sebenarnya sama dengan variabel instans. Bedanya adalah, setiap objek berbagi satu dan hanya satu variabel kelas, tapi masing-masing memiliki salinan dari variabel instans. Misalkan kelas Rumah yang kita buat hanya akan mendukung 2 lantai, dan setiap objek Rumah terdiri atas 2 lantai. Maka informasi ini cukup disimpan satu kali, karena nilainya tidak berbeda untuk semua objek. Lebih jauh, bila ada satu objek yang mengubah nilai dari variabel kelas, maka semua objek sejenis lainnya akan mengikuti perubahan itu. Di samping variabel, terdapat juga metode kelas. Metode jenis ini dapat langsung dipanggil melalui kelas dan bukan dari instans kelas tersebut.
Pewarisan

Terminologi asing untuk pewarisan adalah inheritance. Mungkin dalam literatur lain Anda akan sering

menjumpai istilah ini. Secara gamblang, pewarisan berarti sebuah kelas mewarisi state dan behaviour dari kelas lain. Sebagai contoh, sebuah kelas RumahMewah akan mewarisi state dan behaviour dari kelas Rumah. Begitu juga dengan kelas RumahSederhana. Kelas RumahMewah dan RumahSederhana disebut subkelas, atau kelas anak, dari kelas Rumah, yang disebut superkelas, atau kelas induk. Seluruh subkelas akan mewarisi (inherits) state dan behaviour dari superkelasnya. Dengan begitu, semua subkelas dari superkelas yang sama akan memiliki state dan behaviour yang sama. Namun, masing-masing subkelas bisa menambah sendiri state atau behaviournya. Misalkan, pada kelas Rumah tidak terdapat variable kolamRenang, namun subkelas RumahMewah memiliki variabel tersebut. Contoh lain misalnya kelas Rumah tidak memiliki metode nyalakanAlarm, namun rumah mewah memiliki metode itu. Dalam kasus tertentu subkelas mungkin memiliki implementasi behaviour yang berbeda dengan superkelasnya. Hal seperti ini disebut override. Contohnya subkelas SepedaBalap memiliki implementasi metode ubahGigi yang berbeda dengan implementasi metode tersebut pada superkelas Sepeda. Tingkat pewarisan tidak hanya terbatas pada dua tingkatan. Dari contoh di atas, kita bisa saja membuat subkelas dari kelas SepedaBalap, dan seterusnya. Kita bisa terus memperpanjang tingkat pewarisan ini sepanjang yang kita butuhkan. Dengan begitu, subkelas-subkelas yang dibuat akan lebih khusus dan lebih terspesialisasi. Namun terdapat batasan pewarisan dalam Java yang disebut single inheritance. Artinya sebuah kelas hanya dapat mewarisi sifat dari satu dan hanya satu superkelas saja. Dalam beberapa bahasa pemrograman berorientasi objek lain, yang berlaku adalah multiple inheritance. Artinya sebuah kelas dapat mewarisi sifat dari beberapa superkelas sekaligus. Dalam Java, terdapat kelas Object yang merupakan superkelas dari semua kelas dalam Java, baik yang builtin ataupun yang kita buat sendiri, lansung maupun tidak langsung. Karena itu sebuah variabel bertipe Object akan dapat menyimpan referensi ke objek apapun dalam bahasa Java. Kelas Object ini memiliki behaviour yang dibutuhkan semua objek untuk dapat dijalankan di Java Virtual Machine. Sebagai contoh, semua kelas mewarisi metode toString dari kelas Object, yang mengembalikan representasi String dari objek tersebut. Manfaat penggunaan konsep pewarisan antara lain: pertama, kita dapat menggunakan kembali kelaskelas yang kita buat (sebagai superkelas) dan membuat kelas-kelas baru berdasar superkelas tersebut dengan karakteristik yang lebih khusus dari behaviour umum yang dimiliki superkelas. Kedua, kita dapat membuat superkelas yang hanya mendefinisikan behaviour namun tidak memberi implementasi dari metode-metode yang ada. Hal ini berguna jika kita ingin membuat semacam template kelas. Kelas semacam ini disebut kelas abstrak, karena behaviournya masih abstrak dan belum diimplementasikan. Subkelas-subkelas dari kelas semacam ini, yang disebut kelas konkret, mengimplementasikan behaviour abstrak tersebut sesuai dengan kebutuhan masing-masing. Sedikit penjelasan mengenai kelas abstrak, kelas ini bisa memiliki hanya satu atau lebih metode abstrak. Subkelas dari kelas ini bertanggung jawab untuk memberikan implementasi untuk metodemetode abstrak tersebut. Sebagai akibat dari keberadaan metode abstrak ini, kelas abstrak tidak dapat diinstanskan (dibuatkan instansnya) atau digunakan untuk menciptakan sebuah objek dari kelas tersebut.
Interface

Arti harfiah dari interface adalah antarmuka, yaitu suatu alat untuk digunakan benda-benda yang tidak terhubung secara langsung untuk berinteraksi. Dalam bahasa pemrograman, interface digunakan oleh

berbagai objek yang tidak terhubung untuk saling berinteraksi. Jadi dalam bahasa pemrograman, interface dapat didefinisikan sebagai koleksi definisi metode-metode dan variabel-variabel konstan, namun tanpa implementasi. Implementasi akan dilakukan oleh kelas-kelas yang mengimplements interface ini. Tanpa implementasi di sini tidak seperti pada kelas abstrak yang merupakan metodemetode yang tidak melakukan apa-apa, melainkan hanya sekedar nama metode saja. Sebelumnya telah dijelaskan bahwa sebuah kelas tidak dapat menjadi subkelas dari beberapa superkelas, melainkan hanya bisa menjadi subkelas dari satu superkelas saja. Hal ini membuat desain program lebih rapi dan teratur, sehingga dapat mengurangi kompleksitas program. Namun, terkadang hal ini dapat menjadi suatu halangan yang tidak menyenangkan, yaitu saat kita membutuhkan suatu kelas yang memiliki sifat-sifat dari dua atau lebih kelas lain. Pada masalah seperti ini, interface dapat memberikan alternatif jalan keluar. Dengan adanya interface maka beberapa kelas akan dapat menangani interaksi yang sama namun dengan behaviour yang bisa berbeda. Misalnya beberapa kelas mengimplementasi sebuah interface yang sama, maka kelas-kelas tersebut dapat menangani interaksi sesuai interface tersebut, namun tiap kelas dapat memiliki implementasi yang berbeda-beda. Begitu juga bila sebuah kelas mengimplementasi banyak interface, maka kelas tersebut akan dapat menangani interaksi-interaksi sesuai salah satu interface yang diimplement oleh kelas tersebut. Namun, kelas tersebut harus mengimplementasi sendiri behaviournya. Di sinilah letak perbedaan penggunaan interface dengan multiple inheritance. Dalam multiple inheritance, layaknya single inheritance, subkelas tidak harus mengimplementasikan sendiri behaviournya karena secara default kelas tersebut akan mengikuti behaviour superkelasnya.

Bagian 4 Penggunaan Kelas Dalam Java Tutorial kali ini akan membahas bagaimana menciptakan dan mengelola kelas dan pewarisan dalam bahasa Java. Pembahasan mengenai kelas akan membahas juga tentang konstruktor yang berfungsi sebagai sarana menciptakan objek dari suatu kelas dan tentang metode yang merupakan implementasi behaviour dari suatu kelas. Selain itu dibahas juga beberapa jenis kelas khusus seperti kelas bersarang dan kelas anonim. Anda diharapkan telah menguasai konsep pemrograman berorientasi objek yang telah dibahas dalam tutorial sebelumnya.

Kelas
Kelas memiliki peran penting dalam paradigma pemrograman berorientasi objek. Kelas bagaikan sebuah pabrik yang siap memproduksi objek-objek yang kita butuhkan. Untuk dapat menciptakan sebuah objek, kita harus menciptakan kelasnya. Kelas inilah yang dalam runtime program akan menciptakan objek yang inginkan. Singkatnya kelas adalah cetak biru bagi objek yang ingin kita ciptakan. Perlu diperhatikan bahwa umumnya tidak ada batasan jumlah objek yang dapat diciptakan melalui sebuah kelas. Namun terkadang ada kelas-kelas yang memang dirancang untuk menciptakan tidak lebih dari satu objek. Objek-objek yang tercipta dari sebuah kelas disebut instans dari kelas tersebut. Instans ini akan mempunyai variabel dan metode yang disebut variabel instans dan metode instans. Namun ada juga variabel kelas yang berlaku bagi kelas itu sendiri sehingga akan berlaku juga untuk semua instans dari kelas tersebut.

Anda dapat melihat kode (Listing1) contoh kelas sederhana dibawah ini.
package com.arih; import java.io.*; public class KelasKita implements InterfaceKita1, InterfaceKita2 extends SuperKelas { // deklarasi variabel private String variabelString; // konstruktor kelas tanpa parameter public KelasKita() { // baris program } // konstruktor kelas dengan satu parameter bertipe int public KelasKita(int paramInt) { // baris program } // metode publik dengan satu parameter // dan tidak mengembalikan nilai public void metodeSatu(int parameterInt) { // baris program return; } // metode publik dengan dua parameter dan mengembalikan nilai int public int metodeSatu(int parameterInt, double parameterDouble) { // baris program return; }

Deklarasi Kelas
Pendeklarasian kelas dapat dimulai dengan pernyataan package. Pernyataan seperti baris pertama dari kode diatas berarti kelas tersebut adalah bagian dari package com.arih. Hirarki package di sini secara konseptual sama dengan konsep pohon, di mana ada node akar dan bercabang terus oleh node anak. Pernyataan ini tidak harus ada dalam setiap kode program kelas. Hanya bila program Anda memiliki banyak kelas dan ingin disusun menurut hirarki tertentu barulah Anda perlu meletakkan pernyataan seperti ini. Biasanya hirarki package mengikuti hirarki domain vendor. Dalam kasus ini, arih.comnama situs saya. Setelah pernyataan package, kita dapat meletakkan baris-baris pernyataan import. Pernyataan import digunakan untuk mendaftarkan nama lengkap dari kelas-kelas yang kita impor agar di dalam kelas ini nantinya kita tidak lagi perlu menuliskan nama lengkap secara hirarkis sebuah kelas. Contohnya di Listing1 kita meletakkan baris import java.io.*;, artinya semua kelas yang berada di dalam package java.io dapat kita panggil dalam kelas kita langsung dengan nama kelas,

tanpa nama package. Jadi bila kita ingin menggunakan kelas java.io.InputStreamReader, kita dapat langsung menuliskan InputStreamReader tanpa mesti membubuhkan java.io di depannya. Dalam kasus tertentu kemudahan ini dapat terganggu bila ada dua kelas dengan nama yang sama namun dari package berbeda yang keduanya kita impor. Akibatnya penggunaan nama kelas tersebut akan menyebabkan ambiguitas. Pemecahannya adalah dengan menggunakan nama lengkap, atau minimal nama package yang berbeda untuk kedua kelas tersebut. Baris-baris pernyataan impor ini sebenarnya hanya berfungsi sebagai pembantu agar penulisan kode program lebih mudah dan lebih singkat. Jadi hal ini tidak wajib dilakukan. Selama Anda merasa senang menulis nama lengkap suatu kelas yang biasanya cukup panjang, silahkan tidak menggunakan fasilitas impor. Kalaupun Anda menggunakan fasilitas ini, biasakanlah untuk tetap mengetahui nama lengkap dari kelas-kelas yang Anda gunakan. Dengan begitu Anda tidak akan kesusahan bila ingin melihat dokumentasi API Java untuk kelas tersebut.

Konstruktor
Kita sudah mengetahui bahwa kelas adalah alat untuk menciptakan objek. Sekarang yang menjadi pertanyaan adalah bagaimana cara menciptakan objek menggunakan sebuah kelas. Jawabannya adalah dengan menggunakan sebuah konstruktor. Apakah sebuah konstruktor itu? Konstruktor adalah bagian dari definisi suatu kelas yang berfungsi menciptakan instans dari kelas tersebut. Konstruktor ini bisa kita buat sendiri, atau bila kita tidak mendefinisikannya, maka kompiler Java akan membuatkan konstruktor default untuk kelas tersebut pada saat kompilasi. Yang perlu diperhatikan adalah bahwa suatu konstrukor tidak termasuk anggota suatu kelas seperti metode dan variabel dan bahwa konstruktor bisa dibuat lebih dari satu. Bentuk konstruktor sendiri mirip dengan sebuah metode. Beda yang paling mencolok adalah nama sebuah konstruktor harus sama dengan nama kelas tersebut dan konstruktor tidak memiliki definisi return type seperti sebuah metode. Untuk jelasnya Anda bisa lihat kembali Listing1, di mana terdapat dua buah konstruktor. Yang satu adalah konstruktor default dan yang lain adalah konstruktor dengan sebuah parameter bertipe int. Adanya dua buah konstruktor ini termasuk sifat polimorfisme dalam pemrograman berorientasi objek. Sifat ini dapat berlaku bagi konstruktor dan juga metode. Lebih jauh mengenai polimorfisme akan dijelaskan lebih jauh di akhir tutorial ini. Secara singkat, konstruktor adalah perintah yang akan dilaksanakan saat ada instruksi untuk menciptakan sebuah instans dari kelas tersebut. Bisa saja konstruktor tersebut tidak melakukan apa-apa, yaitu bila konstruktor tersebut kosong. Berikut adalah contoh-contoh penciptaan suatu kelas dengan berbagai jenis konstruktor.
SuatuKelas kelasContoh = new SuatuKelas(); SuatuKelasLain kelasContoh2 = new SuatuKelasLain("judul"); BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); new SuatuKelas().sebuahMetode();

Pada contoh pertama, kita menciptakan sebuah instans dari kelas SuatuKelas dengan memanggil konstruktor tanpa parameter. Bila dalam pendefinisian kelas SuatuKelas sebenarnya tidak ada pendefinisian konstruktor, perintah seperti ini tetap dapat dipakai, karena kompiler Java akan menyisipkan secara otomatis kosntruktor default bila tidak ada definisi konstruktor dalam sebuah kelas. Konstruktor default sendiri sebenarnya tidak melakukan apa-apa dalam proses instansiasi objek, karena tidak berisi perintah apapun.

Pada contoh kedua, kita memanggil sebuah konstruktor yang mengandung argumen berupa sebuah parameter bertipe String. Konstruktor seperti ini menjadi sangat berguna bila dalam proses instansiasi sebuah objek kita ingin memasukkan suatu nilai untuk dapat digunakan oleh instans baru tersebut. Pada contoh ketiga, kita memanggil konstruktor dengan argumen sebuah parameter bertipe InputStreamReader. Yang menarik dari contoh ini adalah kita memasukkan argumen berupa kelas baru yang anonim sehingga terjadi pemanggilan konstruktor lain di dalam argumen konstruktor semula. Dalam konstruktor yang terakhir kita juga memasukkan argumen berupa sebuah objek InputStream yaitu System.in. Contoh keempat adalah contoh yang lebih jelas mengenai kelas anonim. Pada contoh ini kita menciptakan sebuah instans dari kelas SuatuKelas namun tidak menyimpan referensi ke instans tersebut, sehingga kita hanya bisa menggunakannya sekali, yaitu langsung pada baris tersebut seperti terlihat pada contoh. Ada hal yang menarik dan perlu diperhatikan mengenai konstruktor dalam kelas-kelas yang merupakan subkelas. Pada saat kita menginstans sebuah objek dari sebuah subkelas, kompiler tidak hanya memanggil konstruktor subkelas tersebut, melainkan memanggil kosntruktor superkelasnya terlebih dahulu, baru kemudian memanggil konstruktor subkelas tersebut. Penjelasan mengenai hal ini adalah bahwa sebuah subkelas adalah superkelas itu sendiri namun dengan tambahan karakterisasi yang lebih detil. Sehingga untuk menginstans sebuah subkelas, pertama-tama kita menginstansiasi sebuah superkelas, kemudian menerapkan karakterisasi dari subkelas kepada instans baru tersebut.

Deklarasi Kelas
Deklarasi kelas terdiri dari beberapa komponen. Contoh deklarasi kelas adalah seperti pada Listing1, yaitu public class KelasKita implements InterfaceKita1, InterfaceKita2 extends SuperKelas. Dari semua komponen tersebut, yang harus ada adalah bagian class namakelas, sedang yang lain adalah opsional. Tabel dibawah akan menunjukkan diagram komponen deklarasi kelas berikut penjelasan singkat.

Nama dan sintaks


public

Kegunaan
Kelas dapat diakses oleh kelas apa saja. Jika kosong, maka kelas dapat diakses hanya oleh kelas-kelas dalam package yang sama. Kelas tidak dapat diinstansiasi. Jika kosong, berarti kelas bukan abstrak. Kelas tidak dapat dijadikan sebagai superkelas, artinya tidak dapat dibuat subkelas dari kelas ini. Jika kosong, berarti kelas bukan final. Nama dari kelas yang dibuat Nama superkelas, hanya boleh ada satu superkelas. Interface yang diimplemen, bisa lebih dari satu interface. Isi kelas

abstract

final

class nama kelas extends superkelas implements nama interface

{ // isi kelas }

Kelas Bersarang
Kelas bersarang adalah deklarasi kelas yang terletak di dalam isi kelas lain. Akibatnya kelas baru ini menjadi anggota dari kelas yang melingkupinya. Kita dapat menggunakan kelas bersarang untuk menerapkan hubungan antara dua kelas dimana kelas bersarang tersebut hanya ada dalam konteks kelas yang melingkupinya. Contohnya, bila kita membuat kelas Listener untuk event yang khusus oleh sebuah kelas, misalnya tombol atau mouse diklik dalam sebuah kelas yang berupa Applet. Maka kita mendeklarasikan kelas Listener tersebut sebagai anggota dari kelas yang memproduksi event. Selain contoh sebelumnya, kelas bersarang juga dapat digunakan bila sebuah kelas membutuhkan kelas lain untuk dapat berfungsi. Maka kelas tersebut dideklarasikan sebagai anggota dari kelas yang memiliki kebutuhannya. Misalnya kita ingin membuat kelas yang berupa dialog, dan dialog ini membutuhkan sebuah kelas lain sebagai parent dari dialog ini. Maka kita meletakkan kelas dialog tersebut dalam kelas parentnya.

Kelas Anonim
Kelas anonim adalah kelas yang tidak mempunyai nama. Dalam program artinya kelas ini tidak memiliki referensi yang disimpan di simbol tertentu. Akibatnya kita tidak dapat mengakses kelas tersebut dengan menggunakan cara biasa. Satu-satunya cara mengakses kelas seperti ini adalah langsung pada baris instansiasinya. Contoh kelas seperti ini telah kita lihat dalam contoh mengenai konstruktor. Kelas anonim dapat kita gunakan bila kita ingin menciptakan sebuah kelas namun hanya butuh menggunakannya sekali dan tidak ingin mengalokasikan memori untuknya karena memang tidak akan digunakan lagi. Kasus seperti ini terjadi misalnya kita ingin menciptakan sebuah kelas baru sebagai argumen untuk sebuah konstruktor atau metode, dimana kita tidak lagi ingin mengakses kelas tersebut secara langsung. Contohnya adalah kasus ketiga dalam contoh mengenai konstruktor. Di sana kita menciptakan sebuah kelas InputStream untuk argumen konstruktor BufferedReader, namun kita tidak ingin menyimpan referensi ke objek InputStream tersebut, karena penggunaannya oleh BufferedReader juga akan berjalan tanpa perintah eksplisit dari program. Jadi sebenarnya referensi ke objek InputStream tersebut disimpan oleh instans BufferedReader, bukan oleh kelas kita.

Kelas Abstrak
Kelas abstrak adalah kelas yang mengandung konsep abstrak sehingga tidak mungkin mempunyai instans. Misalnya suatu kelas abstrak Buah yang mengandung konsep tentang bagian dari tumbuhan yang dapat dimakan. Namun kita tidak dapat menciptakan sebuah instans dari kelas tersebut karena tidak masuk akal menciptakan suatu Buah. Yang mungkin adalah menciptakan instans dari kelas Jeruk, Apel, atau kelas lain yang sudah mengimplementasikan konsep abstrak dari buah. Kelas abstrak dapat mengandung metode abstrak, yaitu metode yang tidak memiliki implementasi. Dengan begitu, kelas abstrak dapat menentukan bagaimana konsep abstrak tersebut diimplementasikan oleh subkelas yang akan menggunakannya. Kelas abstrak tidak harus memiliki metode abstrak, namun setiap kelas yang memiliki metode abstrak haruslah menjadi kelas abstrak.

Polimorfisme
Polimorfisme secara bahasa dapat diartikan memiliki banyak bentuk. Konsep ini terdapat dalam bahasa pemrograman seperti konstruktor yang memiliki beberapa bentuk. Selain konstruktor, konsep ini juga berlaku bagi metode. Metode atau konstruktor dapat memiliki banyak bentuk dalam arti memiliki nama yang sama namun dengan argumen yang berbeda atau dengan return type yang berbeda. Contoh polimorfisme untuk konstruktor maupun untuk metode dapat Anda lihat pada Listing1. Disana terdapat konstruktor-konstruktor dengan nama sama namun dengan argumen yang mengandung parameterparameter yang berbeda. Untuk contoh polimorfisme untuk metode ditunjukkan bahwa terdapat metode dengan nama sama namun memiliki argumen dan return type yang berbeda. Kegunaan dari polimorfisme adalah agar kita dapat mendefinisikan beberapa konstruktor atau metode dengan karakteristik yang berbeda-beda agar nantinya dapat digunakan untuk kasus-kasus yang berbeda. Misalnya kita ingin menciptakan instans dari kelas KelasKita pada Listing1 tanpa memberikan nilai apapun, namun terkadang kita ingin memberikan sebuah nilai sebagai parameter untuk digunakan oleh instans dari kelas tersebut, maka kita dapat membuat kelas seperti KelasKita tersebut. Begitu juga halnya dengan metode, sehingga kita dapat membuat metode-metode yang memiliki karakteristik yang khusus. Polimorfisme sebenarnya dapat dihilangkan dengan medefinisikan sebuah konstruktor atau metode yang dapat menangani semua kasus yang mungkin. Namun hal ini akan menyebabkan program Anda lebih rumit dan sulit dimengerti. Sedangkan polimorfisme yang membantu Anda untuk membuat program yang lebih baik dan mudah juga membawa konsekuensi yaitu proses kompilasi yang lebih rumit, dan penurunan kecepatan eksekusi kelas. Namun hal ini tidak perlu menjadi perhatian Anda kecuali Anda memang ingin mendalami proses kompilasi Java.

Latihan Membuat class dalam java


class Binatang { private String suara; private String makanan; private int kaki; public Binatang() { this.suara = "Suara Binatang"; this.makanan = "Makanan Binatang"; this.kaki = 4; //misalkan kakinya 4 } public Binatang(String suaranya, String makanannya, int kakinya) { suara = suaranya; makanan = makanannya; kaki = kakinya; } public void setSuara(String suaranya) { suara = suaranya; } public void setMakanan(String makanannya) { makanan = makanannya; }

public void setKaki(int kakinya) { kaki = kakinya; } public String getSuara() { return suara; } public String getMakanan() { return makanan; } public int getkaki() { return kaki; } public void infoBinatang() { System.out.println("Makanan = " + makanan); System.out.println("Suara = " + suara); System.out.println("Kaki = " + String.valueOf(kaki)); System.out.println(" "); //dikosongkan untuk jarak } public static void main(String[] args) { System.out.println("<= membuat Objek kuda secara default =>"); Binatang kuda = new Binatang(); kuda.infoBinatang(); System.out.println("<= membuat Objek Singa dengan parameter =>"); Binatang singa = new Binatang("Mengaum","Daging",4); singa.infoBinatang(); System.out.println("<= membuat Objek ayam tapi melalui setter =>"); Binatang ayam = new Binatang(); ayam.setSuara("Kukuruyuk"); ayam.setMakanan("Biji-bijian"); ayam.setKaki(2); ayam.infoBinatang(); } }

Begini penjelasannya, class Binatang ini mempunyai 3 properti yaitu suara, makanan, dan kaki. Nilai dari properti tadi diisi secara default pada saat construktor dijalankan, lalu kapan construktor dijalankan? yaitu pada saat membuat objek dengan menggunakan new, berikut : Binatang kuda = new Binatang(); Dan dibawah ini adalah construktor yang dimaksud :
public Binatang() { this.suara = "Suara Binatang"; this.makanan = "Makanan Binatang"; this.kaki = 4; //misalkan kakinya 4 }

Penggunaan this artinya menunjukan objek kelas Binatang itu sendiri, boleh digunakan dan bisa saja tidak..sama ja ko. Selain itu ada Construktor yang mempunyai parameter, maka dalam contoh membuat objek singa seperti ini :
Binatang singa = new Binatang("Mengaum","Daging",4);

Objek singa menggunakan construktor dibawah ini :


public Binatang(String suaranya, String makanannya, int kakinya) { suara = suaranya; makanan = makanannya; kaki = kakinya; }

Selain itu class Binatang ini juga mempunyai beberapa metode yaitu :
public void setSuara(String suaranya) { suara = suaranya; }

Metode diatas berguna untuk memberikan nilai properti suara. Begitu juga dengan setMakanan dan setKaki berguna untuk memberikan nilai properti makanan dan kaki. Berbeda dengan 3 metode diatas, class ini juga memiliki metode lain yaitu :
public String getSuara() { return suara; }

Metode diatas bukan untuk memberikan nilai properti suara, tetapi memperoleh/mengambil nilai properti suara dari metode setSuara() diatas. Untuk perintah return suara, artinya nilai properti suara tersebut akan diberikan apabila metode getSuara() ini dipanggil. lanjuut...
public void infoBinatang() { System.out.println("Makanan = " + makanan); System.out.println("Suara = " + suara); System.out.println("Kaki = " + String.valueOf(kaki)); System.out.println(" "); //dikosongkan untuk jarak, klo di HTML mah }

Perhatikan public void infoBinatang(), terdapat kata void yang berarti metode tidak untuk menghasilkan sebuah nilai tertentu, tetapi hanya untuk mengerjakan sesuatu. Klo dipaskal sama seperti procedure, ingat dalam JAVA tidak ada procedure tapi hanya ada fungsi. Metode ini mengerjakan/ menampilkan semua atribut class ini. Terakhir..
public static void main(String[] args) { System.out.println("<= membuat Objek kuda secara default =>");

Binatang kuda = new Binatang(); kuda.infoBinatang(); System.out.println("<= membuat Objek Singa dengan parameter =>"); Binatang singa = new Binatang("Mengaum","Daging",4); singa.infoBinatang(); System.out.println("<= membuat Objek ayam tapi melalui setter =>"); Binatang ayam = new Binatang(); ayam.setSuara("Kukuruyuk"); ayam.setMakanan("Biji-bijian"); ayam.setKaki(2); ayam.infoBinatang(); }

Metode ini tidak harus dimiliki sebuah class, metode main diperlukan apabila class ini ingin dijalankan. Ayo kita gali script diatas, pertama-tama mencetak <= membuat Objek kuda secara default => fungsinya hanya untuk penjelas bahwa ini adalah objek kuda, baris berikutnya adalah membuat objek kuda : Binatang kuda = new Binatang(); baris berikutnya kuda.infoBinatang(); memanggil objek kuda dengan metode infoBinatang(), karena tidak mempunyai parameter maka memanggil construktor Binatang(). Untuk bait selanjutnya (beuh bait kek puisi ja). Hampir sama dengan Objek kuda, mencetak <= membuat Objek Singa dengan parameter => lalu membuat objek singa Binatang singa = new Binatang("Mengaum","Daging",4); karena memiliki parameter Binatang("Mengaum","Daging",4); maka yang dipanggil construktor public Binatang(String suaranya, String makanannya, int kakinya). baris singa.infoBoinatang(); untuk memanggil objek kuda dengan metode infoBinatang(). Naah ada yang beda dengan objek ayam yaitu menggunakan metode set..pertama objek ayam dibuat, terus diset dengan metode setSuara untuk dapet nilai properti suara, setMakanan untuk ambil nilai properti makanan dan seterusnya. Lalu metode infoBinatang() dipanggil dengan mendapatkan parameter dari ketiga metode set tadi. Program diatas kalo dijalankan maka hasilnya : <=== membuat Objek kuda secara default===> Makanan = Makanan Binatang Suara = Suara Binatang Kaki = 4 <=== membuat Objek Singa dengan parameter ===> Makanan = Daging Suara = Mengaum Kaki = 4 <=== membuat Objek ayam tapi melalui setter ===> Makanan = Biji-bijian Suara = Kukuruyuk Kaki = 2

Anda mungkin juga menyukai