ALGORITMA DAN PROGRAM 1.
Definisi Algoritma dan Program
Algoritma adalah urutan langkah-langkah logis penyelesaian masalah yang disusun secara secara sistemati sistematiss dan logis”. Kata logis merupakan merupakan kata kunci dalam algoritma. algoritma. Langkahlangkah dalam algoritma harus logis dan harus dapat ditentukan bernilai salah atau benar. Program adalah kumpulan pernyataan komputer, sedangkan metode dan tahapan sistematis dalam program adalah algoritma. Program ditulis dengan menggunakan bahasa pemrograman. Jadi bisa disebut bahwa program adalah suatu implementasi dari bahasa pemro pemrogra graman man.. Bebera Beberapa pa pakar pakar member memberii formul formulaa bahwa: bahwa: Algori Algoritma tma merupak merupakan an hasil hasil pem pemik ikir iran an kons konsep eptu tual al,, supa supaya ya dapa dapatt dila dilaks ksana anaka kan n oleh oleh komp komput uter er,, algor algorit itma ma haru haruss ditran ditransla slasik sikan an ke dalam dalam notasi notasi bahasa bahasa pemrog pemrogram raman. an. Ada bebera beberapa pa hal yang yang harus harus diperhatikan pada translasi tersebut, yaitu: a.
Pend Pendek ekla lara rasi sian an vari variab abel el
b. b.
Pemi emilihan ihan tipe dat data.
c.
Pema Pemaka kaia ian n inst instru ruks ksii-in inst stru ruks ksii
d.
Aturan sintaksi ksis
e.
Tampilan hasil
f.
Cara pengoperasian compiler atau interpreter.
2. Stru Strukt ktur ur Data ata
Sruktur adalah kumpulan dari beberapa variable yang dinyatakan dalam sebuah nama yang memliki sifat bahwa setiap variable dap at memiliki type data yang berlainan. Struktur data adalah merupakan suatu metoda atau cara yang digunakan untuk mengorganisasi data. Struktur data ini terdiri dari kumpulan dari beberapa obyek data, operasi operasi dasar dasar dan relasi relasi antar obyek obyek
strukt struktur ur data ini lebih luas dari pada tipe data.
Beberapa struktur data yang sering digunakan adalah : •
Linked list / senarai berantai ( Double dan da n single Linked list
•
Stack (Tumpukan)
•
Quene (Antrean)
•
Hash Table
•
Tree
•
Graph
3. Pengen Pengenala alan n Bahas Bahasaa Pemog Pemogram raman an Java Java Komput Komputer er adal adalah ah Sebu Sebuah ah mesi mesin n yang yang mela melaks ksan anak akan an berb berbag agai ai maca macam m tuga tugass berdasarkan perintah khusus. Pememb Pemembaha ahass tentan tentang g pemrog pemrogram raman an dengan dengan bahasa bahasa pemrog pemrogram raman an Java, Java, dan menggunakan Netbeans sebagai Integrated sebagai Integrated Development Environment (IDE). Environment (IDE). Dasar Pemrograman dengan menggunakan bahasa pemograman Java, NetBeans IDE yang dapat berjalan pada J2SE JDK 5.0 (JavaTM 2 JDK, Standard Edition) Terdiri dari Java Runtime Environment ditambah peralatan pengembang adalah : - Compiling - Debugging - Runn Runnin ing g apl aplik ikas asi, i, Yang ditulis menggunakan bahasa JavaTM Dalam pengenalan ada beberapa perbedaan, yaitu : 1.
Komponen pada Komputer yang mana terdapat 2 komponen utama yaitu; a.
Hardware (Perangkat Keras) adalah Bagian komputer yang dapat diukur dan terdiri atas bagian elektronik dan mekanik -
b.
CPU (Central Processing Unit) Memori : Memori Utama (Main Memory) Memo Memori ri Sekun ekunde derr (S (Secon econda dary ry Mem Memory ory) I/O Device
Software (Perangkat Lunak) adalah Bagian komputer yang tidak dapat diukur dan terdiri dari data dan program computer -
Software
Suatu program yang digunakan oleh komputer untuk melakukan suatu fungsi
Disimpan pada beberapa piranti keras (hardware (hardware)) seperti hard disk, tetapi software sendiri bersifat tidak dapat diukur (intangible)
•
Tree
•
Graph
3. Pengen Pengenala alan n Bahas Bahasaa Pemog Pemogram raman an Java Java Komput Komputer er adal adalah ah Sebu Sebuah ah mesi mesin n yang yang mela melaks ksan anak akan an berb berbag agai ai maca macam m tuga tugass berdasarkan perintah khusus. Pememb Pemembaha ahass tentan tentang g pemrog pemrogram raman an dengan dengan bahasa bahasa pemrog pemrogram raman an Java, Java, dan menggunakan Netbeans sebagai Integrated sebagai Integrated Development Environment (IDE). Environment (IDE). Dasar Pemrograman dengan menggunakan bahasa pemograman Java, NetBeans IDE yang dapat berjalan pada J2SE JDK 5.0 (JavaTM 2 JDK, Standard Edition) Terdiri dari Java Runtime Environment ditambah peralatan pengembang adalah : - Compiling - Debugging - Runn Runnin ing g apl aplik ikas asi, i, Yang ditulis menggunakan bahasa JavaTM Dalam pengenalan ada beberapa perbedaan, yaitu : 1.
Komponen pada Komputer yang mana terdapat 2 komponen utama yaitu; a.
Hardware (Perangkat Keras) adalah Bagian komputer yang dapat diukur dan terdiri atas bagian elektronik dan mekanik -
b.
CPU (Central Processing Unit) Memori : Memori Utama (Main Memory) Memo Memori ri Sekun ekunde derr (S (Secon econda dary ry Mem Memory ory) I/O Device
Software (Perangkat Lunak) adalah Bagian komputer yang tidak dapat diukur dan terdiri dari data dan program computer -
Software
Suatu program yang digunakan oleh komputer untuk melakukan suatu fungsi
Disimpan pada beberapa piranti keras (hardware (hardware)) seperti hard disk, tetapi software sendiri bersifat tidak dapat diukur (intangible)
data yang komputer gunakan dapat berupa apapun yang program perlukan
-
Program
c.
Tindakan seperti instruksi untuk processor.
Sistem bilangan dan konversinya Beberapa Tipe Program Komputer ◦
Program Sistem
Program yang diperlukan untuk menyimpan semua sistem hardware dan software yang berjalan secara bersamaan ◦
Program Aplikasi
Program yang digunakan user untuk menyelesaikan tugas mereka ◦
Compiler
Menerjemahkan program komputer ke dalam bahasa mesin 2.
Bahasa Pemograman ◦
Suatu teknik komunikasi yang distandarisasi untuk menyatakan instruksi pada komputer
◦
Seperti bahasa manusia, masing-masing bahasa memiliki sintaks dan tata bahasa sendiri
◦
Terdapat perbedaan tipe dari bahasa pemrograman yang dapat digunakan untuk membuat suatu program, tetapi hal itu tergantung pada bahasa yang Anda gunakan, instruksi-instruksi ini diterjemahkan ke dalam bahasa mesin yang dapat dimengerti oleh komputer.
3. Kategori Bahasa Pemograman
-
Bahasa Pemrogra graman Tingkat kat Tinggi
-
Bahasa Assembly Tingkat Rendah
-
Bahasa Pemrogra graman Tingkat kat Tinggi
PENGENALAN JAVA 1. Seja Sejara rah h Sing Singka katt JAVA JAVA
Bahasa pemograman JAVA di ciptakan pada tahun 1991, sekelompok insinyur Sun dipimpin oleh Patrick Naughton dan James Gosling. Nama JAVAsendiri terinspirasi pada saat mereka sedang menikmati secangkir kopi di sebua sebuahk hked edai ai kopi kopi yang yang kemu kemudi dian an deng dengan an tidak tidak senga sengaja ja sala salah h satu satu dari dari mere mereka ka menyebutkan kata JAVA yang mengandung arti asal bijih kopi. Akhirnya mereka sepakat untuk memberikan nama bahasa pemrograman tersebut dengan nama Java. 2.
Motivasi Awal dari JAVA
Kebu Kebutu tuha han n terh terhad adap ap plat platfo form rm baha bahasa sa yang yang bers bersif ifat at free free,, yang yang dapa dapatt didiimplementasikan pada produk elektronik untuk konsumen, seperti toaster dan kulkas. Salah satu dari proyek proyek pertama pertama yang dibangun dibangun menggunakan menggunakan java remote remote control hand-held hand-held pribadi yang bernama Star 7. Pada saat yang sama, World Wide Web dan Internet sedang populer. populer. Gosling et. al. menyadari bahwa Java bisa juga digunakan untuk pemrograman pemrograman pada internet. 3.
Yang Termasuk Teknologi JAVA a.
Sebu Sebuah ah Baha Bahasa sa Pemr Pemrog ogra rama man n
Sebagai sebuah bahasa pemrograman, Java dapat membuat seluruh bentuk aplikasi, desktop, web dan lainnya, sebagaimana dibuat dengan menggunakan bahasa pemrograman konvensional yang lain. Java adalah bahasa pemrograman yang berorientasi objek (OOP) dan dapat dijalankan pada berbagai platform sistem sistem operas operasi. i. Perkem Perkemban bangan gan Java Java tidak tidak hanya hanya terfok terfokus us pada pada satu satu sistem sistem
operasi, tetapi dikembangkan untuk berbagai sistem operasi dan bersifat open source. b.
Sebuah Development Environment
Sebagai sebuah peralatan pembangun, teknologi Java menyediakan banyak tools :
compiler, interpreter, penyusun dokumentasi, paket kelas dan
sebagainya. c.
Sebuah Aplikasi
Aplikasi dengan teknologi Java secara umum adalah aplikasi serba guna yang dapat dijalankan pada seluruh mesin yang memiliki Java Runtime Environment (JRE). d.
Sebuah Deployment Environment
Terdapat dua komponen utama dari Deployment Environment . Yang pertama adalah JRE, yang terdapat pada paket J2SDK, mengandung kelas–kelas untuk semua paket teknologi Java yang meliputi kelas dasar dari Java, komponen GUI dan sebagainya. Komponen yang lain terdapat pada Web Browser. Hampir seluruh Web Browser komersial menyediakan interpreter dan runtime environment dari teknologi Java. Memahami Ruang lingkup Pemograman Java Console : ◦
Tempat untuk menulis perintah(command)
Text Editor ◦
Contoh : Notepad, Wordpad, Vi
Integrated Development Environment (IDE) ◦
environment pemrograman yang terintegrasi pada aplikasi. menyediakan developer GUI, text atau code editor , compiler/interpreter dan debugger .
Program Java 1 2
public class Hello {
3 4 5 6 7 8 9 10 11 12
/** * Program Java Pertama Saya */ public static void main( String[] args ){ // menampilkan string “Hello world” pada layar System.out.println(“Hello world”); } }
Cara menggunakan Text Editor Console
Langkah 1: Memulai text editor Untuk memulai editor teks di Linux, klik pada : Menu >> Accessories >> Text Editor
Langkah 2: Membuka terminal Untuk membuka terminal pada Linux, klik pada: Menu >> System Tools >> Terminal
Langkah 3: Tulis source code Program Java anda di text editor
Langkah 4: Simpan Program Java dengan, Nama File
: Hello.java
Nama Folder : MYJAVAPROGRAMS – Untuk membuka dialog box penyimpanan, klik pada menu bar File, kemudian klik
Save.
– Jika folder MYJAVAPROGRAMS belum ada, buat folder tersebut terlebih dahulu
Langkah 5 : Melakukan proses compile program Masuk ke window Terminal, kemudian : – Masuk ke folder MYJAVAPROGRAMS, tempat dimana program disimpan. – Format perintah/command untuk menjalankan proses javac [nama file]
– Untuk contoh program, dapat ditulis:
compile:
javac Hello.java
Selama proses compile, javac akan menghasilkan bytecode, dalam file yang memiliki format [nama file].class, atau pada program contoh, Hello.class
Langkah 6: Menjalankan Program – Untuk menjalankan program Java, ketik pada command: java [nama file tanpa ekstensi] – Jadi pada contoh program, ketiklah: java Hello
– Setelah program dijalankan, anda dapat melihat pada layar : "Hello world!" Errors Syntax
error yang dihasilkan ketika terjadi kesalahan pen getikan. Kesalahan pada sintaks sering terjadi, jika: – salah mengeja perintah/command pada Java. – lupa mengetik semicolon pada akhir statement
Run-time Error
error yang tidak akan ditampilkan sampai program dijalankan atau dieksekusi. Meskipun program dapat di-compile, tetapi program akan menampilkan jawaban yang salah, jika logika proses dan struktur program tidak benar-benar diperhatikan oleh programmer. Contoh: ◦
Anda ingin program menampilkan 100 kalimat “Hello World”, tetapi hanya menampilkan 99.
◦
Program anda mendapatkan masukan/input dari user, tetapi pada saat user memasukkan karakter/huruf, program anda crash/mati
Langkah 1: Menjalankan NetBeans – Ada 2 cara menjalankan NetBeans:
Melalui command-line menggunakan terminal
Dengan meng-klik tombol shortcut yang ada pada menu
– Menjalankan NetBeans menggunakan terminal
Buka terminal (lihat langkah bagaimana menjalankan terminal pada
diskusi sebelumnya), dan ketikkan : netbeans – Cara kedua menjalankan NetBeans
Klik shortcut pada desktop
langkah 2: Membuat project
– Untuk membuat project, klik pada File -> New Project
– Kemudian, dialog New Project muncul – Pada panel bagian kanan pada dialog project, klik pada Aplikasi Java dan klik pada tombol NEXT – Dialog aplikasi baru akan muncul. Edit pada nama projectnya dan ketikkan "HelloApplication"
langkah 2: Membuat project (lanjutan) – Ubahlah lokasi dari aplikasi dengan meng-klik tombol BROWSE – Pilih lokasi project, dan kotak dialog akan muncul. Klik dua kali pada folder root.
– Isi
dari
folder
root
akan
muncul.
Sekarang
klik
dua
kali
folder
MYJAVAPROGRAMS dan klik pada tombol OPEN – Yang terakhir, pada textfield Create Main Class, tuliskan Hello sebagai nama main class, dan kemudian klik tombol FINISH. Langkah 3: Tulis pada program
modifikasikan penulisan kode dengan NetBeans.
Tuliskan sintaks code berikut ini, System.out.println("Hello world!");
Setelah statement berikut //TODO code application logic here.
Langkah 4: Compile program – Untuk meng-compile program, klik pada :
Build -> Build Main Project – Jika tidak ada error pada program, maka akan muncul successful message pada window output.
Langkah 5: Jalankan program – Untuk menjalankan program, klik pada : Run-> Run Main Project – Hasil ouput dari program, akan ditampilkan pada window output
D as ar -D as ar P em ro g ra man 1.
Menganalisa program Java Pertama
Sekarang, kita akan mencoba untuk menganalisa pertama : public class Hello { /** * My first java program
program Java
*/ public static void main(String[] args) { //menampilkan string ”Hello world” pada layar System.out.println("Hello world!"); } } Baris pertama kode : public class Hello Menandakan nama class yaitu Hello. Dalam Java, semua kode seharusnya ditempatkan di dalam deklarasi class. Baris berikutnya yaitu yang terdiri atas kurung kurawal { menandakan awal blok. Pada kode ini, kita menempatkan kurung kurawal pada baris selanjutnya setelah deklarasi class, bagaimanapun, kita dapat juga meletakkan kurung kurawal ini setelah baris pertama dar i kode yang kita tulis. Jadi, kita dapat menulis kode kita sebagai berikut :
atau
public class Hello { public class Hello { Tiga baris selanjutnya menandakan adanya komentar Java. Komentar adalah
sesuatu yang digunakan untuk mendokumentasikan setiap bagian dari kode yang ditulis. Komentar itu sendiri dapat ditambahkan pada kode yang kita tulis sebagai petunjuk yang dapat membantu proses pembelajaran pemrograman yang baik . /** * My first java program */ Komentar dinyatakan dengan tanda “/*” dan “*/”. Segala sesuatu yang ada diantara tanda tersebut diabaikan oleh compiler Java, dan mereka hanya dianggap sebagai komentar. Baris selanjutnya, public static void main(String[] args) { atau dapat juga ditulis sebagai
ber ikut, public static void main(String[] args) { Mengindikasikan nama suatu method dalam class Hello yang bertindak sebagai method utama. Method utama adalah titik awal dari suatu program Java. Semua
program kecuali applet yang ditulis dalam bahasa Java dimulai dengan method utama. Yakinkan untuk mengikuti kaidah penulisan tanda yang benar. Baris
selanjutnya
juga
merupakan
komentar, //Menampilkan string "Hello world" pada layar
Sekarang kita mempelajari 2 cara untuk membuat komentar. Cara pertama adalah dengan menempatkan komentar dalam /* dan */, dan cara yang lain adalah dengan menuliskan tanda // pada awal komentar Baris selanjutny a, System.out.println("Hello world!"); Menampilkan teks “Hello World!” pada layar. Perintah System.out.println(), menampilkan teks yang diapit oleh tanda double pute (“ ”) pada layar. Dan dua baris terakhir yang terdiri atas dua kurung kurawal digunakan untuk menutup method utama dan masing-masing class secara ber ur utan. 2.
a.
Komentar pada Java Penulisan Komentar
C++
Style
Komentar C++ style diawali dengan //. Semua teks setelah // dianggap sebagai
komentar. Sebagi contoh, // This is a C++ style or single line comments b.
Penulisan Komentar
C
Style
Komentar C-style atau juga disebut komentar beberapa baris diawali dengan /* dan diakhir i dengan */. Semua teks yang ada diantara dua tanda tersebut dianggap sebagai komentar. Tidak seperti komentar C++ style, komentar ini dapat menjangkau beberapa baris. Sebagai contoh, /* this is an example of a C style or multiline comments */ c.
Komentar
Khusus
javadoc
Komentar
javadoc
khusus
digunakan
untuk
men-generate
dokumentasi
HTML untuk program Java Anda. Anda dapat menciptakan komentar javadoc dengan memulai bar i s dengan
/** dan mengakhirinya
C_style, dapat juga menjangkau dapat terdiri atas
beberapa
dengan
*/.
baris. Komentar
Seperti
Komentar
ini
juga
tag-tag untuk menambahkan lebih banyak informasi pada
komentar Anda. Sebagai contoh, /** 3.
Pernyataan dalam Java dan Blok
Pernyataan
adalah
satu
atau
lebih
baris
kode
yang
diakhiri
dengan
semicolon. Sebagai contoh untuk pernyataan tunggal adalah System.out.println(“Hello wor ld”); Blok adalah satu atau lebih pernyataan yang terbentang antara kurung kurawal buka dan kurung kurawal tutup. Beberapa jumlah spasi kosong diijinkan terdapat didalamnya, sebagai contoh dar i suatu blok adalah :
public static void main( String[] args ){ System.out.println("Hello"); System.out.println("world"); } 4.
Java
Identifier
Java Identifier adalah suatu tanda yang mewakili nama-nama variabel, method, class, dsb. Contoh dari Identifier adalah : Hello, main, System, out. 5.
Keyword dalam Java
Kata kunci adalah identifier yang telah dipesan untuk didefinisikan sebelumnya oleh Java untuk tujuan tertentu. Berikut ini adalah daftar dari kata kunci dalam Java (Java Keywor ds).
Kita akan berdiskusi tentang semua arti dari masing-masing kata kunci dan bagaimana mereka digunakan dalam proses penulisan program Java. Catatan: true, false, dan null bukan termasuk kata kunci akan tetapi mereka
ter masuk kata-kata khusus, 6.
Java
Literals
Literals adalah tanda bahwa tidak terjadi perubahan atau konstan. Macam-macam
liter als dalam Java adalah : Integer Literals, Floating-Point Literals, Boolean Literals, Char acter Literals dan String Liter als. a.
Integer Literals
Integer literals dibedakan dalam beberapa format yang berbeda: desimal (berbasis 10), heksadesimal (berbasis 16), and oktal (berbasis 8). Dalam penggunaan tipe data integer pada program, kita harus mengikuti aturan penggunaan beberapa notasi khusus. Untuk angka desimal, kita tidak memerlukan notasi khusus. Kita hanya menulis angka desimal seperti apa adanya. untuk angka heksadesimal, hal itu harus ditandai oleh “0x” atau “0X”. untuk oktal, ditandai oleh“0”. b.
Floating-Point
Literals
Floating
point
literals mewakili
bentuk
desimal
dengan
bagian
yang
terpisah. c.
Boolean
Literals
Boolean literals hanya memiliki dua nilai, true atau f alse. d.
Character Literals
Character Literals diwakili oleh karakter single Unicode. e.
String Literals
String literals mewakili beberapa karakter dan dinyatakan dalam tanda double pute(“ ”)( double quotes). Sebagai contoh string literal adalah, “Hello World”. 7.
Tipe
Data
Primitif
Bahasa pemrograman Java mendefinisikan delapan tipe data primitif. Mereka
diantar anya adalah boolean (untuk bentuk logika), char (untuk bentuk tekstual), byte, short, int, long (integral), double and float (floating point). a.
logika -
boolean
Tipe data boolean diwakili oleh dua pernyataan : true dan false. Sebagai contoh adalah, boolean result = true; Contoh diatas, mendeklarasikan variabel yang dinamai result sebagai tipe data boolean dan memberinya nilai true. b.
teksu
al – char
Tipe data character (char), diwakili oleh karakter single Unicode. Tipe data ini har us memiliki ciri berada dalam tanda single quotes(’ ’). Sebagai contoh, ‘a’
//Huruf a
‘\t’
//A tab
Untuk menampilkan karakter khusus seperti ' (single quotes) atau " (double quotes), menggunakan karakter escape \. Sebagai contoh, '\''
//untuk single quotes
'\"'
//untuk double quotes
Meskipun String bukan merupakan tipe data primitif (namun merupa kan suatu Class), kita akan memperkenalkan mengenai pada bagian ini. String mewakili tipe data yang terdiri atas beberapa karakter. Mereka tidak termasuk tipe data primitif, melainkan suatu class. Mereka memiliki literal yang terdapat diantara tanda double
quotes(“”). Sebagai contoh, String message=“Hello world!”
c.
Integral – byte, short, int &
long
Tipe data integral dalam Java menggunakan tiga bentuk- yaitu desimal, oktal atau heksadesimal. Contohnya, 2
//nilai desimal 2
077
//angka 0 pada awal pernyataan mengindikasikan nilai oktal
0xBACC
//karakter 0x mengindikasikan nilai heksadesimal
Tipe-tipe integral memiliki default tipe data yaitu int. Anda dapat merubahnya ke bentuk long dengan menambahkan huruf l atau L. Tipe data integral memiliki range sebagai ber ikut: Integer Leng th Name or Range
d.
8 bits
byte
7 -2
7 to 2 -1
16 bits
short
15 15 -2 to 2 -1
32 bits
int
31 31 -2 to 2 -1
64 bits
long
63 63 -2 to 2 -1
Floating Point – float dan
double
Tipe Floating point memiliki double sebagai default tipe datanya. Floating-point liter al termasuk salah satunya desimal point atau salah satu dari pilihan berikut ini, E or e //(add exponential value) F or f //(float) D or d //(double) Contohnya ; 3.14 //nilai floating-point sederhana (a double) 6.02E23 //A nilai floating-point yang besar 2.718F //A nilai float size sederhana 123.4E+306D //A nilai double yang besar dengan nilai redundant D Pada contoh diatas, 23 setelah E pada contoh kedua bernilai positif. Contoh tersebut sama dengan 6.02E+23. Tipe data Floating-point memiliki range sebagai
ber ikut: Panjang F l oat
8.
Nama atau T i pe
Range
32 bits
f loat
31 -2
31 to 2 -1
64 bits
double
63 -2
63 to 2 -1
Variabel Variabel adalah item yang digunakan data untuk menyimpan pernyataan objek .
Variabel memiliki tipe data dan nama. Tipe data menandakan tipe nilai yang dapat dibentuk oleh variabel itu sendiri. Nama variabel harus mengikuti aturan untuk identif ier.
a.
Deklarasi dan Inisialisasi Variabel
Untuk deklarasi variabel adalah sebagai ber ikut,
[=initial value]; Catatan: Nilainya berada diantara <> adalah nilai yang disyaratkan, sementara nilai dalam tanda [] bersifat optional . Berikut ini adalah contoh program yang mendeklarasikan dan menginisialisasi beber apa var iabel, public class VariableSamples { public static void main( String[] args ){ //deklarasi tipe data dengan nama variable // result dan tipe data boolean boolean result; //deklarasi tipe data dengan nama variabel // option dan tipe data char char option; option = 'C'; //menandai 'C' sebagai option
//deklarasi tipe data dengan nama variabel //grade, double tipe data dan telah //to 0.0 double grade = 0.0;
di inisialisasi
} b.
} Menampilkan Data Variabel
Untuk mengeluarkan nilai dari variabel yang diinginkan, kita dapat
menggunakan per intah sebagai ber ikut, System.out.print ln() System.out.print () Berikut ini adalah contoh pr ogr am, public class OutputVariable { public static void main( String[] args ){ int value = 10; char x; x = ‘A’; System.out.println( value ); System.out.println( “The value of x=” + x ); } } Program tersebut akan mengeluarkan teks berikut pada layar, 10 The value of x=A c.
System.out.println() vs. System.out.print()
Yang membedakan diantara perintah System.out.println() and System.out. pr int(), Yang pertama menambahkan baris baru pada akhir data untuk dikeluarkan, sementar a selanjutnya tidak . Perhatikan
pernyataan
ter sebut, System.out.print("Hello "); System.out.print("world! "); Pernyataan tersebut akan menghasilkan output berikut ini pada layar, Hello world! Sekarang perthatikan pernyataan ber ikut, System.out.println("Hello
"); System.out.println("world!" ); Pernyataan ini akan menghasilkan output sebagai berikut pada layar, H e l l o
d.
w o r l d ! Variabel Reference dan Variabel Primitif
Sekarang kita akan membedakan dua tipe variabel yang dimiliki oleh program Java. Ada variabel reference
dan
variabel
primitif . Variabel primitif adalah variabel dengan tipe data primitif. Mereka menyimpan data dalam lokasi memori yang sebenarnya dimana variabel tersebut ber ada. Variabel Reference adalah variabel yang menyimpan alamat dalam lokasi
memori. Yang menunjuk ke lokasi memori dimana data sebenarnya berada. Ketika Anda mendeklar asikan variabel pada class tertentu, Anda sebenarnya mendeklarasikan reference variable dalam bentuk objek dalam classnya ter sebut. Sebagai contoh, Apabila kita mempunyai dua variabel dengan tipe data int dan Str ing. int num = 10; String name = "Hello" Dimisalkan ilustrasi yang ditunjukkan dibawah ini adalah memori yang ada pada komputer Anda, dimana Anda memiliki alamat dari setiap sel memorinya, nama variabel dan datanya terbentuk sebagai ber ikut. Memory
Variable
Da
Address
Name
1001
num
10 : Address(2000)
:
1563
name : : "Hello"
: : 2000 Seperti yang dapat Anda lihat, untuk variable primitif num, datanya berada dalam lokasi dimana variabel berada. Untuk reference variable name, variabel hanya menunjuk alamat dimana data tersebut benar-benar ada. 9.
Op
erator
Dalam Java, ada beberapa tipe operator. Ada operator aritmatika, operator relasi, oper ator logika, dan operator kondisi. Operator ini mengikuti bermacam-macam prioritas yang pasti sehingga compilernya akan tahu yang mana operator untuk dijalankan lebih dulu dalam kasus beberapa operator yang dipakai bersama-sama dalam satu per nyataan. a.
Operator Aritmatika
Berikut ini adalah dasar operator aritmatika yang dapat digunakan untuk membuat suatu program Java, Operat or
Penggunaan
Ket erangan
+
op1 + op2
Menambahkan op1 dengan op2
*
op1 * op2
Mengalikan op1 dengan op2
/
op1 / op2
Membagi op1 dengan op2
%
op1 % op2
Menghitung pembagian
sisa dari op1 dengan op2
-
op1 - op2
Mengurangkan op2 dari op1
Operator Aritmatika dan fungsi-fungsinya Berikut ini adalah contoh program dalam penggunaan operator-operator ini : public class aritmatikaDemo { public static void main(String[] args) { //sedikit angka int i = 37; int j = 42; double x = 27.475; double y = 7.22; System.out.println("Variable values..."); System.out.println(" i = " + i); System.out.println(" j=" + j); System.out.println(" x=" + x); System.out.println(" y = " + y); //penjumlahan angka System.out.println("Adding..."); System.out.println(" i + j = " + (i + j)); System.out.println(" x + y = " + (x + y)); //pengurangan angka System.out.println("Subtracting..."); System.out.println(" i - j = " + (i - j)); System.out.println(" x - y = " + (x y)); //perkalian angka System.out.println("Multiplying..."); System.out.println(" i * j = " + (i * j)); System.out.println(" x * y = " + (x * y)); //pembagian angka System.out.println("Dividing..."); System.out.println(" i / j = " + (i / j)); System.out.println(" x / y = " + (x / y));
//menghitung hasil modulus dari pembagian System.out.println("Computing the remainder..."); System.out.println(" i % j = " + (i % j)); System.out.println(" x % y = " + (x % y)); //tipe penggabungan System.out.println("Mixing tipes..."); System.out.println(" j + y = " + (j + y)); System.out.println(" i * x = " + (i * x)); } } Berikut ini adalah output pr ogr am, Variable values... i = 37 j = 42 x= 27. 475 y= 7.2 2 i + j = 79 Adding... x + y = 34.695 Subtracting... i - j = -5 x - y = 20.255 Multiplying... i * j = 1554 x * y = 198.37 Dividing... i/j=0 x / y = 3.8054 Computing the remainder... i % j = 37 x % y = 5.815 Mixing tipes... j + y = 49.22 i * x = 1016.58 b.
Operator Increment dan Decrement
Dari sisi operator dasar aritmatika, Java juga terdiri atas operator unary increment (++) dan operator unary decrement (--). operator increment dan decrement menambah dan mengurangi nilai yang tersimpan dalam bentuk variabel angka terhadap nilai 1. Sebagai
contoh,
per nyataan, count = count + 1;
//increment nilai count dengan nilai 1
pernyataan tersebut sama dengan, count++;
Operat or
++
++
--
--
Penggunaan
Ket erangan
op++
Menambahkan nilai mengevaluasi nilai diincr ementasi/ditambahkan
1 op
padaop; sebelum
++op
Menambahkan nilai mengevaluasi nilai diincr ementasi/ditambahkan
1 op
pada setelah
op--
Mengurangkan nilai mengevaluasi nilai didecr ementasi/dikur angkan
1 op
padaop; sebelum
--op
Mengurangkan nilai mengevaluasi nilai didecr ementasi/dikur angkan
1 op
pada setelah
op;
op;
operator Increment dan Decrement Operator increment dan decrement dapat ditempatkan sebelum atau sesudah oper and. Ketika digunakan sebelum operand,
akan
menyebabkan variabel diincrement
atau didecrement dengan nilai 1, dan kemudian nilai baru digunakan dalam pernyataan dimana dia ditambahkan. Sebagai contoh, int i = 10,
int j = 3; int k = 0; k = ++j + i; //akan menghasilkan k = 4+10 = 14
Ketika operator increment dan decrement ditempatka n setelah operand, nilai variabel yang lama akan
digunakan lebih dulu dioperasikan lebih dulu terhadap pernyataan
dimana dia ditambahkan. Sebagai contoh, int i = 10, int j = 3; int k = 0; k = j++ + i; //akan menghasilkan k = 3+10 = 13 c.
Operator Relasi
Operator Relasi membandingkan dua nilai dan menentukan keterhubungan diantara nilai- nilai tersebut. Hasil keluarannya berupa nilai boolean yaitu true atau f alse.
Operat or
Penggunaan
Ke t erangan
>
op1 > op2
op1 lebih besar dari op2
>=
op1 >= op2
op1 lebih besar dari atau sama dengan
<
op1 < op2
op1 kurang dari op2
<=
op1 <= op2
op1 kurang dari atau sama dengan op2
==
op1 == op2
op1 sama dengan op2
!=
op1 != op2
op1 tidak sama dengan op2
Operator Relasi Berikut ini adalah contoh program yang menggunakan operator Relasi, public class RelasiDemo {
public static void main(String[] args) { //beberapa nilai int i = 37; int j = 42; int k = 42; System.out.println("Nilai variabel..."); System.out.println(" i = " + i); System.out.println(" j = " + j); System.out.println(" k = " + k); //lebih besar dari System.out.println("Lebih besar dari..."); System.out.println(" i > j = " + (i > j)); //false System.out.println(" j > i = " + (j > i)); //true System.out.println(" k > j = " + (k > j)); //false //lebih besar atau sama dengan System.out.println("Lebih besar dari atau sama dengan..."); System.out.println(" i >= j = " + (i >= j)); //false System.out.println(" j >= i = " + (j >= i)); //true System.out.println(" k >= j = " + (k >= j)); //true //lebih kecil dari System.out.println("Lebih kecil dari..."); System.out.println(" i < j = " + (i < j)); //true System.out.println(" j < i = " + (j < i)); //false System.out.println(" k < j = " + (k < j)); //false //lebih kecil atau sama dengan System.out.println("Lebih kecil dari atau sama dengan..."); System.out.println(" i <= j = " + (i <= j)); //true System.out.println(" j <= i = " + (j <= i)); //false System.out.println(" k <= j = " + (k <= j)); //true //sama dengan System.out.println("Sama dengan..."); System.out.println(" i == j = " + (i == j)); //false System.out.println(" k == j = " + (k == j)); //true //tidak sama dengan System.out.println("Tidak sama dengan..."); System.out.println(" i != j = " + (i != j)); //true System.out.println(" k != j = " + (k != j)); //false }
} Berikut adalah hasil keluaran dari program ini : Nilai variabe l... i = 37 j = 4 2 k = 4 2 Lebih besar dari... i > j = false j > i = true k > j = false Lebih besar dari atau sama dengan... i >= j = false j >= i = true k >= j = true Lebih kecil dari... i < j = true j < i = false k < j = false Lebih kecil dari atau sama dengan... i <= j = true j <= i = false k <= j = true Sama dengan... i == j = false k == j = true Tidak sama dengan... i
!= j = true k != j = false d.
Operato
r logika
Operator logika memiliki satu atau lebih operand boolean yang menghasilkan nilai boolean. Terdapat enam operator logika yaitu: && (logika AND), & (boolean logika AND), || (logika OR), | (boolean logika inclusive OR), ^ (boolean logika exclusive OR), dan ! (logika NOT). Pernyataan dasar untuk operasi logika adalah, x1 op x2 Dimana x1, x2 dapat menjadi pernyataan boolean. Variabel atau konstanta, dan op adalah salah satu dari operator &&, &, ||, | atau ^. Tabel kebenaran yang akan ditunjukkan selanjutnya, merupakan kesimpulan dari hasil dari setiap operasi untuk semua kombinasi yang mungkin dari x1 dan x2. -
&& (logika AND) dan & (boolean logika AND)
Berikut ini adalah tabel kebenaran untuk && dan &, x1
x2
Hasil
TRUE
TRUE
TRUE
TRUE
FALSE
FALSE
FALSE
TRUE
FALSE
FALSE FALSE FALSE Tabel Kebenaran untuk & dan && Perbedaan dasar antara operator && dan & adalah bahwa && mensupports shortcircuit evaluations (atau evaluasi perbagian), sementara operator & tidak. Apa
arti dar i pernyataan ter sebut? Diberikan
suatu
per nyataan, exp1 && exp2
&& akan mengevaluasi pernyataan exp1, dan segera mengembalikan nilai false dan menyatakan bahwa exp1 bernilai false. Jika exp1 bernilai false, operator tidak akan per nah mengevaluasi exp2 karena hasil operasi operator akan menjadi false tanpa memper hatikan nilai dari exp2. Sebaliknya, operator & selalu mengevaluasi kedua nilai dari exp1 dan exp2 sebelum mengembalikan suatu nilai jawaban. Berikut ini adalah suatu contoh source code yang menggunakan logika dan boolean AND, public class TestAND { public static void main( String[] args ){ int i =0 int = 10 boolean test= false; //demonstrasi && test = (i > 10) && (j++ > 9); System.out.println(i); System.out.println(j); System.out.println(test); //demonstrasi & test = (i > 10) & (j++ > 9); System.out.println(i); System.out.println(j); System.out.println(test ); } } The output of the program is, 0 10 false 0 11 False
-
|| (logika OR) dan | (boolean logika inclusive OR)
Berikut ini adalah tabel kebenaran untuk || dan |, x1
x2
Hasil
TRUE
TRUE
TRUE
TRUE
FALSE
TRUE
FALSE
TRUE
TRUE
FALSE
FALSE FALSE Table Kebenaran untuk | dan ||
Perbedaan dasar antara operator || dan | adalah bahwa || mendukung shor t-cir cuit evaluations (atau proses evaluasi sebagian), sementara | tidak. diberikan suatu per nyataan, exp1 || exp2 || akan mengevaluasi pernyataan exp1, dan segera mengembalikan nilai true dan menyatakan bahwa exp1 bernilai true. Jika exp1 bernilai true, operator tidak akan per nah mengevaluasi
exp2 karena hasil dari
operasi operator akan bernilai
true tanpa memperhatikan nilai dari exp2. Sebaliknya,operator | selalu mengevaluasi kedua nilai dar i exp1 and exp2 sebelum mengembalikan suatu jawaban suatu nilai. Berikut ini sebuah contoh source code yang menggunakan operator logika dan boolean OR , public class TestOR { public static void main( String[] args ){ int i =0 int = 10 boolean test= false; //demonstrasi || test = (i < 10) || (j++ > 9); System.out.println(i); System.out.println(j); System.out.println(test); //demonstrasi |
test = (i < 10) | (j++ > 9); System.out.println(i); System.out.println(j); System.out.println(test ); } } Hasil keluaran dari program ini adalah, 0 1 0 t r u e 0 11 True
-
^ (boolean logika ExclusiveOR )
Berikut ini adalah tabel kebenaran untuk ^, x1
x2
Hasil
TRUE
TRUE
FALSE
TRUE
FALSE
TRUE
FALSE TRUE
TRUE
FALSE FALSE
FALSE
Tabel kebenaran untuk ^ Hasil operasi operator exclusive OR adalah TRUE, jika dan hanya jika satu operand ber nilai TRUE dan yang lain bernilai False. Berikut ini adalah contoh source code yang menggunakan operator logika exclusive OR ,
public class TestXOR { public static void main( String[] args ){ boolean val1 = true; boolean val2 = true; System.out.println(val1 ^ val2); val1 = false; val2 = true; System.out.println(val1 ^ val2); val1 = false; val2 = false; System.out.println(val1 ^ val2); val1 = true; val2 = false; System.out.println(val1 ^ val2); } } Hasil keluaran program tersebut adalah, f a l s e t r u e f a l s e t r u e - (logika NOT) Logika NOT digunakan dalam satu argumen, dimana argumen tersebut dapat menjadi suatu pernyataan, variabel atau konstanta. Berikut ini adalah tabel kebenaran untuk
oper ator not ; Hasil
x1
TRUE
FALSE
FALSE TRUE Tabel Kebenaran untuk ! Berikut ini adalah contoh source code yang menggunakan operator logika NOT, public class TestNOT { public static void main( String[] args ){ boolean val1 = true; boolean val2 = false; System.out.println(! val1); System.out.println(! val2); } } Hasil keluaran program adalah sebagai ber ikut, f a l s e t r u e e.
Operator
Kondisi(?:)
Operator kondisi ?: adalah operator ternary. Berarti bahwa operator ini membawa tiga argumen yang membentuk suatu ekspresi bersyarat. Struktur pernyataan yang menggunakan operator kondisi adalah,
exp1?exp2:exp3 Dimana nilai exp1 adalah suatu pernyataan boolean yang memiliki hasil yang salah satunya harus berupa nilai true atau f alse. Jika exp1 bernilai true, exp2 merupakan hasil operasi. Jika bernilai false, kemudian exp3 merupakan hasil oper asinya.
Sebagai contoh, diberikan code sebagai ber ikut, public class ConditionalOperator { public static void main( String[] args ){ String status = ""; int grade = 80; //mendapatkan status pelajar status = (grade >= 60)?"Passed" :"Fail"; //print status System.out.println( status ); } } Hasil keluaran dari program ini akan menjadi, Passed Berikut ini adalah flowchart yang menggambarkan bagaimana operator ?: beker ja,
Flowchart
Berikut ini adalah program lain yang menggunakan operator ?: , class ConditionalOperator { public static void main( String[] args ){ int char
score = 0; answer = 'a';
score = (answer == 'a') ? 10 : 0; System.out.println("Score = " + score ); } } Hasil keluaran program adalah, Score = 10 f.
Operator
Precedence
Operator precedence didefinisikan sebagai perintah yang dilakukan compiler ketika melakukan evaluasi terhadap operator, untuk mengajukan perintah dengan hasil yang tidak ambigu/ hasil yag jelas.
Operator
Precedence Diberikan pernyataan yang membingungkan, 6%2*5+4/2+88-10 Kita dapat menuliskan kembali pernyataan diatas dan menambahkan beberapa tanda kurung terhadap operator pr ecedence, ((6%2)*5)+(4/2)+88-10;
Mendapatkan Input dari Keyboard A.
Menggunakan
BufferedReader
untuk
mendapatkan input adalah langkah-langkah yang diperlukan untuk mendapatkan input dari keyboard:
1. Tambahkan di bagian paling atas code Anda:
import java.io.*;
2. Tambahkan statement berikut:
BufferedReader dataIn = new BufferedReader(new InputStreamReader( System.in) );
3. Deklarasikan variabel String temporary untuk mendapatkan input, dan gunakan fungsi readLine() untuk
mendapatkan
input
dari
keyboard.
Anda harus
mengetikkannya di dalam blok try-catch:
try{ String temp = dataIn.readLine(); } catch( IOException e ){ System.out.println(“Error in getting input”); Berikut ini adalah source code lengkapnya: import java.io.BufferedReader; import jav java. a.io io.I .Inp nput utSt Strream eamRead Reader er;;
impo import rt
java.io.IOException; public class GetInputFromKeyboard { public static void main( String[] args ){
BufferedReader BufferedReader dataIn = new BufferedReader(new BufferedReader(new InputStreamReader( InputStreamReader( System.in) );
String name = "";
System.out.print("Please Enter Your Name:"); try{
name = dataIn.readLine(); dataIn.readLine();
}catch( IOException e ) { System.out.println("Error!"); System.out.println("Error!"); }
System.out.println("Hello " + name +"!"); }
} penjelasan setiap baris dari code tersebut: Statement, impo import rt
java java.i .io. o.Bu Bufffere feredR dRea eade der; r;
java.io.InputStreamReader;
impo import rt import
java.io.IOException; Java Application Programming Programmin g Interface (API) berisi ratusan class yang sudah didefinisikan sebelumnya yang dapat digunakan untuk program. Class-class tersebut dikumpulkan di dalam packages.
Packages berisi class yang mempunyai fungsi yang saling berhubungan. Seperti pada contoh
di atas atas,, java.io package mengandun mengandung g class-cla class-class ss yang memungkink memungkinkan an program program untuk untuk melakukan input dan output data. Pernyataan di atas juga dapat ditulis sebagai berikut, import java.io.*;
yang akan mengeluarkan semua class yang berada dalam package, dan selanjutnya kita bisa menggunakan class-class tersebut dalam program. Dua statement selanjutnya, selanjutnya,
public class GetInputFromKeyboard { public static void main( String[] args ){ Pernyata Pernyataan an
ini
mendekla mendeklaras rasikan ikan
mendeklarasikan method main.
class class
bernama bernama
GetInpu GetInputFr tFromKe omKeybo yboard ard
dan
kita
Dalam statement,
BufferedReader dataIn = new BufferedReader(new InputStreamReader( System.in) ); Mendeklarasikan sebuah variabel bernama dataIn dengan tipe class BufferedReader. Jangan mengkhawatirkan tentang maksud dari syntax saat ini. mendeklarasikan variabel String dengan identifier name, String name = ""; Pernyataan Pernyataan di atas merupakan tempat untuk menyimpan input dari user. Nama variabel diinisialisasi sebagai String kosong "". Sebaiknya selalu menginisialisasi sebuah variabel setelah mendeklarasikannya. memberikan output sebuah String pada layar yang menanyakan nama user.
System.out.print("Please Enter Your Name:");
Sekarang, blok di bawah ini merupakan try-catch block, try{
name = dataIn.readLine() }catch(
IOException
e
){
System.out.println("Error!") } Pada baris ini menjelaskan bahwa kemungkinan terjadi error pada pernyataan, name = dataIn.readLine(); kode ini untuk menggunakan method readLine() dari BufferedReader untuk mendapatkan input dari user. name = dataIn.readLine(); metho method d diata diatass memang memanggil gil dataI dataIn.r n.read eadLi Line ne() (),, mendapat mendapatkan kan
inpu inputt
dari dari
user user
dan dan
memberikan sebuah nilai String. Nilai ini akan disimpan ke dalam variabel name, yang
akan kita gunakan pada statement akhir untuk menyambut user, System.out.println("Hello " + name + "!");
B.
Menggunakan JOptionPane untuk mendapatkan input
Cara lain untuk mendapatkan input dari user adalah den gan menggunakan class class JoptionPane yang didapatkan dari javax.swing package. JoptionPane memudahkan memunculkan dialog box standard yang memberikan kepada user sebuah nilai atau menginformasikan menginformasi kan sesuatu. Diberikan kode berikut ini, import javax.swing.JOptionPane; public class GetInputFromKeyboard { public static void main( String[] args ){ String name = ""; name = JoptionPane.showInputDialog("Please enter your name");
String
msg
=
"Hello
"
+
name
+
JOptionPane.showMessageDialog(null, msg); } } Outputnya adalah:
Gambar 1: Mendapatkan Input menggunakan JoptionPane
"!";
Gambar 2: Input florence pada JOptionPane
Gambar 3: Menunjukkan Pesan Menggunakan JOptionPane
Statement pertama,
import javax.swing.JOptionPane;
Menjelaskan bahwa kita mengimpor class JoptionPane dari package javax.swing. Bisa juga ditulis seperti, import javax.swing.*; Pernyataan, name = JOptionPane.showInputDialog("Please enter your name");
membuat sebuah input dialog
JOptionPane, yang akan menampilkan dialog dengan
sebuah pesan, sebuah textfield dan tombol OK seperti pada gambar. Hasil dari dialog tersebut adalah String dan disimpan ke dalam variabel name. membuat pesan selamat datang, yang akan disimpan ke dalam variabe msg,
String msg = "Hello " + name + "!";
Baris selanjutnya adalah menampilkan sebuah dialog yang berisi sebuah pesan dan
tombol OK,
JOptionPane.showMessageDialog(null, msg);
Struktur Kontrol A.
Struktur Kontrol Pemilihan
Struktur
kontrol pemilihan
adalah
pernyataan
dari
Java
yang
mengijinkan user untuk memilih dan mengeksekusi blok kode spesifik dan
mengabaikan blok kode yang lain.
A1. Statement if
Pernyataan if akan menentukan sebuah pernyataan (atau blok kode) yang akan eksekusi jika dan hanya jika persyaratan bernilai benar (true).
Bentuk dari pernyataan if,
if( boolean_expression ) statement;
atau
if(
boolean_expression
){
statement1; statement2; ... } dimana,
boolean_expression adalah
variabel bertipe boolean.
sebuah
penyataan
logika (true/false) atau
Gambar 1: Flowchart Statement If
Berikut ini adalah potongan kode dari pernyataan if:
int grade = 68;
if( grade > 60 ) System.out.println("Congratulations!");
atau
int grade = 68;
if(
grade
>
60
){
System.out.println("Congratulations!"); System.out.println("You passed!"); } Petunjuk Penulisan Program :
1. Boolean_expression pada pernyataan i f harus merupakan nilai boolean).Hal ini berarti persyaratan harus bernilai true atau false. 2. Masukkan statement di dalam blok if. Contohnya,
if( boolean_expression ){ //statement1; //statement2; } A2. Statement if-else
Pernyataan if-else digunakan apabila kita ingin mengeksekusi beberapa pernyataan dengan kondisi true dan pernyataan yang lain dengan kondisi false.
Bentuk statement if-else,
if( boolean_expression ) statement; else statement;
dapat juga ditulis seperti,
if(
boolean_expression
){
statement1; statement2; ... } else{ } statement1; statement2; ... }
Berikut ini contoh code statement if-else,
int grade = 68;
if( grade > 60 ) else
System.out.println("Congratulations!"); System.out.println("Sorry you failed");
atau int grade = 68;
if( grade > 60 ){ System.out.println("Congratulations!"); System.out.println("You passed!"); } else{
} System.out.println("Sorry you failed");
Gambar 2: Flowchart Statement If-Else
Petunjuk Penulisan Program :
1. Untuk
menghindari
kebingungan,
selalu
letakkan sebuah pernyataan atau
beberapa pernyataan di dalam blok if-else didalam tanda kurawal {}, 2. Anda dapat memiliki blok if-else yang bersarang. Ini berarti anda dapat memiliki blok if-else yang lain di dalam blok if-else. Contohnya, if( boolean_expression ){ if( boolean_expression ){ ... } } else{ ... }
A3. Statement if-else-if
Pernyataan pada bagian kondisi else dari blok if-else dapat menjadi struktur ifelse yang lain. Kondisi struktur
seperti
ini
mengijinkan
kita
untuk membuat seleksi persyaratan yang lebih kompleks. Bentuk statement if-else if, if( boolean_expression1 ) statement1; else if( boolean_expression2 ) statement2; else statement3; Sebagai catatan : anda dapat memiliki banyak blok else-if sesudah pernyataan if . Blok
else bersifat opsional dan dapat dihilangkan. Pada contoh yang ditampilkan di atas,
jika boolean_expression1 bernilai true, maka program akan mengeksekusi
statement1 dan melewati pernyataan yang lain.Jika boolean_expression2 true,maka program akan mengeksekusi statement2 dan melewati statement3.
Gambar 3: Flowchart Statement If-Else-If
contoh code statement if-else-if int grade = 68; if( grade > 90 ){ System.out.println("Very good!"); } else if( grade > 60 ){ System.out.println("Very good!"); } else{
bernilai
System.out.println("Sorry you failed"); } A4. Kesalahan umum ketika menggunakan statement if-else:
1. Kondisi pada statement if tidak mengevaluasi nilai logika boolean. Contohnya :
//SALAH int number = 0; if( number ){ //some statements here } Variabel number tidak memiliki nilai Boolean.
2. Menggunakan operator = sebagai operator perbandingan yang seharusnya adalah operator == . Contohnya,
//SALAH int number = 0; if( number = 0 ){ //Beberapa pernyataan }
Seharusnya kode tersebut ditulis,
//BENAR int number = 0; if( number == 0 ){ //beberapa pernyataan }
3. Penulisan elseif yang seharusnya ditulis sebagai else if . A5. Contoh statement if-else-else if
public class Grade { public static void main( String[] args ) { double grade = 92.0; if( grade >= 90 ){ System.out.println( "Excellent!" ); } else if( (grade < 90) && (grade >= 80)){ System.out.println("Good job!" ); } else if( (grade < 80) && (grade >= 60)){ System.out.println("Study harder!" ); } else{ System.out.println("Sorry, you failed."); } } } A6. Statement Switch
Cara
lain
untuk
membuat
cabang
adalah
dengan
menggunakan
switch.Switch mengkonstruksikan cabang untuk beberapa kondisi dari nilai.
Bentuk statement switch, switch( switch_expression ){ case case_selector1: statement1; //statement2; //block 1 ... // break; case case_selector2: statement1; // statement2; //block 2 ... // break;
kata
kunci
... Break; }
... Default: statement1; statement2; //
switch_expression
// //block n
adalah ekspresi
integer
case_selector1, case_selector2 konstanta
un i k dari nilai
atau
dan
karakter
dan seterusnya
adalah
integer atau karakter
Ketika pernyataan switch ditemukan pada potongan kode program, java pertama kali akan memeriksa switch_expression, dan menuju ke case yang akan menyamakan nilai yang dimiliki oleh switch_expression. Selanjutnya program akan mengeksekusi pernyataan pada dari kode setelah case yang ditemukan sampai
menemui
pernyataan break , selanjutnya akan mengabaikan pernyataan yang lainnya hingga akhir dari struktur dari pernyataan switch. Jika tidak ditemui case yang cocok, maka program akan mengeksekusi blok default . Sebagai catatan, bahwa bagian blok default adalah opsional. Sebuah
pernyataan
switch bisa jadi tidak memiliki blok kode default .
CATATAN: 1. Tidakseperti pada pernyataan if , beberapa pernyataan pada struktur pernyataan switch akan dieksekusi tanpa memerlukan tanda kurung kurawal ({}). 2. Ketika sebuah case pada pernyataan switch menemui kecocokan, semua pernyataan pada case tersebut akan dieksekusi. Tidak hanya demikian, pernyataan lain yang berada pada case yang sesuai juga akan dieksekusi. 3. Untuk menghindari program mengeksekusi pernyataan pada case berikutnya,
kita menggunakan pernyataan break sebagai pernyataan akhir pada setiap blok case.
B.
Struktur Kontrol Perulangan
Struktur kontrol pengulangan adalah berupa pernyataan dari Java yang mengijinkan kita untuk mengeksekusi blok
code
tertentu yang diinginkan.
tiga
Ada
berulang-ulang sesuai dengan jumlah macam
jenis
dari
struktur
kontrol
pengulangan yaitu while, do- while, dan for-loops. B1. while loop
Pernyataan while loop adalah pernyataan atau blok pernyataan yang diulang-ulang sampai mencapai kondisi yang cocok. Pernyataan di dalam while loop akan dieksekusi berulang-ulang selama kondisi boolean_expression bernilai benar (true). Berikut ini adalah beberapa contoh while loop, Contoh 1:
int x = 0; while (x<10) { System.out.println(x); x++;
} Contoh 2:
//infinite loop while(true) System.out.println(“hello”); Contoh 3:
//no loops // statement is not even executed while (false) System.out.println(“hello”); B2. do-while loop
Do-while loop mirip dengan while-loop. Pernyataan di dalam akan dieksekusi beberapa kali selama kondisi bernilai benar(true).
do-while loop
Perbedaan antara while dan do-while loop adalah dimana pernyataan di dalam do-while loop akan dieksekusi sedikitnya satu kali. Bentuk pernyataan do-while, do{ statement1; statement2; ... contoh do-while loop: Contoh 1:
int x = 0; do { System.out.println(x); x++; }while (x<10); Contoh ini akan memberikan output 0123456789 pada layar. Contoh 2:
//infinite do{
loop System.out.println(“hello”);
} while (true); Panduan pemrograman:
1.
. Kesalahan pemrograman yang biasa terjadi ketika menggunakan do-while loop adalah lupa untuk menulis titik koma (;) setelah ekspresi while. do{ ... }while(boolean_expression)//- salah>tidak ada titik koma(;)
2.
Seperti pada while loop, pastikan do-while loop anda berhenti pada suatu kondisi
B3. for loop
Pernyataan for loop memiliki kondisi hampir mirip seperti struktur pengulangan sebelumnya yaitu melakukan pengulangan u n tu k m en g eksekusi kode yang sama sebanyak jumlah yang telah ditentukan. Bentuk dari for loop, for (InitializationExpression; LoopCondition; StepExpression){ statement1; statement2; ... } InitializationExpression – inisialisasi dari variabel loop. LoopCondition membandingkan variabel loop pada nil ai batas tertentu. StepExpression melakukan update pada variabel loop. contoh dari for loop, int i; for( i = 0; i < 10; i++ ){ System.out.print(i); } Pada contoh ini, pernyataan i=0 merupakan inisialisasi dari variabel. Selanjutnya, kondisi i<10 diperiksa. Jika kondisi bernilai true, pernyataan di dalam for loop dieksekusi. Kemudian,
ekspresi i++ dieksekusi, lalu akan kembali pada bagian
pemeriksaan terhadap kondisi i<10 lagi.
Kondisi
ini
akan
dilakukan
berulang-ulang sampai mencapai nilai yang salah (false).
C.
Pernyataan Percabangan
Java memberikan tiga bentuk pernyataan percabangan: break, continue dan return. C1. Pernyataan break Pernyataan break memiliki dua bentuk: tidak berlabel (unlabeled) dan berlabel
(labeled). C2. Pernyataan break tidak berlabel (unlabeled) digunakan untuk menghentikan jal ann ya pern yata an switch. Sel
ain
itu
pernyataan
break unlabeled juga bi sa digunakan untuk menghentikan pernyataan-pernyataan for, while atau do-while loop. Contohnya, String names = {"Beah", "Bianca", "Lance", "Belle", "Nico", "Yza", "Gem", "Ethan"}; String searchName = "Yza"; boolean foundName = false; for( int i=0; i< names.length; i++ ){ if( names[i].equals( searchName )){ foundName = true; } } if( foundName ){ System.out.println( searchName + " found!" ); } Else{ System.out.println( searchName + " not found." ); } Pada contoh diatas, jika string “Yza” ditemukan, pengulangan pada for loop akan dihentikan dan akan dilanjutkan ke pernyataan berikutnya yang terletak setelah pernyataan for. C3. P e r n y a t a a n break berlabel
Bentuk label dari pernyataan break akan menghentikan pernyataan d i luarnya, dimana sebelumnya harus diberikan label yang sudah di spesifikasikan pada program pada pernyataan break. Program berikut ini akan mencari nilai dalam array dua dimensi. Terdapat dua pengulangan bersarang (nested loop). Ketika sebuah nilai ditemukan, brea akan menghentikan pernyataan yang diberi label searchLabel yang terletak di luar pernyataan for loop. int numbers = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}}; int searchNum = 5; boolean foundNum = false; searchLabel: for( int i=0; i
}
}
}
if( foundNum ){ System.out.println( searchNum + " found!" ); } else{ } System.out.println( searchNum + " not found!" ); } Pernyataan break menghentikan pern yataan yang diberi label; dan tidak menjalankan aliran kon trol apap un pada label.Aliran kontrol pada
label akan diberikan secara otomatis pada pernyataan
yang terletak dibawah label.
D. Pernyataan Continue
Pernyataan
continue memiliki
dua
bentuk: berlabel
dan
tidak
berlabel. Anda
dapat
menggunakan pernyataan continue u ntuk melanjutkan pengulangan yang sedang dijalankan oleh pernyataan for, while, atau do- while loop.
D1. Pernyataan continue tidak berlabel (unlabeled)
Bentuk pernyataan continue tidak berlabel (unlabeled) akan melewati bagian pernyataan setelah pernyataan
ini
dituliskan dan
memeriksa eksepresi
logika (boolean) yang mengkontrol
pengulangan. Jika ekspresi logika (boolean) masih bernilai true, maka pengulangan tetap dilanjutkan. Pada dasarnya pernyataan ini akan melanjutkan bagian pengulangan pada pernyataan loop. Berikut ini adalah contoh dari penghitungan angka dari “Beah” dalam suatu array. String names[] = {"Beah", "Bianca", "Lance", "Beah"}; Int count = 0; for( int i=0; i
D2. 2 Labeled continue statement
Bentuk pernyataan
continue berlabel (labeled) akan melanjutkan pengulangan yang sedang
terjadi dan dilanjuti ke pengulangan berikutnya dari pernyataan pengulangan yang diberi label (tanda). outerLoop:
for( int i=0; i<5; i++ ){ for( int j=0; j<5; j++ ){ System.out.println("Inside for(j) loop"); //message1 if( j == 2 ) continue outerLoop; } System.out.println("Inside for(i) loop"); //message2 } Pada contoh ini, bagian message2 tidak pernah akan dicetak, karena pernyataan continue akan melewati pengulangan. D3. Pernyataan Return
Pernyataan
return
digunakan
untuk
keluar
dari
sebuah
method.
Pernyataan return
memiliki dua bentuk: memberikan sebuah nilai, dan tidak memberikan nilai.
Untuk memberikan sebuah nilai, cukup berikan nilai (atau ekspresi yang menghasilkan sebuah nilai) sesudah kata return. Contohnya return ++count; atau return "Hello"; Tipe data
dari
nilai yang
diberikan harus
sama
dengan
tipe
dari
method yang dibuat.
Ketika sebuah method void dideklariskan, gunakan bentuk return yang tidak memberikan nilai.
ARRAY
Pengenalan array
baik Java maupun bahasa pemrograman lain, memiliki kemampuan untuk menggunakan satu variabel yang dapat menyimpan sebuah data list, kemudian memanipulasinya dengan lebih efektif. Tipe variabel inilah yang disebut sebagai array.
Sebuah array akan menyimpan beberapa item data dengan tipe data yang sama di dalam sebuah blok memori yang berdekatan yang kemudian dibagai menjadi beberapa slot.
Untuk mendeklarasikan array : ◦
tulis tipe datanya,
◦
diikuti dengan tanda kurung [],
◦
serta diikuti oleh nama identifier.
Contoh: int []ages; atau int ages[]; Setelah proses pendeklarasian, kita harus membuat array dan menentukan berapa panjangnya dengan sebuah pernyataan konstruktor. Instantiation, di Java, ini berarti pembuatan Konstruktor ◦
Untuk meng- instantiate sebuah obyek, kita membutuhkan sebuah konstruktor.
◦
Sebuah konstruktor merupakan sebuah method yang dipanggil untuk membuat object
Untuk meng- instantiate (atau membuat) sebuah array, ◦
Tulislah new keyword,
◦
Diikuti oleh tanda kurung [] yang berisi angka dari elemen yang Anda inginkan pada array tersebut.
◦
Contoh,
//deklarasi int
ages[];
//instantiate ages = new int[100];
object
Untuk mengakses sebuah elemen dalam array , atau mengakses sebagian elemen dari array , Anda menggunakan penomoran yang disebut sebagai index atau subscript. Index atau Subscript ◦
Diberikan kepada tiap anggota array, agar program dapat mengakses anggota dari array.
◦
Dimulai dari nol dan kemudian akan terus bertambah sampai list value dari array tersebut berakhir.
CATATAN: elemen di dalam array anda dimulai dari 0 sampai (sizeOfArray-1)
Untuk mengetahui jumlah elemen di dalam sebuah array, Anda dapat menggunakan length (panjang) field pada array. Panjang field dalam array akan me-return value dari array itu sendiri atau dapat ditulis : arrayName.length
COMMAND LINE ARGUMENT
Sebuah aplikasi Java dapat menerima berapapun jumlah argumen dari command-line
Dengan menggunakan command-line argument, user dapat memanipulasi operasi sebuah aplikasi dalam satu pemanggilan
User memberikan argumen dari command-line pada saat melakukan pemanggilan terhadap aplikasi dan menjalankannya dengan cara menuliskannya setelah nama class
Di Java, pada saat Anda akan melakukan pemanggilan terhadap suatu aplikasi, JRE melakukan passing main() String. argument menuju method pada aplikasi melalui array public static void main( String[] args )
Supaya program Anda mendukung argumen numerik, program tersebut harus mengkonversi argumen dalam String menjadi bentuk numerik
Berikut ini adalah potongan kode yang mengkonversi sebuah argumen menjadi sebuah integer.
int firstArg = 0; if (args.length > 0){ firstArg = Integer.parseInt(args[0]); }
method parseInt() dari class Integer akan menyebabkan NumberFormatException (ERROR) jika format args[0] tidak valid (bukan bentuk numerik)
Bekerja dengan Java Class Library
1. Pengenalan Pemrograman Berorientasi Obyek
OOP berputar pada konsep dari obyek yang merupakan elemen dasar dari program Anda. Ketika kita membandingkan dengan dunia nyata, kita dapat menemukan beberapa obyek disekitar kita seperti mobil, singa, manusia dan seterusnya. Obyek ini dikarakterisasi oleh atribut dan tingkah lakunya . Contohnya, objek sebuah mobil mempunyai atribut tipe transmisi, warna dan manu f aktur. Mempunyai tingkah laku berbelok, mengerem dan berakselerasi. Dengan cara yang sama pula kita dapat mendefinisikan perbedaan sifat dan tingkah laku dari singa. Coba per hatikan tabel dibawah ini sebagai contoh perbandingan : Obyek
Atributt
Tingkah Laku
Mobil
Tipe dari transmisi manufaktur
Berbelok Mengerem
Singa
Berat Warna Lapar atau tidak lapar
roaring Tidur Berburu
Table 1: Example of Real-life Objects Dengan deskripsi ini, obyek pada dunia nyata dapat secara mudah asumsikan sebagai obyek perangkat lunak menggunakan atribut sebagai data dan tingkah laku sebagai method. Data dan method dapat digunakan dalam pemrograman game atau perangkat lunak inter aktif untuk membuat simulasi obyek pada dunia nyata. 2.
Class dan Object
Perbedaan Class dan Object
Class adalah sturktur dasar dari OOP. Class terdiri dari dua tipe dari anggota dimana disebut dengan field (attribut/properti) dan method. Field merupakan tipe data yang dide f inisikan oleh class, sementara method merupakan operasi. Sebuah obyek adalah sebuah instance (keturunan) dari class . Instansiasi Class
Untuk membuat sebuah objek atau sebuah instance pada sebuah class. Kita menggunakan operator new. Sebagai contoh, jika anda ingin membuat instance dari class string, kita menggunakan kode berikut : String str2 = new String(“Hello wor ld!”); Ini juga sama dengan, String str2 = "Hello";
Gambar 1: Instanstiasi Class Variabel Class dan Variabel Method
Selain dari variabel instance, kita juga memungkinkan untuk mendefinisikan variabel da r i class, yang nantinya variabel ini dimiliki oleh class. Ini berarti variabel ini dapat memiliki nilai yang sama untuk semua objek pada class yang sama. Mereka juga disebut static member var iables.
3. Method
Sebuah method adalah bagian-bagian kode yang dapat dipanggil oleh program utama atau dari method lainnya untuk menjalankan fungsi yang spesif ik . Berikut adalah karakteristik dari method : 1. dapat mengembalikan satu nilai atau tidak sama sekali 2. dapat diterima beberapa parameter yang dibutuhkan atau tidak ada parameter sama sekali. Parameter bisa juga disebut sebagai argumen dari f ungsi 3. setelah method telah selesai dieksekusi, dia akan kembali pada method yang memanggilnya . Memanggil Instance dan memberikan Variabel dari Method
Sekarang, untuk mengilustrasikan bagaimana memanggil method, mari kita menggunakan class string sebagai contoh. Anda dapat menggunakan the dokumentasi dari Java API untuk melihat semua method yang tersedia dalam class string. Selanjutnya, kita akan membuat method, kita sendiri. Tapi untuk saat ini, mari terlebih dahulu kita gunakan method yang sudah disediakan oleh Java. Untuk memanggil sebuah instance method, kita dapat menuliskan : nameOfObject.nameOfMethod( parameters ); mari kita mengambil dua contoh method yang ditemukan dalam class St r ing.
Deklarasi method
Definisi
public char charAt(int index)
Mengambil karakter pada indeks ter tentu.
public boolean equalsIgnoreCase (String anotherString)
Membandingkan antar String, tidak case sensitive .
Table 3: Method dari Class String
Menggunakan method :
String char character H
str1 = "Hello"; x = str2.charAt(0); //will return the //simpan pada variabel x
String str2 = "hello"; //return boolean boolean result = str1.equalsIgnoreCase( str1 ); Pemberian Variabel Dalam Method
Pada contoh kita sebelumnya , kita sudah pernah mecoba melewati variabel pada method . Walaupun kita belumdapat membedakan antara perbedaan tipe variabel yang dibe r ikan ( passing ) ke method dalam Java. Ada dua tipe data variabel passing pada method, yang pertama adalah pass-by-value dan yang kedua adalah pass-by- r ef er ence.
•
Pass-by-Val ue
Ketika pass-by-values terjadi, method membuat sebuah salinan dari nilai variable yang dikirimkan ke method. Walaupun demikian, method tidak dapat secara langsung memodifikasi nilai variabel pengirimnya meskipun parameter salinannya sudah dimodif ikasi nilainya di dalam method. Secara default, semua tipe data primitif ketika dilewatkan pada sebuah method adalah pass-by-value. •
Pass-by-reference
Ketika sebuah pass-by-reference terjadi, alamat memori dari nilai pada sebuah va r iabel dilewatkan pada saat pemanggilan method. Hal ini berarti bahwa method menyalin alamat memori dari variabel yang dilewatkan pada method. Ini tidak seperti pada pass-by-value , method dapat memodifikasi variabel asli dengan menggunakan alamat memori te r sebut, meskipun berbeda nama variabel yang digunakan dalam method dengan variabel aslinya , kedua variabel ini menunjukkan lokasi dari data yang sama. Memanggil Method Static
Method Static adalah method yang dapat dipakai tanpa harus menginisialisasi suatu class (maksudnya tanpa menggunakan variabel terlebih dahulu). Method static hanya dimiliki oleh class dan tidak dapat digunakan oleh instance (atau objek) dari suatu class. Method static dibedakan dari method yang dapat instance di dalam suatu class oleh kata kunci static. Untuk memanggil method static, ketik: Classname.staticMethodName(params); 4. Lingkup Variabel
Selain nama dan tipe data yang dimiliki oleh variabel, suatu variable juga mempunyai jangkauan. Jangkauan ini menentukan kemampuan program dalam mengakses va r iable. Jangkauan ini juga menentukan siklus hidup dari suatu variable atau berapa lama var iable itu berada dalam memori. Jangkauan ini ditentukan oleh letak pendeklarasian variabel di dalam pr ogr am. Untuk memudahkan anda mengenai jangkauan variabel, kita bedakan variabel yang terletak di dalam kurawal {.....}. Blok kode yang terdapat di luar kurung kurawal bisa disebut juga dengan blok luar, dan blok kode yang terletak di dalam kurung kurawal disebut dengan blok dalam . Pada saat variabel di deklarasikan, hanya boleh terdapat sebuah variabel dengan identifier/nama dapat di deklarasikan di dalam sebuah jangkauan. Hal ini maksudnya jika kamu mempunyai deklarasi be r ikut, { int test = 10; int test = 20; } 5. Casting, Converting dan Comparing Objects
Pada bagian ini, kita akan belajar bagaimana mengunakan typecasting . Typecasting atau casting adalah proses konversi data dari tipe data tertentu ke tipe data yang lain. Kita juga akan belajar bagaimana mengkonversi tipe data primitif ke obyek dan sebaliknya. Kemudian, pada akhirnya kita akan belajar bagaimana membandingkan sebuah obyek .
Casting Tipe data Primitif
Casting antara tipe primitif dapat mengijinkan Anda untuk mengkonversikan sebuah nilai dari sebuah tipe data tertentu kepada tipe primitif yang lain. Hal ini biasanya te r jadi diantara tipe data angka. Ada sebuah tipe data primitif yang tidak dapat kita casting, yaitu tipe data boolean. Sebagai contoh dari typecasting adalah pada saat Anda menyimpan sebuah variabel dengan tipe data integer k epada sebuah variabel dengan tipe data double. Sebagai contoh: int numInt = 10; double numDouble = numInt; //implicit cast Pada contoh ini dapat kita lihat bahwa, walaupun variabel yang dituju (double) memiliki ukuran yang lebih besar daripada nilai yang akan kita tempatkan didalamnya, data tersebut secara implisit dapat kita casting ke tipe data double . Casting Obyek
Instances dari class-class juga dapat di ubah ke instance-instance dari class-class yang lain dengan satu batasan: class-class sumber dan tujuan harus terhubung dengan mekanisme inheritance; satu class harus menjadi sebuah subclass terhadap class yang lain. Kita akan menjelaskan mengenai inheritance pada bab selanjutnya . Sejalan dengan konversi nilai primitif ke tipe yang lebih besar ukurannya, bebe r apa object mungkin tidak membutuhkan untuk ubah secara explisit. Faktanya karena semua subclass terdiri atas informasi yang sama seperti class induknya. Sebagai contoh, jika terdapat method yang memiliki dua argumen, satu tipe object dan tipe window yang lain. Anda dapat melewatkan instance dari class apapun untuk ar gumen object karena semua class java adalah subclass dari object . Untuk argumen window, anda dapat melewatkannya subclassnya, seperti dialog , FileDialog , dan frame. Hal ini dapat dituliskan dalam program dan bukan hanya dalam memanggil method. Jika anda mempunyai variabel yang didefinisikan sebagai class window, anda dapat member ikan obyek dari class tersebut atau dari subclassnya u ntuk dijadikan variabel tanpa konve r si.
Figure 2: Contoh HierarchyClass Convert Tipe Primitive ke Object Dan Sebaliknya
Satu hal yang tidak dapat Anda lakukan pada beberapa keadaan yaitu konve r si dari sebuah obyek ke sebuah tipe data primitif, atau sebaliknya. Tipe-tipe dat a primitif dan obyek adalah sesuatu yang sangat berbeda dalam Java, dan Anda tidak bisa secara langsung konversi diantara keduanya . Sebagai sebuah alternatif, package java.lang yang terdiri atas class-class yang berhubungan untuk setiap tipe data
primitif yaitu: Float, Boolean, Byte, dan sebagainya. Kebanyakan dari class-class ini memiliki nama yang sama seperti tipe datanya, kecuali jika nama classnya diawali dengan huruf besar (Short -> sor t, Double-> double dan sebagainya). Selain itu terdapat dua class yang memiliki nama berbeda dari tipe data primitifnya yaitu: Character digunakan untuk variabel char dan Integer untuk variabel int. (Disebut dengan Wrapper Classes) Java merepresentasikan tipe data p r i mi ti f dan versi classnya dengan sangat ber beda. Sebuah program tidak akan berhasil tercompile jika Anda menggunakan hanya satu ketika yang lain juga dipe r lukan. Menggunakan class-class yang berhubungan untuk setiap tipe primitif, anda dapat membuat sebuah obyek yang memiliki nilai yang sama . Membandingkan dua Obyek
Dalam diskusi kita sebelumnya, kita mempelajari tentang operator untuk membandingkan nilai — sama dengan, tidak sama dengan, lebih kecil daripada, dan sebagainya. Operator ini hanya bekerja pada tipe primitif, bukan pada obyek. Jika Anda berusaha untuk menggunakan nilai selain tipe data primitif sebagai operand, compiler Java akan menghasilkan err or. Salah satu contoh untuk aturan ini adalah operator untuk persamaan : == (sama dengan) dan != (tidak samadengan), ketika operator ini dimasukkan ke sebuah obyek, operator ini tidak akan melakukan apa yang sebenarnya diinginkan. Penggunaan operator ini akan memeriksa kesamaan antara satu obyek ke obyek lain, bukan nilainya . Untuk membandingkan instance dari sebuah, Anda harus mengimplementasikan method khusus dalam class anda dan memanggil method tersebut. Sebuah contoh yang baik untuk ini adalah class St r ing. Sangat mungkin memiliki dua object String yang memiliki nilai yang sama. Namun, jika Anda menggunakan operator == untuk membandingkan obyek ini, kedua obyek ter sebut akan menghasilkan hasil yang tidak sama. Walaupun isinya ternyata sama akan tetapi pada kenyataannya mereka bukan merupakan obyek yang sama . Untuk melihat jika dua object String memiliki nilai yang sama, sebuah method dari class yaitu equals() digunakan. Method ini akan memeriksa setiap karakter dalam string dan mengembalikan nilai true jika dua obyek string memiliki nilai yang sama. Bagian pertama dari program mendeklarasikan dua variabel (str1 dan str2), membe r ikan kalimat "Free the bound periodicals." untuk str1, dan kemudian memberi nilai tersebut untuk str2. Seperti yang Anda pelajari sebelumnya, str1 dan str2 sekarang menunjuk ke alamat obyek yang sama, dan uji kesamaan membuktikan hal te r sebut. str2 = new Str ing(str 1); Pada bagian yang kedua dari program ini, anda membuat obyek String baru dengan nilai yang sama dari str1 dan memberikkanya ke str2. Sekarang Anda memiliki dua obyek st r ing yang berbeda yaitu str1 dan str2, keduanya memilki nilai yang sama. Ketika dilakukan pengujian untuk melihat jika mereka obyek yang sama dengan menggunakan operator == , akan dihasilkan nilai: false — kedua obyek bukan obyek yang sama dalam memory. ketika dilakukan pengujian menggunakan method equals() maka akan dihasilkan : true – kedua obyek tersebut memiliki nilai yang sama .
Gambar 5: Alamat sekarang mengarah pada object ya ng berbeda
Menentukan Class dari sebuah Object
Jika kita ingin mengetahui class dari sebuah obyek dapat dilakukan dengan cara : 1. Method getClass() mengembalikan sebuah obyek Class (dimana Class itu sendiri merupakan sebuah class) yang memilki sebuah method getName(). Selanjutnya getName() akan mengembalikan sebuah string yang mewakili nama class . Sebagai contoh, String name = key.getClass().getName();
2. operator InstanceOf
instanceOf memiliki dua operand: obyek pada sebelah kiri dan nama class pada sebelah kanan. Pernyataan ini mengembalikan nilai true atau false tergantung pada benar/salah obyek adalah sebuah instance dari penamaan class atau beber apa subclass milik class ter sebut. Sebagai contoh, boolean ex1 = "Texas" instanceof String; // t r ue Object pt = new Point(10, 10); boolean ex2 = pt instanceof String; // f alse
Membuat Class Sendiri Mendefinisikan Class Anda
Sebelum menulis class Anda, pertama pertimbangkan dimana Anda akan menggunakan class dan bagaimana class tersebut akan digunakan. Pertimbangkan pula nama yang tepat dan tuliskan seluruh informasi atau properti yang ingin Anda isi pada class. Jangan sampai terlupa untuk menuliskan secara urut method yang akan Anda gunakan dalam class. Dalam pendefinisian class, dituliskan : class { * * * } dimana : adalah sebuah access modifier , yang dapat dikombinasikan dengan tipe modi f ier lain. Pada bagian ini, kita akan membuat sebuah class yang berisi record dari siswa. Jika kita telah mengidentifikasikan tujuan dari pembuatan class, maka dapat dilakukan pember ian nama yang sesuai. Nama yang tepat pada class ini adalah StudentRecord . Untuk mendefinisikan class, kita tuliskan : public class StudentRecord { //area penulisan kode selanjutnya } dimana, Public Class
-
Class ini dapat diakses dari luar package Keyword yang digunakan untuk pembuatan class dalam Java
Public StudentRecord
-
Class ini dapat diakses dari luar package Identifier yang menjelaskan class
Deklarasi Atribut
Dalam pendeklarasian atribut, kita tuliskan : [= ]; Langkah selanjutnya adalah mengurutkan atribut yang akan diisikan pada class. Untuk setiap informasi, urutkan juga tipe data yang yang tepat untuk digunakan. Contohnya, Anda tidak mungkin menginginkan untuk menggunakan tipe data integer untuk nama siswa, atau tipe data string pada nilai siswBerikut ini adalah contoh informasi yang akan diisikan pada class StudentRecord :
name
- String address - String age - Int math grade - double english grade - double science grade double average grade - double
Instance Variable
Jika kita telah menuliskan seluruh atribut yang akan diisikan pada class, selanjutnya kita akan menuliskannya pada kode. Jika kita menginginkan bahwa atribut – atribut te r sebut adalah unik untuk setiap object (dalam hal ini untuk setiap siswa), maka kita har us mendeklarasikannya sebagai instance variable : Sebagai contoh : public class StudentRecord { private String name; private String address; private int age; private double mathGrade; private double englishGrade; private double scienceGrade; private double average; }
//area penulisan kode selanjutnya
dimana, private disini menjelaskan bahwa variabel tersebut hanya dapat diakses oleh class itu sendiri. Object lain tidak dapat menggunakan variabel tersebut secara langsung. Kita akan membahas tentang kemampuan akses pada pembahasan selanjutnya . Class Variable atau Static Variables
Disamping instance variable, kita juga dapat mendeklarasikan class variable atau var iabel yang dimiliki class sepenuhnya. Nilai pada variabel ini sama pada semua object di class yang sama. Anggaplah kita menginginkan jumlah dari siswa yang dimiliki dari seluruh class, kita dapat mendeklarasikan satu static variable yang akan menampung nilai tersebut. Kita beri nama variabel tersebut dengan nama studentCount. Berikut penulisan static variable : public class StudentRecord { //area deklarasi instance variables private static int studentCount;
}
//area penulisan kode selanjutnya Deklarasi Methods
Sebelum kita membahas method apa yang akan dipakai pada class, mari kita per hatikan penulisan method secara umum. Dalam pendeklarasian method , kita tuliskan : (*) { * }
dimana, dapat menggunakan beberapa modifier yang ber beda dapat berupa seluruh tipe data, termasuk void identifier atas class ::= [,] Accessor Methods
Untuk mengimplementasikan enkapsulasi, kita tidak menginginkan sembarang object dapat mengakses data kapan saja. Untuk itu, kita deklarasikan atribut dari class sebagai private. Namun, ada kalanya dimana kita menginginkan object lain untuk dapat mengakses data private. Dalam hal ini kita gunakan accessor methods. Accessor Methods digunakan untuk membaca nilai variabel pada class, baik ber upa instance maupun static. Sebuah accessor method umumnya dimulai dengan penulisan get. Method ini juga mempunyai sebuah return value.
Sebagai contoh, kita ingin menggunakan accessor method untuk dapat membaca nama, alamat, nilai bahasa Inggris, Matematika, dan ilmu pasti dari siswa . public class StudentRecord { private String name; : : public String getName(){ return name; } }
public String ()
- Menjelaskan bahwa method tersebut dapat diakses dari object luar class - Tipe data return value dari method tersebut bertipe Str ing getName- Nama dari method - Menjelaskan bahwa method tidak memiliki parameter apapun
Perhatikan bahwa return type dari method harus sama dengan tipe data seperti data pada pernyataan return. Anda akan mendapatkan pesan kesalahan sebagai berikut bila tipe data yang digunakan tidak sama : StudentRecord.java:14: incompatible types found : int required: java.lang.String return age; ^ 1 error
Mutator Methods
Bagaimana jika kita menghendaki object lain untuk mengubah data? Yang dapat kita lakukan adalah membuat method yang dapat memberi atau mengubah nilai variable dalam class, baik itu berupa instance maupun static. Method semacam ini disebut dengan mutator methods. Sebuah mutator method umumnya tertulis set.
Mari kita perhatikan salah satu dari implementasi mutator method : public class StudentRecord { private String name; : : public void setName( String temp ){ name = temp; } } dimana, public - Menjelaskan bahwa method ini dapat dipanggil object luar class void tidak menghasilkan return value setName - Nama dari method (String temp) - Parameter yang akan digunakan pada method
- Method ini
Perlu diingat bahwa mutator methods tidak menghasilkan return value. Namun ber isi beberapa argumen dari program yang akan digunakan oleh method . Multiple Return Statements
Anda dapat mempunyai banyak return values pada sebuah method selama mereka tidak pada blok program yang sama. Anda juga dapat menggunakan konstanta disamping variabel sebagai return value. Sebagai contoh, perhatikan method berikut ini : public String getNumberInWords( int num ){ String defaultNum = "zero";
}
if( num == 1 ){ return "one"; //mengembalikan sebuah konstanta } else if( num == 2){ return "two"; //mengembalikan sebuah konstanta } // mengembalikan sebuah variabel return defaultNum;
Static Methods
Kita menggunakan static method untuk mengakses static variable studentCount. public class StudentRecord { private static int studentCount;
}
public static int getStudentCount(){ return studentCount; }
dimana, public - Menjelaskan bahwa method ini dapat diakses dari object luar class static - Method ini adalah static dan pemanggilannya menggunakan [namaclass].[namaMethod]. Sebagai contoh : studentRecord.getStudentCount Int - Tipe return dari method. Mengindikasikan method tersebut har us mempunyai return value berupa integer public method ()
- Menjelaskan bahwa method ini dapat diakses dari object luar class getStudentCount - Nama dari - Method ini tidak memiliki parameter apapun
Pada deklarasi di atas, method getStudentCount() akan selalu menghasilkan return value 0 jika kita tidak mengubah apapun pada kode program untuk mengatur nilainya. Kita akan membahas pengubahan nilai dari studentCount pada pembahasan const ru ctor . Reference this
Reference this digunakan untuk mengakses instance variable yang dibiaskan oleh parameter. Untuk pemahaman lebih lanjut, mari kita perhatikan contoh pada method setAge. Dimisalkan kita mempunyai kode deklarasi berikut pada method setAge. public void setAge( int age ){ age = age; //SALAH!!! }
Nama parameter pada deklarasi ini adalah age, yang memiliki penamaan yang sama dengan instance variable age. Parameter age adalah deklarasi terdekat dari method , sehingga nilai dari parameter tersebut akan digunakan. Maka pada pernyataan : age = age; kita telah menentukan nilai dari parameter age kepada parameter itu sendiri. Hal ini sangat tidak kita kehendaki pada kode program kita. Untuk menghindari kesalahan semacam ini, kita gunakan metode referensi this. Untuk menggunakan tipe referensi ini, kita tuliskan : this. Sebagai contoh, kita dapat menulis ulang kode hingga tampak sebagai berikut : public void setAge( int age ){ this.age = age; }
Method ini akan mereferensikan nilai dari parameter age kepada instance variable dar i object StudentRecor d.
Overloading Methods
Dalam class yang kita buat, kadangkala kita menginginkan untuk membuat method dengan nama yang sama namun mempunyai fungsi yang berbeda menurut parameter yang digunakan. Kemampuan ini dimungkinkan dalam pemrograman Java, dan dikenal sebagai overloading method .
Overloading method mengijinkan sebuah method dengan nama yang sama namun memiliki parameter yang berbeda sehingga mempunyai implementasi dan return value yang ber beda pula. Daripada memberikan nama yang berbeda pada setiap pembuatan method , overloading method dapat digunakan pada operasi yang sama namun berbeda dalam implementasinya. Sebagai contoh, pada class StudentRecord kita menginginkan sebuah method yang akan menampilkan informasi tentang siswa. Namun kita juga menginginkan operasi penampilan data tersebut menghasilkan output yang berbeda menurut parameter yang digunakan. Jika pada saat kita memberikan sebuah parameter berupa string, hasil yang ditampilkan adalah nama, alamat dan umur dari siswa, sedang pada saat kita memberikan 3 nilai dengan tipe double, kita menginginkan method tersebut untuk menampilkan nama dan nilai dari siswa . Untuk mendapatkan hasil yang sesuai, kita gunakan overloading method di dalam deklar asi class StudentRecor d. public void print( String temp ){ System.out.println("Name:" + name); System.out.println("Address:" + address); System.out.println("Age:" + age); } public void print(double eGrade, double mGrade, double sGrade) System.out.println("Name:" + name); System.out.println("Math Grade:" + mGrade); System.out.println("English Grade:" + eGrade); System.out.println("Science Grade:" + sGrade); } Jika kita panggil pada method utama (main) :
public static void main( String[] args ) { StudentRecord annaRecord = new StudentRecord(); annaRecord.setName("Anna"); annaRecord.setAddress("Philippines"); annaRecord.setAge(15); annaRecord.setMathGrade(80); annaRecord.setEnglishGrade(95.5); annaRecord.setScienceGrade(100); //overloaded methods annaRecord.print( annaRecord.print( }
annaRecord.getName() ); annaRecord.getEnglishGrade(), annaRecord.getMathGrade(), annaRecord.getScienceGrade());
Kita akan mendapatkan output pada panggilan pertama sebagai berikut : Name:Anna Address:Philippines Age:15
Kemudian akan dihasilkan output sebagai berikut pada panggilan kedua : Name:Anna Math Grade:80.0 English Grade:95.5 Science Grade:100.0 Jangan lupakan bahwa overloaded method memiliki property sebagai berikut : 1. Nama yang sama 2. Parameter yang ber beda 3. Nilai kembalian (return) bisa sama ataupun ber beda Deklarasi Constructor
Telah tersirat p ada pembahasan sebelumnya, Constructor sangatlah penting pada pembentukan sebuah object . Constructor adalah method dimana seluruh inisialisasi object ditempatkan. Berikut ini adalah property dari Constructor : 1. Constructor memiliki nama yang sama dengan class 2. Sebuah Constructor mirip dengan method pada umumnya, namun hanya informasi – informasi berikut yang dapat ditempatkan pada header sebuah constructor, scope atau identifikasi pengaksesan (misal: public), nama dari konstuktor dan par ameter. 3. Constructor tidak memiliki return value 4. Constructor tidak dapat dipanggil secara langsung, namun harus dipanggil dengan menggunakan operator new pada pembentukan sebuah class.
Untuk mendeklarasikan constructor, kita tulis , (*) { * } Default Constructor
Setiap class memiliki default constructor. Sebuah default constructor adalah const r uctor yang tidak memiliki parameter apapun. Jika sebuah class tidak memiliki constructor apapun , maka sebuah default constructor akan dibentuk secara implisit : Sebagai contoh, pada class StudentRecord, bentuk default constructor akan terlihat sepe r ti dibawah ini : public StudentRecord() { //area penulisan kode } Overloading Constructor
Seperti telah kita bahas sebelumnya, sebuah constructor juga dapat dibentuk menjadi overloaded . Dapat dilihat pada contoh sebagai berikut : public StudentRecord(){ //area inisialisasi kode; }
Menggunakan Constructor
Untuk menggunakan constructor, kita gunakan kode – kode sebagai berikut : public static void main( String[] args ) { //membuat 3 objek StudentRecord annaRecord=new StudentRecord("Anna"); StudentRecord beahRecord=new StudentRecord("Beah","Philippines"); StudentRecord crisRecord=new StudentRecord(80,90,100); }
//area penulisan kode selanjtunya
Sebelum kita lanjutkan, mari kita perhatikan kembali deklarasi variabel static studentCount yang telah dibuat sebelumnya. Tujuan deklarasi studentCount adalah untuk menghitung jumlah object yang dibentuk pada class StudentRecord. Jadi, apa yang akan kita lakukan selanjutnya adalah menambahkan nilai dari studentCount setiap kali setiap pembentukan object pada class StudentRecord. Lokasi yang tepat untuk memodifikasi dan menambahkan nilai studentCount terletak pada constructor-nya, karena selalu dipanggil setiap kali objek te r bentuk . Sebagai contoh : public StudentRecord(){ //letak kode inisialisasi studentCount++; //menambah student } public StudentRecord(String temp){ this.name = temp; studentCount++; //menambah student } public StudentRecord(String name, String address){ this.name = name; this.address = address; studentCount++; //menambah student } public StudentRecord(double mGrade, double eGrade, double sGrade){ mathGrade = mGrade; englishGrade = eGrade; scienceGrade = sGrade; studentCount++; //menambah student } Pemanggilan Constructor Dengan this()
Pemanggilan constructor dapat dilakukan secara berangkai, dalam arti Anda dapat memanggil constructor di dalam constructor lain. Pemanggilan dapat dilakukan dengan referensi this(). Perhatikan contoh kode sebagai berikut : 1: public StudentRecord(){ 2: this("some string"); 3: 4: } 5: 6: public StudentRecord(String temp){
7: this.name = temp; 8: } 9: 10: public static void main( String[] args ) 11: { 12: 13: StudentRecord annaRecord = new StudentRecord(); 14: } Dari contoh kode diatas, pada saat baris ke 13 dipanggil akan memanggil constructor dasa r pada baris pertama. Pada saat baris kedua dijalankan, baris tersebut akan menjalankan constructor yang memiliki parameter String pada baris ke-6 . Beberapa hal yang patut diperhatikan pada penggunaan this() : 1. Harus dituliskan pada baris pertama pada sebuah constr uctor 2. Hanya dapat digunakan pada satu definisi constructor. Kemudian metode ini dapat diikuti dengan kode – kode berikutnya yang r elevan Packages
Packages dalam JAVA berarti pengelompokan beberapa class dan interface dalam satu unit. Fitur ini menyediakan mekanisme untuk mengatur class dan interface dalam jumlah banyak dan menghindari konflik pada penamaan . Mengimport Packages
Supaya dapat meggunakan class yang berada diluar package yang sedang dikerjakan, Anda harus mengimport package dimana class tersebut berada. Pada dasarnya, seluruh p r ogr am JAVA mengimport package java.lang.*, sehingga Anda dapat menggunakan class seper ti String dan Integer dalam program meskipun belum m engimport package sama sekali. Penulisan import package dapat dilakukan seperti dibawah ini : import ; Sebagai contoh, bila Anda ingin menggunakan class Color dalam package awt, Anda har us menuliskan import package sebagai berikut : import java.awt.Color; import java.awt.*; Baris pertama menyatakan untuk mengimport class Color secara spesifik pada package, sedangkan baris kedua menyatakan mengimport seluruh class yang terkandung dalam package java.awt . Cara lain dalam mengimport package adalah dengan menuliskan referensi package secar a eksplisit. Hal ini dilakukan dengan menggunakan nama package untuk mendeklar asikan object sebuah class : java.awt.Color color; Membuat Package
Untuk membuat package, dapat dilakukan dengan menuliskan : package ; Anggaplah kita ingin membuat package dimana class StudentRecord akan ditempatkan bersama dengan class – class yang
lain dengan nama package schoolClasses. Langkah pertama yang harus dilakukan adalah membuat folder dengan nama schoolClasses. Salin seluruh class yang ingin diletakkan pada package dalam folder ini. Kemudian tambahkan kode deklarasi package pada awal file. Sebagai contoh : package schoolClasses;
public class StudentRecord { private String name; private String a ddress; private int age; }
Package juga dapat dibuat secara bersarang. Dalam hal ini Java Interpreter menghendaki struktur mengandung class eksekusi untuk disesuaikan dengan st r uktur package.
direktori
yang
Pengaturan CLASSPATH
Diasumsikan package schoolClasses terdapat pada direktori C:\. Langkah selanjutnya adalah mengatur classpath untuk menunjuk direktori tersebut sehingga pada saat akan dijalankan, JVM dapat mengetahui dimana class tersebut ter simpan. Access Modifiers
methods, kita ingin untuk mengimplementasikan beberapa Pada saat membuat, mengatur properties dan class macam larangan untuk mengakses data. Sebagai contoh , jika Anda ingin beberapa atribut hanya dapat diubah hanya dengan method tertentu, tentu Anda ingin menyembunyikannya dari object lain pada class. Di JAVA, implementasi ter sebut disebut i ers. dengan access mod i f Terdapat 4 macam access modifiers di JAVA, yaitu : public, private, protected dan default . 3 tipe akses pertama tertulis secara ekplisit pada kode untuk mengindikasikan tipe akses , sedangkan yang keempat yang merupakan tipe default , tidak diperlukan penulisan keywor d atas tipe. Akses Default (Package Accessibility)
Tipe ini mensyaratkan bahwa hanya class dalam package yang sama yang memiliki hak akses terhadap variabel dan methods dalam class. Tidak terdapat keyword pada tipe ini. Sebagai contoh : public class StudentRecord { //akses dasar terhadap variabel int name;
}
//akses dasar terhadap metode String getName(){ return name; }
Pada contoh diatas, variabel nama dan method getName() dapat diakses dari object lain berada pada package yang sama dengan letak dari f ile StudentRecor d.
selama
objec
tersebut
Akses Public
Tipe ini mengijinkan seluruh class member untuk diakses baik dari dalam dan luar class. Object apapun yang memiliki interaksi pada class memiliki akses penuh terhadap member dari tipe ini. Sebagai contoh :
public class StudentRecord { //akses dasar terhadap variabel public int name;
}
//akses dasar terhadap metode public String getName(){ return name; }
Dalam contoh ini, variabel name dan method getName() dapat diakses dari object lain. Akses Protected
Tipe ini hanya mengijinkan class member untuk diakses oleh method dalam class ter sebut dan elemen – elemen subclass. Sebagai contoh : public class StudentRecord { //akses pada variabel protected int name; //akses pada metode protected String getName(){ return name; } } Pada contoh diatas, variabel name dan method getName() hanya dapat diakses oleh method internal class dan subclass dari class StudentRecord. Definisi subclass akan dibahas pada bab selanjutnya .
Akses Private
Tipe ini mengijinkan pengaksesan class hanya dapat diakses oleh class dimana tipe ini dibuat. Sebagai contoh : public class StudentRecord { //akses dasar terhadap variabel private int name;
}
//akses dasar terhadap metode private String getName() { return name; }
Pada contoh diatas, variabel name dan method getName() hanya dapat diakses oleh method internal class ter sebut.
Pewarisan, Polimorfisme, dan Interface
1.
Pewarisan
Dalam Java, semua class, termasuk class yang membangun Java API, adalah subclasses dari superclass Object. Contoh hirarki class diperlihatkan di bawah ini . Beberapa class di atas class utama dalam hirarki class dikenal sebagai supe r class. Sementara beberapa class di bawah class pokok dalam hirarki class dikenal sebagai subclass dari class ter sebut.
Gambar 1: Hirarki cl ass
Pewarisan adalah keuntungan besar dalam pemrograman berbasis object karena suatu sifat atau method didefinisikan dalam superclass, sifat ini secara otomatis diwariskan dar i semua subclasses. Jadi, Anda dapat menuliskan kode method hanya sekali dan mer eka dapat digunakan oleh semua subclass. Subclass hanya perlu mengimplementasikan perbedaannya sendiri dan induknya . Mendefinisikan Superclass dan Subclass
Untuk memperoleh suatu class, kita menggunakan kata kunci extend. Untuk mengilustrasikan ini, kita akan membuat contoh class induk. Dimisalkan kita mempunyai class induk yang dinamakan Person . public class Person { protected String protected String
name; address;
/** * Default constructor */ public Person(){ System.out.println(“Inside Person:Constructor”); name = ""; address = ""; } /** * Constructor dengan dua parameter */ public Person( String name, String address ){
this.name = name; this.address = address; } /** * Method accessor */ public String getName(){ return name; } public String getAddress(){ return address; } public void setName( String name ){ this.name = name; } public void setAddress( String add ){ this.address = add; } } Perhatikan bahwa atribut name dan address dideklarasikan sebagai protected. Alasannya kita melakukan ini yaitu, kita inginkan atribut-atribut ini untuk bisa diakses oleh subclasses dari superclassess. Jika kita mendeklarasikannya sebagai private, subclasses tidak dapat menggunakannya. Catatan bahwa semua properti dari superclass yang didekla r asikan sebagai public, protected dan default dapat diakses oleh subclasses-nya. Kata Kunci Super
Subclass juga dapat memanggil constructor secara eksplisit dari superclass terdekat. Hal ini dilakukan dengan pemanggil construktor super. Pemanggil constructor super dalam constructor dari subclass akan menghasilkan eksekusi dari superclass constructor yang bersangkutan, berdasar dari argumen sebelumnya . Sebagai contoh, pada contoh class sebelumnya. Person dan Student, kita tunjukkan contoh dari pemanggil constructor super. Diberikan kode berikut untuk Student , public Student(){ super( "SomeName", "SomeAddress" ); System.out.println("Inside Student:Constructor"); } Kode ini memanggil constructor kedua dari superclass terdekat (yaitu Person) dan mengeksekusinya. Ada beberapa hal yang harus diingat ketika me nggunakan pemanggil constuktor supe r : 1. Pemanggil super() HARUS DIJADIKAN PERNYATAAN PERTAMA DALAM constr uctor. 2. Pemanggil super() hanya dapat digunakan dalam definisi constr uctor. 3. Termasuk constructor this() dan pemanggil super() TIDAK BOLEH TERJADI DALAM constructor YANG SAMA. Pemakaian lain dari super adalah untuk menunjuk anggota dari supe r class(seper ti reference this). Sebagai contoh,
public Student() { super.name = “somename”; super.address = “some address”; }
Overriding Method
Untuk beberapa pertimbangan, terkadang class asal perlu mempunyai implementasi berbeda dari method yang khusus dari superclass tersebut. Oleh karena itulah, method overriding digunakan. Subclass dapat mengesampingkan method yang didefinisikan dalam superclass dengan menyediakan implementasi baru dari method te r sebut. Misalnya kita mempunyai implementasi berikut untuk method getName dalam supe r class Person, public class Person { : : public String getName(){ System.out.println("Parent: getName"); return name; } : } Jadi, ketika kita meminta method getName dari object class Student, method ove rr idde akan dipanggil, keluarannya akan menjadi, Student: getName
Method final dan class final
Dalam Java, juga memungkinkan untuk mendeklarasikan class-class yang tidak lama menjadi subclass. Class ini dinamakan class final. Untuk mendeklarasikan class untuk menjadi final kita hanya menambahkan kata kunci final dalam deklarasi class. Sebagai contoh, jika kita ingin class Person untuk dideklarasikan final, kita tulis , public final class Person { //area kode } Beberapa class dalam Java API dideklarasikan secara final untuk memastikan sifatnya tidak dapat di- override. Contohcontoh dari class ini adalah Integer, Double, dan St r ing. Ini memungkinkan dalam Java membuat method yang tidak dapat dioverride. Method ini dapat kita panggil method final. Untuk mendeklarasikan method untuk menjadi final, kita tambahkan kata kunci final ke dalam deklarasi method. Method static juga secara otomatis final. Ini artinya Anda tidak dapat membuatnya ove rr ide.
Polimorfisme
Sekarang, class induk Person dan subclass Student dari contoh sebelumnya, kita tambahkan subclass lain
dari Person yaitu Employee. Di bawah ini adalah hie r ar kinya,
Person
Student
Em ployee
Gambar 3: Hirarki dari class induk Person
Dalam Java, kita dapat membuat referensi yang merupakan tipe dari superclass ke sebuah object dari subclass tersebut. Sebagai contohnya, public static main( String[] args ) { Person ref; Student studentObject = new Student(); Employee = new Employee();
employeeObject
ref = studentObject; //Person menunjuk kepada // object Student //beberapa kode di sini } Sekarang dimisalkan kita punya method getName dalam superclass Person kita, dan kita override method ini dalam kedua subclasses Student dan Employee, public class Person { public String getName(){ System.out.println(“Person Name:” + name); return name; } } public class Student extends Person { public String getName(){ System.out.println(“Student Name:” + name); return name; } } public class Employee extends Person { public String getName(){ System.out.println(“Employee Name:” + name); return name; } Kembali ke method utama kita, ketika kita mencoba memanggil method get Name da r i reference Person ref, method getName dari object Student akan dipanggil. Sekarang, jika kita berikan ref ke object Employee, method getName dari Employee akan dipanggil. public static main( String[] args )
{ Person
ref;
Student studentObject = new Student(); Employee = new Employee();
employeeObject
ref = studentObject; //Person menunjuk kepada // object Student String temp = ref.getName(); //getName dari Student //class dipanggil System.out.println( temp ); ref = employeeObject; //Person menunjuk kepada // object Employee String temp = ref.getName(); //getName dari Employee //class dipanggil System.out.println( temp );
} Kemampuan dari reference untuk mengubah sifat menurut object apa yang dijadikan acuan dinamakan polimorfisme. Polimorfisme menyediakan multiobject dari subclasses yang berbeda untuk diperlakukan sebagai object dari superclass tunggal, secara otomatis menunjuk method yang tepat untuk menggunakannya ke particular object ber dasar subclass yang termasuk di dalamnya. Abstract Class
Misalnya kita ingin membuat superclass yang mempunyai method tertentu yang be r isi implementasi, dan juga beberapa method yang akan di-overridden oleh subclasses nya . Sebagai contoh, kita akan membuat superclass bernama LivingThing. class ini mem punyai method tertentu seperti breath, eat, sleep, dan walk. Akan tetapi, ada beberapa method di dalam superclass yang sifatnya tidak dapat digeneralisasi. Kita ambil contoh, method walk . Tidak semua kehidupan berjalan(walk) dalam cara yang sama. Ambil manusia sebagai misal, kita manusia berjalan dengan dua kaki, dimana kehidupan lainnya seperti anjing berjalan dengan empat kaki. Akan tetapi, beberapa ciri umum dalam kehidupan sudah biasa, itulah kenapa kita inginkan membuat superclass umum dalam hal ini.
Gambar 4: Class abstract Kita dapat membuat superclass yang mempunyai beberapa method dengan implementasi sedangkan yang lain tidak. Class jenis ini yang disebut dengan class abst r act. Sebuah class abstract adalah class yang tidak dapat di-instantiate. Seringkali muncul di atas hirarki class pemrograman berbasis object, dan mendefinisikan keseluruhan aksi yang mungkin pada object dari seluruh subclasses dalam class . Method ini dalam class abstract yang tidak mempunyai implementasi dinamakan method abstract. Untuk membuat
method abstract, tinggal menulis deklarasi method tanpa tubuh class dan digunakan menggunakan kata kunci abstract. Contohnya: public abstract void someMethod(); Sekarang mari membuat contoh class abst r act. public abstract class LivingThing { public void breath(){ System.out.println("Living Thing breathing..."); } public void eat(){ System.out.println("Living Thing eating..."); } /** * abstract method walk * Kita ingin method ini di-overridden oleh subclasses */ public abstract void walk();
} Ketika class meng-extend class abstract LivingThing, dibutuhkan untuk override method abstract walk(), atau lainnya, juga subclass akan menjadi class abstract, oleh karena itu tidak dapat di-instantiate. Contohnya , public class Human extends LivingThing { public void walk(){ System.out.println("Human walks..."); } } Jika class Human tidak dapat overridde method walk, kita akan menemui pesan e rr or berikut ini, Human.java:1: Human is not abstract and does not override abstract method walk() in LivingThing public class Human extends LivingThing ^ 1 error Interface Interface adalah jenis khusus dari blok yang hanya berisi method signature(atau constant). Interface mendefinisikan sebuah(signature) dari sebuah kumpulan method tanpa tubuh .
Interface mendefinisikan sebuah cara standar dan umum dalam menetapkan sifat-sifat dar i class-class. Mereka menyediakan class-class, tanpa memperhatikan lokasinya dalam hi r ar ki class, untuk mengimplementasikan sifat-sifat yang umum. Dengan catatan bahwa interface-interface juga menunjukkan polimorfisme, dikarenakan program dapat memanggil method interface dan versi yang tepat dari method yang akan dieksekusi tergantung da r i tipe object yang melewati pemanggil method interf ace.
Kenapa Kita Memakai Interface?
Kita akan menggunakan interface
jika kita ingin
class yang
tidak
ber hubungan
mengimplementasikan
method yang sama. Melalui interface-interface, kita dapat menangkap kemiripan diantara class yang tidak berhubungan tanpa membuatnya seolah- olah class yang be r hubungan. Mari kita ambil contoh class Line dimana berisi method yang menghitung panjang da r i garis dan membandingkan object Line ke object dari class yang sama. Sekarang, misalkan kita punya class yang lain yaitu MyInteger dimana berisi method yang membandingkan object MyInteger ke object dari class yang sama. Seperti yang kita lihat disini, kedua class-class mempunyai method yang mirip dimana membandingkan mereka dari object lain dalam tipe yang sama, tetapi mereka tidak berhubungan sama sekali. Supaya dapat menjalankan cara untuk memastikan bahwa dua class-class ini mengimplementasikan beberapa method dengan tanda yang sama, kita dapat menggunakan sebuah inte rf ace untuk hal ini. Kita dapat membuat sebuah class interface, katakanlah interface Relation dimana mempunyai deklarasi method pembanding. Relasi interface dapat didekla r asikan sebagai, public interface Relation { public boolean isGreater( Object a, Object b); public boolean isLess( Object a, Object b); public boolean isEqual( Object a, Object b); } Alasan lain dalam menggunakan interface pemrograman object adalah untuk menyatakan sebuah interface pemrograman object tanpa menyatakan classnya. Seperti yang dapat kita lihat nanti dalam bagian Interface vs class, kita dapat benar-benar menggunakan inte rf ace sebagai tipe data. Pada akhirnya, kita perlu menggunakan interface untuk pewarisan model jamak dimana menyediakan class untuk mempunyai lebih dari satu superclass. Pewarisan jamak tidak ditunjukkan di Java, tetapi ditunjukkan di bahasa berorientasi object lain seperti C++. Interface vs. Class Abstract
Berikut ini adalah perbedaan utama antara sebuah interface dan sebuah class abst r act: method interface tidak punya tubuh, sebuah interface hanya dapat mendef inisikan konstanta dan interface tidak langsung mewariskan hubungan dengan class istimewa lainnya, mereka didefinisikan secara independent. Interface vs. Class
Satu ciri umum dari sebuah interface dan class adalah pada tipe mereka berdua. Ini ar tinya bahwa sebuah interface dapat digunakan dalam tempat-tempat dimana sebuah class dapat digunakan. Sebagai contoh, diberikan class Person dan interface PersonInterface, ber ikut deklarasi yang benar : PersonInterface Person();
pi = new Person(); Person
pc = new
Bagaimanapun, Anda tidak dapat membuat instance dari sebuah inte rf ace. Contohnya: PersonInterface
pi = new PersonInterface(); //COMPILE //ERROR!!! Ciri umum lain adalah baik interface maupun class dapat mendefinisikan method . Bagaimanapun, sebuah interface tidak punya sebuah kode implementasi sedangkan class memiliki salah satunya. Membuat Interface
Untuk membuat interface, kita tulis , public interface [InterfaceName]
{ //beberapa method tanpa isi } Sebagai contoh, mari kita membuat sebuah interface yang mendefinisikan hubungan anta r a dua object menurut urutan asli dari object. public interface Relation { public boolean isGreater( Object a, Object b); public boolean isLess( Object a, Object b); public boolean isEqual( Object a, Object b); } Sekarang, penggunaan interface, kita gunakan kata kunci implements. Contohnya, /** * Class ini mendefinisikan segmen garis */ public class Line implements Relation { private double x1; private double x2; private double y1; private double y2; public Line(double x1, double x2, double y1, double y2){ this.x1 = x1; this.x2 = x2; this.y1 = y1; this.y2 = y2; } public double getLength(){ double length = Math.sqrt((x2-x1)*(x2-x1) + (y2-y1)* (y2-y1)); return length; } public boolean isGreater( Object a, Object b){ double aLen = ((Line)a).getLength(); double bLen = ((Line)b).getLength(); return (aLen > bLen); } public boolean isLess( Object a, Object b){ double aLen = ((Line)a).getLength(); double bLen = ((Line)b).getLength(); return (aLen < bLen); } public boolean isEqual( Object a, Object b){ double aLen = ((Line)a).getLength(); double bLen = ((Line)b).getLength(); return (aLen == bLen); } } Ketika class Anda mencoba mengimplementasikan sebuah interface, selalu pastikan bahwa Anda mengimplementasikan semuamethod dari interface, jika tidak, Anda akan menemukan kesalahan ini, Hubungan dari Interface ke Class
Seperti yang telah kita lihat dalam bagian sebelumnya, class dapat mengimplementasikan sebuah interface selama kode implementasi untuk semua method yang didefinisikan dalam interface te r sedia.
Hal lain yang perlu dicatat tentang hubungan antara interface ke class-class yaitu, class hanya dapat mengEXTEND SATU superclass, tetapi dapat mengIMPLEMENTASIkan BANYAK interface. Sebuah contoh dari sebuah class yang mengimplementasikan interface adalah, public class Person implements PersonInterface, LivingThing, WhateverInterface { //beberapa kode di sini } Pewarisan Antar Interface
Interface bukan bagian dari hirarki class. Bagaimanapun, interface dapat mempunyai hubungan pewarisan antara mereka sendiri. Contohnya, misal kita punya dua inte rf ace StudentInterface dan PersonInterface. Jika StudentInterface meng-extend PersonInterface, maka ia akan mewariskan semua deklarasi method dalam Pe r sonInterf ace. public interface PersonInterface { ... } public interface StudentInterface extends PersonInterface { ... }
Dasar Exception Handling 1.
Apa itu Exception?
Exception adalah sebuah peristiwa yang menjalankan alur proses normal pada program. Pe r istiwa ini biasanya berupa kesalahan(error) dari beberapa bentuk. Ini disebabkan program kita be r akhir tidak nor mal. Beberapa contoh dari exception yang Anda mungkin jumpai pada latihan-latihan sebelumnya adalah: exception ArrayIndexOutOfBounds, yang terjadi jika kita mencoba mengakses elemen array yang tidak ada, atau NumberFormatException, yang terjadi ketika kita mencoba melalui parameter bukan angka dalam method Integer. par seInt.
2.
Menangani Exception