Anda di halaman 1dari 88

ALGORITMA DAN PROGRAM

1. Definisi Algoritma dan Program

Algoritma adalah urutan langkah-langkah logis penyelesaian masalah yang disusun secara sistematis dan logis. Kata logis merupakan kata kunci dalam 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 pemrograman. Beberapa pakar memberi formula bahwa: Algoritma merupakan hasil pemikiran konseptual, supaya dapat dilaksanakan oleh komputer, algoritma harus ditranslasikan ke dalam notasi bahasa pemrograman. Ada beberapa hal yang harus diperhatikan pada translasi tersebut, yaitu: a. b. c. d. e.
f.

Pendeklarasian variabel Pemilihan tipe data. Pemakaian instruksi-instruksi Aturan sintaksis Tampilan hasil Cara pengoperasian compiler atau interpreter.

2. Struktur Data Sruktur adalah kumpulan dari beberapa variable yang dinyatakan dalam sebuah nama yang memliki sifat bahwa setiap variable dapat 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 dasar dan relasi antar obyek struktur data ini lebih luas dari pada tipe data. Beberapa struktur data yang sering digunakan adalah : Linked list / senarai berantai ( Double dan single Linked list Stack (Tumpukan) Quene (Antrean) Hash Table

Tree Graph

3. Pengenalan Bahasa Pemograman Java Komputer adalah Sebuah mesin yang melaksanakan berbagai macam tugas berdasarkan perintah khusus. Pemembahas tentang pemrograman dengan bahasa pemrograman Java, dan menggunakan Netbeans sebagai Integrated Development 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 - Running aplikasi, 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


-

CPU (Central Processing Unit) Memori : Memori Utama (Main Memory) Memori Sekunder (Secondary Memory) I/O Device

b. 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) seperti hard

disk, tetapi software sendiri bersifat tidak dapat diukur (intangible)

data yang komputer gunakan dapat berupa apapun yang program perlukan Program Tindakan seperti instruksi untuk processor.
c. 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 tatabahasa 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 Pemrograman Tingkat Tinggi Bahasa Assembly Tingkat Rendah Bahasa Pemrograman Tingkat Tinggi

PENGENALAN JAVA
1. Sejarah Singkat 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 sebuahkedai kopi yang kemudian dengan tidak sengaja salah satu dari mereka 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

Kebutuhan terhadap platform bahasa yang bersifat free, yang dapat diimplementasikan pada produk elektronik untuk konsumen, seperti toaster dan kulkas. Salah satu dari proyek pertama yang dibangun menggunakan java remote control hand-held pribadi yang bernama Star 7. Pada saat yang sama, World Wide Web dan Internet sedang populer. Gosling et. al. menyadari bahwa Java bisa juga digunakan untuk pemrograman pada internet.
3. Yang Termasuk Teknologi JAVA

a.

Sebuah Bahasa Pemrograman 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 operasi. Perkembangan Java tidak hanya terfokus pada satu sistem

operasi, tetapi dikembangkan untuk berbagai sistem operasi dan bersifat open source.
b.

Sebuah Development Environment Sebagai sebuah peralatan pembangun, teknologi Java menyediakan banyak compiler, interpreter, penyusun dokumentasi, paket kelas dan

tools :

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 kelaskelas 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 environment pemrograman yang terintegrasi pada aplikasi. menyediakan developer GUI, text atau code editor, compiler/interpreter dan debugger.

Integrated Development Environment (IDE)

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 dahulu
Langkah 5 : Melakukan proses compile program

Save. Jika folder MYJAVAPROGRAMS belum ada, buat folder tersebut terlebih

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 pengetikan. 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 Buka terminal (lihat langkah bagaimana menjalankan terminal pada

Menjalankan NetBeans menggunakan terminal

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

Dasar-Dasar Pemrograman
1.

Menganalisa program Java Pertama program Java

Sekarang, kita akan mencoba untuk menganalisa pertama : public class Hello { /** * My first java program

*/ 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 dari kode yang kita tulis. Jadi, kita dapat menulis kode kita sebagai berikut : 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

atau

berikut, 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 berurutan.
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

Style Komentar C-style atau juga disebut komentar beberapa baris diawali dengan /* dan diakhiri 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 javadoc

Khusus khusus digunakan untuk men-generate dokumentasi

javadoc Komentar HTML untuk program Java Anda. Anda dapat menciptakan komentar javadoc dengan memulai baris dengan /** dan mengakhirinya dengan */. Seperti Komentar C_style, dapat juga menjangkau beberapa dapat terdiri atas komentar Anda. Sebagai contoh, /**
3.

baris. Komentar

ini

juga

tag-tag untuk menambahkan lebih banyak informasi pada

Pernyataan dalam Java dan Blok adalah satu atau lebih baris kode yang diakhiri dengan

Pernyataan

semicolon. Sebagai contoh untuk pernyataan tunggal adalah System.out.println(Hello world); 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 dari 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 Keywords).

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 termasuk kata-kata khusus,
6.

Java

Literals Literals adalah tanda bahwa tidak terjadi perubahan atau konstan. Macam-macam

literals dalam Java adalah : Integer Literals, Floating-Point Literals, Boolean Literals, Character Literals dan String Literals.
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 oleh0.
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 false.
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

diantaranya 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 harus memiliki ciri berada dalam tanda single quotes( ). Sebagai contoh, a \t //Huruf a //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 merupakan 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 077 //nilai desimal 2 //angka 0 pada awal pernyataan mengindikasikan nilai oktal //karakter 0x mengindikasikan nilai heksadesimal

0xBACC

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 berikut: Integer Length Name or Range Type 8 bits byte 7 7 -2 to 2 -1 16 bits 32 bits 64 bits short int long -2 -2 -2 15 31 63 to 2 to 2 15 -1

31

-1 -1

to 2

63

d.

Floating Point float dan

double Tipe Floating point memiliki double sebagai default tipe datanya. Floating-point literal 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

berikut:
Panjang Float 32 bits 64 bits Nama atau Tipe float double -2 -2 31 63 Range to 2 31 -1 -1

to 2

63

8. 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 identifier.

a.

Deklarasi dan Inisialisasi Variabel <data tipe> <name> [=initial value];

Untuk deklarasi variabel adalah sebagai berikut, Catatan: Nilainya berada diantara <> adalah nilai yang disyaratkan, sementara nilai dalam tanda [] bersifat optional. Berikut ini adalah contoh program yang mendeklarasikan dan menginisialisasi beberapa variabel, 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 di inisialisasi //to 0.0 double grade = 0.0; } } b. Menampilkan Data Variabel Untuk mengeluarkan nilai dari variabel yang diinginkan, kita dapat

menggunakan perintah sebagai berikut, System.out.print ln() System.out.print () Berikut ini adalah contoh program, 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.print(), Yang pertama menambahkan baris baru pada akhir data untuk dikeluarkan, sementara selanjutnya tidak. Perhatikan tersebut, System.out.print("Hello "); System.out.print("world! "); Pernyataan tersebut akan menghasilkan output berikut ini pada layar, Hello world! Sekarang perthatikan pernyataan berikut, System.out.println("Hello pernyataan

"); System.out.println("world!" ); Pernyataan ini akan menghasilkan output sebagai berikut pada layar, H e l l o w o r l d ! Variabel Reference dan Variabel Primitif

d.

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 berada. Variabel Reference adalah variabel yang menyimpan alamat dalam lokasi memori. Yang menunjuk ke lokasi memori dimana data sebenarnya berada. Ketika Anda mendeklarasikan variabel pada class tertentu, Anda sebenarnya mendeklarasikan reference variable dalam bentuk objek dalam classnya tersebut. Sebagai contoh, Apabila kita mempunyai dua variabel dengan tipe data int dan String. 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 berikut. Memory Variable Da

Address 1001 : 1563

Name num 10 : Address(2000)

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, operator 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 pernyataan.
a.

Operator Aritmatika

Berikut ini adalah dasar operator aritmatika yang dapat digunakan untuk membuat suatu program Java,
Operator + * / Penggunaan op1 + op2 op1 * op2 op1 / op2 Keterangan Menambahkan op1 dengan op2 Mengalikan op1 dengan op2 Membagi op1 dengan op2

% -

op1 % op2 op1 - op2

Menghitung sisa dari pembagian op1 dengan 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 program, 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 pernyataan, count = count + 1; pernyataan tersebut sama dengan, count++; //increment nilai count dengan nilai 1 contoh,

Operator ++

Penggunaan op++ Menambahkan nilai mengevaluasi nilai diincrementasi/ditambahkan Menambahkan nilai mengevaluasi nilai diincrementasi/ditambahkan Mengurangkan nilai mengevaluasi nilai didecrementasi/dikurangkan Mengurangkan nilai mengevaluasi nilai didecrementasi/dikurangkan

Keterangan 1 op 1 op 1 op 1 op padaop; sebelum pada setelah padaop; sebelum pada setelah op; op;

++

++op

--

op--

--

--op

operator Increment dan Decrement Operator increment dan decrement dapat ditempatkan sebelum atau sesudah operand. 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 ditempatkan 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 false. Operator > >= < <= == != Penggunaan op1 > op2 op1 >= op2 op1 < op2 op1 <= op2 op1 == op2 Keterangan op1 lebih besar dari op2 op1 lebih besar dari atau sama dengan op2 op1 kurang dari op2 op1 kurang dari atau sama dengan 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 dari pernyataan tersebut? Diberikan pernyataan, exp1 && exp2 suatu

&& akan mengevaluasi pernyataan exp1, dan segera mengembalikan nilai false dan menyatakan bahwa exp1 bernilai false. Jika exp1 bernilai false, operator tidak akan pernah mengevaluasi exp2 karena hasil operasi operator akan menjadi false tanpa memperhatikan 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 j = 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 TRUE TRUE FALSE FALSE x2 TRUE FALSE TRUE FALSE Table Kebenaran untuk | dan || Perbedaan dasar antara operator || dan | adalah bahwa || mendukung short-circuit evaluations (atau proses evaluasi sebagian), sementara | tidak. diberikan suatu pernyataan, exp1 || exp2 || akan mengevaluasi pernyataan exp1, dan segera mengembalikan nilai true dan menyatakan bahwa exp1 bernilai true. Jika exp1 bernilai true, operator tidak akan pernah mengevaluasi exp2 karena hasil dari operasi operator akan bernilai true tanpa memperhatikan nilai dari exp2. Sebaliknya,operator | selalu mengevaluasi kedua nilai dari 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 j = 10; boolean test= false; //demonstrasi || test = (i < 10) || (j++ > 9); System.out.println(i); System.out.println(j); System.out.println(test); //demonstrasi | Hasil TRUE TRUE TRUE FALSE

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 TRUE TRUE FALSE FALSE x2 TRUE FALSE TRUE FALSE Hasil FALSE TRUE TRUE FALSE

Tabel kebenaran untuk ^ Hasil operasi operator exclusive OR adalah TRUE, jika dan hanya jika satu operand bernilai 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

operator not ; x1 Hasil 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 berikut, 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 false. Jika exp1 bernilai true, exp2 merupakan hasil operasi. Jika bernilai false, kemudian exp3 merupakan hasil operasinya.

Sebagai contoh, diberikan code sebagai berikut, 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 ?: bekerja,

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 precedence, ((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 java.io.InputStreamReader; java.io.IOException; public class GetInputFromKeyboard { public static void main( String[] args ){ BufferedReader dataIn = new BufferedReader(new InputStreamReader( System.in) ); String name = ""; System.out.print("Please Enter Your Name:"); try{ name = dataIn.readLine(); import

}catch( IOException e ) { System.out.println("Error!"); }

System.out.println("Hello " + name +"!"); } } penjelasan setiap baris dari code tersebut: Statement, import java.io.BufferedReader; import import java.io.InputStreamReader; java.io.IOException; Java Application Programming 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, java.io package mengandung class-class yang memungkinkan program 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, public class GetInputFromKeyboard { public static void main( String[] args ){ Pernyataan ini mendeklarasikan class bernama GetInputFromKeyboard dan kita mendeklarasikan method main.

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 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( } 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(); method diatas memanggil dataIn.readLine(), mendapatkan input dari user dan IOException e ){ System.out.println("Error!")

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 dengan menggunakan class JoptionPane yang didapatkan dari javax.swing package. JoptionPane memudahkan memunculkan dialog box standard yang memberikan kepada user sebuah nilai atau menginformasikan 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 sebuah penyataan logika (true/false) atau variabel bertipe boolean. ){

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 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 seperti ini mengijinkan kita untuk membuat seleksi persyaratan yang lebih kompleks.

else bersifat opsional dan dapat dihilangkan. Pada contoh yang ditampilkan di atas, jika boolean_expression1 bernilai true, maka program akan mengeksekusi bernilai 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{

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 kata kunci

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;

... Break; }

... Default: statement1; statement2; //

// //block n

switch_expression

adalah ekspresi konstanta

integer uni k dari nilai

atau

karakter

dan adalah

case_selector1, case_selector2

dan seterusnya

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 switch bisa jadi tidak memiliki blok kode default. CATATAN: 1. Tidak seperti 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. pernyataan

B. Struktur Kontrol Perulangan

Struktur kontrol pengulangan adalah berupa pernyataan dari Java yang mengijinkan kita untuk mengeksekusi blok tertentu yang diinginkan. Ada code tiga 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 do-while loop akan dieksekusi beberapa kali selama kondisi bernilai benar(true). 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{ } while (true); Panduan pemrograman: loop System.out.println(hello);

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 nilai 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 Kondisi ini akan dilakukan pemeriksaan terhadap kondisi i<10 lagi.

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 annya pern yataan switch. Sel 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<numbers.length; i++ ){ for( int j=0; j<numbers[i].length; j++ ){ if( searchNum == numbers[i][j] ){ foundNum = true; break searchLabel; ain itu pernyataan

break unlabeled juga bi sa digunakan untuk menghentikan pernyataan-pernyataan for, while atau

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 apapun pada label.Aliran kontrol pada yang terletak dibawah label. D. Pernyataan Continue Pernyataan continue memiliki dua bentuk: berlabel dan tidak berlabel. Anda dapat menggunakan pernyataan continue untuk 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<names.length; i++ ){ if( !names[i].equals("Beah") ){ continue; //skip next statement } count++; } System.out.println("There are " + count + " Beahs in the list"); label akan diberikan secara otomatis pada pernyataan

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 //instantiate ages = new int[100];

ages[]; 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 argument menuju method main() pada aplikasi melalui array String. 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 manufaktur. Mempunyai tingkah laku berbelok, mengerem dan berakselerasi. Dengan cara yang sama pula kita dapat mendefinisikan perbedaan sifat dan tingkah laku dari singa. Coba perhatikan tabel dibawah ini sebagai contoh perbandingan : Obyek Mobil Singa Atributt Tipe dari transmisi manufaktur Warna Berat Warna Lapar atau tidak lapar Jinak atau liar 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 interaktif untuk membuat simulasi obyek pada dunia nyata. 2. Class dan Object Tingkah Laku Berbelok Mengerem Mempercepat roaring Tidur Berburu

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 didefinisikan 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 world!); 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 dari 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 variables.

3. Method Sebuah method adalah bagian-bagian kode yang dapat dipanggil oleh program utama atau dari method lainnya untuk menjalankan fungsi yang spesifik. 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 fungsi 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 String. Deklarasi method public char charAt(int index) public boolean equalsIgnoreCase (String anotherString) Definisi Mengambil karakter pada indeks tertentu. 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 diberikan (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-reference.

Pass-by-Value 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 dimodifikasi 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 variabel 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 tersebut, 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 variable. Jangkauan ini juga menentukan siklus hidup dari suatu variable atau berapa lama variable itu berada dalam memori. Jangkauan ini ditentukan oleh letak pendeklarasian variabel di dalam program. 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 berikut, { 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 terjadi 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 kepada 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, beberapa 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 argumen 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 memberikan obyek dari class tersebut atau dari subclassnya untuk dijadikan variabel tanpa konversi.

Figure 2: Contoh Hierarchy Class Convert Tipe Primitive ke Object Dan Sebaliknya Satu hal yang tidak dapat Anda lakukan pada beberapa keadaan yaitu konversi dari sebuah obyek ke sebuah tipe data primitif, atau sebaliknya. Tipe-tipe data 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 -> sort, 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 berbeda. Sebuah program tidak akan berhasil tercompile jika Anda menggunakan hanya satu ketika yang lain juga diperlukan. 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 error. 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 String. Sangat mungkin memiliki dua object String yang memiliki nilai yang sama. Namun, jika Anda menggunakan operator == untuk membandingkan obyek ini, kedua obyek tersebut 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), memberikan 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 tersebut. str2 = new String(str1); 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 string 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 yang 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 beberapa subclass milik class tersebut. Sebagai contoh, boolean ex1 = "Texas" instanceof String; // true Object pt = new Point(10, 10); boolean ex2 = pt instanceof String; // false

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 : <modifier> class <name> { <attributeDeclaration>* <constructorDeclaration>* <methodDeclaration>* } dimana : <modifier> adalah sebuah access modifier, yang dapat dikombinasikan dengan tipe modifier 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 pemberian 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 Public StudentRecord Deklarasi Atribut Dalam pendeklarasian atribut, kita tuliskan : <modifier> <type> <name> [= <default_value>]; 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 : Class ini dapat diakses dari luar package Keyword yang digunakan untuk pembuatan class dalam Java Class ini dapat diakses dari luar package Identifier yang menjelaskan class

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 tersebut adalah unik untuk setiap object (dalam hal ini untuk setiap siswa), maka kita harus 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; } 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 variabel 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 //area penulisan kode selanjutnya

Sebelum kita membahas method apa yang akan dipakai pada class, mari kita perhatikan penulisan method secara umum. Dalam pendeklarasian method, kita tuliskan : <modifier> <returnType> <name>(<parameter>*) { <statement>* }

dimana, <modifier> dapat menggunakan beberapa modifier yang berbeda <returnType> dapat berupa seluruh tipe data, termasuk void <name> identifier atas class <parameter> ::= <tipe_parameter> <nama_parameter>[,] 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 berupa instance maupun static. Sebuah accessor method umumnya dimulai dengan penulisan get<namaInstanceVariable>. 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 String 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<namaInstanceVariabel>.

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 berisi 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;

} dimana,

public static int getStudentCount(){ return studentCount; }

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 harus 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 constructor. 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.<namaInstanceVariable> 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 dari object StudentRecord.

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 berbeda 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 deklarasi class StudentRecord. 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 berbeda 3. Nilai kembalian (return) bisa sama ataupun berbeda 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 parameter. 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, <modifier> <className> (<parameter>*) { <statement>* } Default Constructor Setiap class memiliki default constructor. Sebuah default constructor adalah constructor 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 seperti 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 terbentuk. 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 dasar 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 constructor 2. Hanya dapat digunakan pada satu definisi constructor. Kemudian metode ini dapat diikuti dengan kode kode berikutnya yang relevan 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 program JAVA mengimport package java.lang.*, sehingga Anda dapat menggunakan class seperti String dan Integer dalam program meskipun belum mengimport package sama sekali. Penulisan import package dapat dilakukan seperti dibawah ini : import <namaPaket>; Sebagai contoh, bila Anda ingin menggunakan class Color dalam package awt, Anda harus 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 secara eksplisit. Hal ini dilakukan dengan menggunakan nama package untuk mendeklarasikan object sebuah class : java.awt.Color color; Membuat Package Untuk membuat package, dapat dilakukan dengan menuliskan : package <packageName>; 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 address; private int age; } Package juga dapat dibuat secara bersarang. Dalam hal ini Java Interpreter menghendaki struktur mengandung class eksekusi untuk disesuaikan dengan struktur package. 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 tersimpan. Access Modifiers Pada saat membuat, mengatur properties dan class methods, kita ingin untuk mengimplementasikan beberapa 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 tersebut disebut dengan access modifiers. 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 keyword 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; } selama objec tersebut direktori yang

Pada contoh diatas, variabel nama dan method getName() dapat diakses dari object lain berada pada package yang sama dengan letak dari file StudentRecord. 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 tersebut 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 tersebut.

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 superclass. Sementara beberapa class di bawah class pokok dalam hirarki class dikenal sebagai subclass dari class tersebut.

Gambar 1: Hirarki class Pewarisan adalah keuntungan besar dalam pemrograman berbasis object karena suatu sifat atau method didefinisikan dalam superclass, sifat ini secara otomatis diwariskan dari semua subclasses. Jadi, Anda dapat menuliskan kode method hanya sekali dan mereka 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 dideklarasikan 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 menggunakan pemanggil constuktor super: 1. Pemanggil super() HARUS DIJADIKAN PERNYATAAN PERTAMA DALAM constructor. 2. Pemanggil super() hanya dapat digunakan dalam definisi constructor. 3. Termasuk constructor this() dan pemanggil super() TIDAK BOLEH TERJADI DALAM constructor YANG SAMA. Pemakaian lain dari super adalah untuk menunjuk anggota dari superclass(seperti 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 tersebut. Misalnya kita mempunyai implementasi berikut untuk method getName dalam superclass 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 overridde 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 String. 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 override.

Polimorfisme Sekarang, class induk Person dan subclass Student dari contoh sebelumnya, kita tambahkan subclass lain

dari Person yaitu Employee. Di bawah ini adalah hierarkinya,

Person

Student

Employee

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(); ref = studentObject; //Person menunjuk kepada // object Student } //beberapa kode di sini employeeObject

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 getName dari 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; employeeObject Student studentObject = new Student(); Employee = new Employee(); 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 berdasar subclass yang termasuk di dalamnya. Abstract Class Misalnya kita ingin membuat superclass yang mempunyai method tertentu yang berisi implementasi, dan juga beberapa method yang akan di-overridden oleh subclasses nya. Sebagai contoh, kita akan membuat superclass bernama LivingThing. class ini mempunyai 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 abstract. 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 abstract. 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 error 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 dari class-class. Mereka menyediakan class-class, tanpa memperhatikan lokasinya dalam hirarki 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 dari tipe object yang melewati pemanggil method interface. Kenapa Kita Memakai Interface? Kita akan menggunakan interface jika kita ingin class yang tidak berhubungan mengimplementasikan

method yang sama. Melalui interface-interface, kita dapat menangkap kemiripan diantara class yang tidak berhubungan tanpa membuatnya seolah- olah class yang berhubungan. Mari kita ambil contoh class Line dimana berisi method yang menghitung panjang dari 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 interface untuk hal ini. Kita dapat membuat sebuah class interface, katakanlah interface Relation dimana mempunyai deklarasi method pembanding. Relasi interface dapat dideklarasikan 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 interface 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 abstract: method interface tidak punya tubuh, sebuah interface hanya dapat mendefinisikan 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 artinya bahwa sebuah interface dapat digunakan dalam tempat-tempat dimana sebuah class dapat digunakan. Sebagai contoh, diberikan class Person dan interface PersonInterface, berikut deklarasi yang benar: PersonInterface Person(); pi = new Person(); Person pc = new

Bagaimanapun, Anda tidak dapat membuat instance dari sebuah interface. Contohnya: 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] PersonInterface

{ //beberapa method tanpa isi } Sebagai contoh, mari kita membuat sebuah interface yang mendefinisikan hubungan antara 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 tersedia.

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 interface StudentInterface dan PersonInterface. Jika StudentInterface meng-extend PersonInterface, maka ia akan mewariskan semua deklarasi method dalam PersonInterface. 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. Peristiwa ini biasanya berupa kesalahan(error) dari beberapa bentuk. Ini disebabkan program kita berakhir tidak normal. 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.parseInt. 2. Menangani Exception

Untuk menangani exception dalam Java, kita gunakan blok try-catch-finally. Apa yang kita lakukan dalam program kita adalah kita menempatkan pernyataan yang mungkin menghasilkan exception dalam blok ini. Bentuk umum dari blok try-catch-finally adalah, try{ //tulis pernyataan yang dapat mengakibatkan exception //dalam blok ini } catch( <exceptionType1> <varName1> ){ //tulis aksi apa dari program Anda yang dijalankan jika ada //exception tipe tertentu terjadi } Exception dilemparkan selama eksekusi dari blok try dapat ditangkap dan ditangani dalam blok catch. Kode dalam blok finally selalu di-eksekusi. Berikut ini adalah aspek kunci tentang sintak dari konstruksi try-catch-finally: Notasi blok bersifat perintah Setiap blok try, terdapat satu atau lebih blok catch, tetapi hanya satu blok finally. Blok catch dan blok finally harus selalu muncul dalam konjungsi dengan blok try, dan diatas urutan Blok try harus diikuti oleh paling sedikit satu blok catch ATAU satu blok finally, atau keduanya. Setiap blok catch mendefinisikan sebuah penanganan exception. Header dari blok catch harus membawa satu argumen, dimana exception pada blok tersebut akan ditangani. Exception harus menjadi class pelempar atau satu dari subclassesnya. Marilah mengambil contoh kode yang mencetak argumen kedua ketika kita mencoba menjalankan kode menggunakan argumen command-line. Perkirakan, tidak ada pengecekan dalam kode Anda untuk angka dari argumen dan kita hanya mengakses argumen kedua args[1] segera, kita akan mendapatkan exception berikut. Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 1 at ExceptionExample.main(ExceptionExample.java:5) Untuk mencegah kejadian ini, kita dapat menempatkan kode ke dalam blok try-catch. Blok finally hanya sebagai pilihan lain saja. Sebagai contoh, kita tidak akan menggunakan blok finally. public class ExceptionExample { public static void main( String[] args ){ try{ System.out.println( args[1] ); }catch( ArrayIndexOutOfBoundsException exp ){ System.out.println("Exception caught!"); } } }

Anda mungkin juga menyukai