Anda di halaman 1dari 65

UPT PELATIHAN KERJA JEMBER 2018

KATA PENGANTAR

Dengan rasa syukur Alhamdulillah kami panjatkan kehadirat Tuhan

Yang Maha Kuasa atas limpahan Rahmat-Nya sehingga buku saduran dengan

judul “PEMROGRAMAN JAVA TINGKAT DASAR” ini dapat kami

selesaikan.

Buku ini disusun hanya untuk kalangan sendiri yaitu UPT Pelatihan

Kerja Jember sekaligus sebagai sarana untuk meningkatkan kualitas

profesionalime Instruktur agar tidak ketinggalan dengan kemajuan teknologi yang

semakin hari semakin berkembang dengan pesat.

Buku ini masih terbuka untuk berbagai perbaikan-perbaikan demi

peningkatan kualitas penulisan maupun isinya. Oleh karena itu penulis

mengharapkan adanya masukan-masukan saran maupun kritik dari pembaca.

Penulis juga mengucapkan banyak terima kasih atas dukungan semua pihak yang

telah mendukung pembuatan buku ini sehingga buku ini dapat terselesaikan.

Semoga buku ini bermanfaat bagi penulis maupun pembaca lainnya

untuk meningkatkan pengetahuan, ketrampilan dan produktivitas kerja dalam

rangka berperan serta untuk pembangunan ketenagakerjaan.

Jember, September 2018

Penulis,

pemrograman java tingkat dasar I


UPT PELATIHAN KERJA JEMBER 2018

DAFTAR ISI

KATA PENGANTAR.............................................................................................i
DAFTAR ISI..........................................................................................................ii
BAB I PENDAHULUAN.......................................................................................1
1.1 Latar Belakang..........................................................................................1
1.2 Tujuan........................................................................................................1
BAB II PENGENALAN JAVA.............................................................................3
2.1 Sejarah Singkat Perkembangan JAVA......................................................3
2.2 Kriteria “Kertas Putih” Java......................................................................4
2.3 JAVA dan C++..........................................................................................7
2.4 Tata Bahasa.............................................................................................13
2.5 Tipe Data.................................................................................................16
2.6 Operator...................................................................................................18
2.7 Control Flow............................................................................................20
2.7.1 Percabangan.........................................................................................20
2.7.2 Perulangan (Looping)..........................................................................22
2.8 Class dan Object......................................................................................23
2.9 Pendefinisian Class..................................................................................25
2.10 Inheritance...............................................................................................27
2.11 Method overiding....................................................................................28
2.12 This..........................................................................................................29
2.13 Abstract...................................................................................................31
2.14 Static method...........................................................................................32
2.15 Final.........................................................................................................33
2.16 Interface...................................................................................................34
2.17 Polymorphism.........................................................................................36
2.18 Operator Instanceof.................................................................................37
2.19 Package....................................................................................................38
2.20 Penanganan Eksepsi................................................................................41
2.20.1 Dasar-dasar penanganan Eksepsi.....................................................42
2.20.2 Tipe Eksepsi.....................................................................................43

pemrograman java tingkat dasar II


UPT PELATIHAN KERJA JEMBER 2018

2.20.3 Eksepsi Yang Tidak Dapat Ditangkap.............................................43


2.20.4 Try dan Catch...................................................................................44
2.20.5 Throw...............................................................................................44
2.20.6 Throws.............................................................................................46
2.20.7 Finally..............................................................................................46
2.21 Multithreading.........................................................................................48
2.21.1 Multithreading dan Java...................................................................49
2.21.2 Daur Hidup sebuah Thread..............................................................51
DAFTAR PUSTAKA...........................................................................................55
COVER BUKU YANG DISADUR.....................................................................56
DAFTAR ISI BUKU YANG DISADUR..............................................................58

pemrograman java tingkat dasar III


BAB I PENDAHULUAN

I.1 Latar Belakang

Buku Saduran ini bertujuan memberi bekal pengetahuan dan ketrampilan

kepada peserta pelatihan tentang dasar pemrograman menggunakan bahasa Java

yang merupakan sub materi dari Pemrograman. Pemrograman merupakan mata

pelajaran yang membekali siswa agar dapat membangun sebuah aplikasi atau

software sesuai dengan kebutuhan dengan bahasa pemrograman yang telah

ditentukan. Dalam proses pembelajaran, siswa dapat mengomunikasikan gagasan

atau konsep berupa logika dan algoritma yang dikemukakan orang lain dan

mewujudkannya melalui bahasa pemrograman, dengan tujuan membangun sebuah

Sistem Informasi . Ruang lingkup saduran ini berkenaan dengan pengenalan

bahasa pemrograman Java yang merupakan salah satu bahasa pemrograman

populer dan banyak digunakan oleh developer-developer atau programmer di

dunia teknologi informasi ini.

I.2 Tujuan

Adapun tujuan dari penyaduran buku ini adalah:

1. Sebagai bahan untuk proses belajar mengajar di lingkungan UPT PK

Jember sehingga peserta pelatihan akan terarah sesuai dengan tujuan dari

proses latihan.

2. Bagi peserta pelatihan sebagai panduan belajar dalam bidang teknologi

informasi dan komunikasi.

pemrograman java tingkat dasar 1


3. Bagi penulis untuk memenuhi persyaratan dalam mendapatkan angka

kredit sehingga dapat dipertimbangkan untuk kenaikan pangkat satu

tingkat yang lebih tinggi

pemrograman java tingkat dasar 2


BAB II PENGENALAN JAVA

II.1 Sejarah Singkat Perkembangan JAVA

Proyek Java dimulai pada tahun 1991, ketika sejumlah insinyur

perusahaan Sun yang dimotori oleh James Gosling mempunyai keinginan untuk

mendesain sebuah bahasa komputer kecil yang dapat dipergunakan untuk

peralatan konsumen seperti kotak tombol saluran TV. Proyek ini kemudian diberi

nama sandi Green.

Keharusan untuk membuat bahasa yang kecil , dan kode yang ketat

mendorong mereka untuk menghidupkan kembali model yang pernah dicoba oleh

bahasa UCSD Pascal, yaitu mendesain sebuah bahasa yang portable yang

menghasilkan kode intermediate. Kode intermediate ini kemudian dapat

digunakan pada banyak komputer yang interpreternya telah disesuaikan.

Karena orang-orang Sun memiliki latar belakang sebagai pemakai unix

sehingga mereka lebih menggunakan C++ sebagai basis bahasa pemrograman

mereka, maka mereka secara khusus mengembangkan bahasa yang berorientasi

objek bukan berorientasi prosedur. Seperti yang dikatakan Gosling ”Secara

keseluruhan, bahasa hanyalah sarana, bukan merupakan tujuan akhir”. Dan

Gosling memutuskan menyebut bahasanya dengan nama “Oak” (diambil dari

nama pohon yang tumbuh tepat diluar jendela kantornya di Sun), tetapi kemudian

nama Oak diubah menjadi java, karena nama Oak merupakan nama bahasa

komputer yang sudah ada sebelumnya.

Pada tahun 1994 sebagian besar orang menggunakan mosaic, browser

web yang tidak diperdagangkan yang berasal dari pusat Supercomputing

pemrograman java tingkat dasar 3


Universitas Illinois pada tahun 1993 ( Mosaic sebagian ditulis oleh Marc

Andreessen dengan bayaran $6.85 per jam, sebagai mahasiswa yang melakukan

studi praktek. Di kemudian hari ia meraih ketenaran sebagai salah seorang pendiri

dan pemimpin teknologi di netscape)

Browser yang sesungguhnya dibangun oleh Patrick Naughton dan

Jonathan Payne dan berkembang ke dalam browser HotJava yang kita miliki saat

ini. Browser HotJava ditulis dalam Java untuk menunjukkan kemampuan Java.

Tetapi para pembuat juga memiliki ide tentang suatu kekuatan yang saat ini

disebut dengan applet, sehingga mereka membuat browser yang mampu

penerjemahkan kode byte tingkat menengah. “Teknologi yang Terbukti” ini

diperlihatkan pada SunWorld ’95 pada tanggal 23 mei 1995, yang mengilhami

keranjingan terhadap Java terus berlanjut.

II.2 Kriteria “Kertas Putih” Java

Penulis Java telah menulis pengaruh “Kertas Putih” yang menjelaskan

tujuan rancangan dan keunggulannya. Kertas mereka disusun lewat 11 kriteria

berikut :

Sederhana (Simple)
Syntax untuk Java seperti syntax pada C++ tetapi syntax Java tidak

memerlukan header file, pointer arithmatic (atau bahkan pointer syntax), struktur

union, operator overloading, class virtual base, dan yang lainnya. Jika anda

mengenal C++ dengan baik, maka anda dapat berpindah ke syntax Java dengan

mudah tetapi jika tidak, anda pasti tidak berpendapat bahwa Java sederhana.

Berorientasi Objek (Object Oriented)

pemrograman java tingkat dasar 4


Rancangan berorientasi objek merupakan suatu teknik yang memusatkan

rancangan pada data (objek) dan interface. Fasilitas pemrograman berorientasi

objek pada Java pada dasarnya adalah sama dengan C++. Feature pemrograman

berorientasi objek pada Java benar-benar sebanding dengan C++, perbedaan

utama antara Java dengan C++ terletak pada penurunanberganda (multiple

inheritance), untuk ini Java memiliki cara penyelesaian yang lebih baik.

Terdistribusi (Distributed)
Java memiliki library rutin yang luas untuk dirangkai pada protokol

TCP/IP sepetrti HTTP dan FTP dengan mudah. Aplikasi Java dapat membuka dan

mengakses objek untuk segala macam NET lewat URL sama mudahnya seperti

yang biasa dilakukan seorang programmer ketika mengakses file sistem secara

lokal.

Kuat (Robust)
Java dimaksudkan untuk membuat suatu program yang benar-benar dapat

dipercaya dalam berbagai hal. Java banyak menekankan pada pengecekan awal

untuk kemungkinan terjadinya masalah, pengecekan pada saat run0time dan

mengurangi kemungkinan timbulnya kesalahan (error). Perbedaan utama antara

Java dan C++ adalah Java memiliki sebuah model pointer yang mengurangi

kemungkinan penimpaan (overwriting) pada memory dan kerusakan data (data

corrupt).

Aman (Secure)
Java dimaksudkan untuk digunakan pada jaringan terdistribusi. Sebelum

sampai pada bagian tersebut, penekanan terutama ditujukan pada masalah

pemrograman java tingkat dasar 5


keamanan. Java memungkinkan penyusunan program yang bebas virus, sistem

yang bebas dari kerusakan.

Netral Arsitektur (Architecture Neutral)


Kompiler membangkitkan sebuah format file dengan objek arsitektur

syaraf, program yang di kompile dapat dijalankan pada banyak prosesor, disini

diberikan sistem run time dari Java. Kompiler Java melakukannya dengan

membangkitkan instruksi-instruksi kode byte yang tidak dapat dilakukan oleh

arsitektur komputer tertentu. Dan yang lebih baiik Java dirancang untuk

mempermudah penterjemahan pada banyak komputer dengan mudah dan

diterjemahkan pada komputer asal pada saat run-time.

Portabel (Portable)
Tidak seperti pada C dan C++, di Java terdapat ketergantungan pada saat

implementasi (implement dependent). ukuran dari tipe data primitif ditentukan,

sebagaimana kelakuan aritmatik padanya. Librari atau pustaka merupakan bagian

dari sistem yang mendefinisikan interface yang portabel.

Interpreter
Interpreter Java dapat meng-eksekusi kode byte Java secara langsung

pada komputer-komputer yang memiliki interpreter. Dan karena proses linking

dalam Java merupakan proses yang kenaikannya tahap demi tahapdan berbobot

ringan, maka proses pengembangan dapat menjadi lebih cepat dan masih dalam

penelitian.

Kinerja Yang Tinggi (High Performance)


Meskipun kinerja kode byte yang di interpretasi biasanya lebih dari

memadai, tetapi masih terdapat situasi yang memerlukan kinerja yang lebih tinggi.

pemrograman java tingkat dasar 6


Kode byte dapat diterjemahkan (pada saat run-time) de dalam kode mesin untuk

CPU tertentu dimana aplikasi sedang berjalan.

Multithreaded
Multithreading adalah kemampuan sebuah program untuk melakukan

lebih dari satu pekerjaan sekaligus. Keuntunga dari multithreading adalah sifat

respons yang interaktif dan real-time.

Dinamis
Dalam sejumlah hal, Java merupakan bahasa pemrograman yang lebih

dinamis dibandingkan dengan C atau C++. Java dirancang untuk beradaptasi

dengan lingkungan yang terus berkembang. Librari dapat dengan mudah

menambah metode dan variabel contoh yang baru tanpa banyak mempengaruhi

klien. Informasi tipr run-time dalam Java adalah langsung (straigtforward).

II.3 JAVA dan C++

Prinsip dasar pembuatan Java adalah karena C++ ternyata tidak

memenuhi janji sebagai pemrograman berorientasi objek. Jadi apa yang salah dari

C++ sehingga Java harus dibuat ? Jawabannya sederhana, yaitu Kompatibilitas ke

belakang ( backward compability).

Kompabilitas kebelakang biasanya dikenal sebagai kemampuan yang

menjamin keberhasilan dengan membuat programmer belajar dengan cepat. Java

menggunakan hampir semua konvensi yang identik untuk deklarasi variabel,

melewatkan parameter, operator dan pengaturan aliran. Sehingga dengan kata lain

Java menambahkan bagian-bagian yang baik dari C++ dan menghapus bagian-

bagian yang jelek dari C. Java jauh lebih baik dari C++ karena hal-hal yang tidak

dimilikinya, seperti beberapa contoh berikut:

pemrograman java tingkat dasar 7


Variabel Global
Para programmer menulis program dalam bahasa assembly, dan semua

program yang disimpan dalan punch card, penghubung alat pemrograman adalah

variabel global, masalahnya, dengan menggunakan variabel blobal suatu fungsi

dapat memberikan efek samping yang buruk dengan mengubah keadaan global.

Variabel global pada C++ adalah tanda sebuah program yang tidak dirancang

cukup baik untuk enkapsulasi data dengan cara yang masuk akal.

Pada Java, ruang penamaan global hanya hirarki class. Tidak mungkin

menciptakan variabel global diluar semua class. Setidaknya penentuan keadaan

global dibuat lebih jelas dengan enkapsulasi dalam class. Contoh,

system.out.println() sering digunakan dalam program Java. Ini adalah cara

mengakses output standar global untuk interpreter Java.

Goto
Beberapa kemampuan yang digunakan sebagai cara cepat untuk

menyelesaikan program tanpa membuat struktur yang jelas adalah pernyataan

goto.Dalam C++ dikenal sebagai if-then-goto. Sebeleum C++ memasukkan

penanganan eksepsi, goto sering digunakan untuk membuat perulangan didalam

keadaan eksepsi.

Java tidak memiliki pernyataan goto. Java menyediakan kata goto hanya

untuk menjaga agar programmer tidak bingung menggunakannya. Java memiliki

bagian break yang diberi label dan pernyataan continue yang merupakan bagian

dimana goto boleh dipergunakan. Penanganan eksepsi yang ampuh dan terdefinisi

dengan baik pada Java menghilangkan kebutuhan perintah goto.

Pointer

pemrograman java tingkat dasar 8


Pointer atau address pada memori adalah kemampuan C++ yang paling

ampuh juga paling berbahaya. Biasanya kesalahan terjadi karena “kurang satu

tempat” atau rusaknya data yang disimpan karena lokasi memori terakhir

hancur.kesalahan ini merupakan salah satu kesalahan yangterburuk yang susah

untuk diperiksa dan ditelusuri.

Meskipun penanganan objek Java menggunakan pointer, bahasa Java

tidak memiliki kemampuan memanipulasi pointer secara langsung. Kita tidak

dapat mengubah integer menjadi pointer, menunjuk ulang sembarang address

memori. Array merupakan objek yang didefinisikan, tidak berupa address

dimemori.Di Java kita tidak dapat menulis sebelum akhir lokasi yang disediakan

untuk array.

Alokasi Memori
Kemampuan C++ yang sama berbahayanya dengan pengolahan

matematis pointer adalah manajemen memori. Manajemen memori di C dan C++

diwujudkan dengan keunggulan dan kelemahan fungsi library malloc() dan free().

Fungsi malloc, mengalokasikan jumlah tertentu memori (dalam byte), dan

mengeluarkan address blok tersebut. Fungsi free, mengirimkan blok yang telah

dialokasikan kepada sistem untuk penggunaan umum. Secara umum dapat

menyebabkan kebocoran memori yang mengakibatkan program berjalan semakin

lama semakin lambat.

Java tidak memiliki fungsi malloc dan free, karena setiap struktur data

yang rumit adalah objek, maka mereka dialokasikan dengan operator new, yang

mengalokasikan ruang untuk objek pada ‘heap’ memori. Memori yang disediakan

disebut ‘heap’ karena kita tidak perlu lagi memikirkannya sebagai penambahan

address yang berstruktur linier. Jadi hanya berupa kumpulan instan objek. Yang

pemrograman java tingkat dasar 9


didapat dari fungsi new bukanlah address memori, melainkan hanya ‘pegangan’

untuk objek dalam heap.

Tipe Data Yang Rapuh


C++ mewarisi semua tipe data umum pada C. Tipe-tipe ini mewakili

bilangan bulat dan pecahan dengan berbagai rentang nilai dan ketelitian. Rentang

nilai dan ketelitian tipe ini bervariasi bergantung pada implementasi kompilernya.

Java memecahkan masalah ini dengan mengambil ukuran yang sesuai

untuk semua tipe numerik dasar dan menyatukannya. Arsitektur tertentu akan

mengalami kesulitan atau bekerja tidak optimal untuk meng-implementasikan tipe

data yang bergantung hardware secara ketat pada interpreter Java yang diberikan,

tetapi inilah satu-satunya cara untuk menjamin hasil yang dapat dibuat ulang pada

platform hardware yang berbeda.

Pemilihan Tipe (Type Casting) yang Tidak Aman


Type Casting adalah mekanisme yang ampuh dalam C/C++ yang

memungkinkan kita untuk mengubah tipe suatu pointer secara sembarang.

Mungkin kita sering melihat bentuk seperti ini :

memset((void *)p, 0, sizeof (struct p))

Penggunaan ini, walaupun tidak baik, tetapi cukup aman. Tentu saja

dengan menganggap blok memori yang ditunjuk oleh p sekurang0kurangnya

sepanjang sizeof (struct p).ini harus digunakan dengan sangat hati-hati karena

tidak ada syarat untuk memeriksa apakah kita telah memilih tipe dengan benar.

Penanganan objek Java mencakup informasi lengkap tentang class yang

menjadi instans suatu objek, sehingga dapat dilakukan pemeriksaan kompatibilitas

tipe selama program berjalan, dan menghasilkan eksepsi jika terjadi kegagalan.

pemrograman java tingkat dasar 10


Daftar Argumen Yang Tidak Aman
C++ banyak disukai karena kemampuannya melewatkan pointerdengan

tipe sembarang dalam daftar argumen panjang-variabel yang dikenal sebagai

varargs. Varargs adalah tambahan sederhana pada premis yang menyatakan

bahwa sembarang address dapat dipetakan pada sembarang tipe, tugas

pemeriksaan tipe diserahkan kepada programmer.

Sangat menyenagkan jika Java memiliki cara yang aman terhadap tipe

untuk mendeklarasikan dan melewatkan daftar argumen panjang-variabel, tetapi

sampai versi 1.0 belum ada ketentuan seperti itu.

File Header yang Terpisah


Salah satu kemampuan yang patut dipertimbangkan adalah file header,

dimana kita dpata mendeklarasikan prototipe class kita dan mendistribusikannya

dengan kode biner implementasi class yang telah di-compile. Kemampuan ini

membuat lingkungan compiler C++ hampir tidak dapat digunakan. C++ memiliki

format file yang bergantung mesin untuk kode yang telah di-compile, sehingga

informasi header dapat dibuat coresiden. Karena antarmuka programmer ke class

yang di-compile dilakukan melalui file header-nya, maka kode yang telah di-

compile sangat bergantung pada apa yang ada pada file header tersebut.

Misalkan programmer yang senang berpetualang ingin meningkatkan

akses pada beberapa anggota data private pada class yang telah di-compile. Yang

harus dilakukan oleh orang tersebut adalah mengganti pengubah akses yang

asalnya private menjadi public pada file header dan meng-compile suatu sub class

dari class yang telah di-compile. Pada Java ini tidak mungkin terjadi, karena di

Java tidak ada file header. Tipe dan visibilitas anggota class dicompile ke dalam

pemrograman java tingkat dasar 11


file class Java. Interpreter Java menjalankan pengaturan akses saat program

berjalan, jadi sama sekali tidak ada cara untuk mengakses variabel private dari

luar suatu class.

Struktur yang Tidak Aman


C berusaha menyediakan enkapsulasi data melalui deklarasi struktur

yang disebut struct, dan polimorfisme dengan mekanisme union. Dua gagasan ini

menghasilkan batas tipis antara penyesuaian bergantung mesin yang kritis dan

berbahaya dengan batasan ukuran. Java tidak memiliki konsep struct dan union ,

sebaliknya Java menyatukan konsep ini dengan class.

Peng-hacker-an Preprocessor
Untuk mewujudkan keinginan memiliki model yang jelas untuk ditulis

oleh programmer, compiler C dan C++ menggunakan tool yang sama dengan

yang digunakan pada masa-masa MACRO assembler. Ini menghasilkan

preprocessor C yang tugasnya mencari perintah khusus yang diawali tanda pagar

(#).Preprocessor C sering digunakan untuk membangun program yang sangat sulit

dibaca.

Java mengatur agar kita dapat bekerja tanpa preprocessor, hanya

bergantung pada kata kunci final untuk mendeklarasikan konstanta yang

sebelumnya dihasilkan dengan #define.

QED
Berasal dari bahasa latin Quod Erat Demonstrandum, yang berarti

“Terbuktikan..!!!”.

pemrograman java tingkat dasar 12


II.4 Tata Bahasa

Progaram Java adalah kumpulan spasi, komentar, kata kunci, identifier,

literal, operator, dan pemisah.

Spasi
Java adalah bahasa bebas bentuk. Tidak perlu mengatur tata letaknya

agar dapat bekerja. Asalkan ada sekurang-kurangnya satu spasi, tab, atau baris

baru diantara setiap token sebelum disisipi operator atau pemisah lain.

Komentar
Ada beberapa bentuk :

1. Komentar baris tunggal

Diawali dengan tanda // dan diletakkan diakhir baris yang diberi

komentar.

2. Komentar baris banyak

Diawali dengan tanda /* dan ditutup dengan */ semua diantara

kedua tanda tersebut dianggap komentar dan akan diabaikan oleh

compiler.

contoh penulisan :

/*
* komentar…….
* komentar……
*/
3. Komentar terdokumentasi

Menggunakan piranti Javadoc, yang mennggunakan komponen

compiler Java untuk secara otomatis menghasilkan dokumentasi

antarmuka public suatu class. Aturan pembuatan komentar yang

pemrograman java tingkat dasar 13


dapat diolah oleh Javadoc adalah : sebelum deklarasi class, method,

dan variabel public harus digunakan komentar bertanda /** untuk

menyatakan komentar dokumentasi, diakhiri dengan tanda */.

Javadoc akan mengenali sejumlah variabel khusus yang didahului

dengan tanda @ didalam bagian komentar.

contoh penulisan :

/**
* komentar….
* komentar…..
*/

Kata Kunci Simpanan (Keywords)


Kata kunci simpanan adalah identifier khusus yang disimpan oleh bahasa

Java untuk mengendalikan bagaimana program didefinisikan. Kata kunci ini

digunakan untuk mengenali tipe-tipe, pengubah, dan mekanisme pengaturan aliran

program. Kata kunci ini hanya dapat digunakan untuk fungsi tertentu dan tidak

dapat digunakan sebagai identifier nama suatu variabel, class dan method. Sampai

denga Versi 1.0 terdapat 59 kata kunci seperti terlihat dalam tabel :

abstract boolean break byte byvalue case


cast catch char class const continue
default do double else extends false
final finally float for future generic
goto if impleme import inner instanceo
nts f
int interface long native new null
operator outer package private protected public
rest return short static super switch
synchroniz this throw throws transient true
ed
try var void volatile while

pemrograman java tingkat dasar 14


Identifier
Digunakan untuk nama class, method, dan variabel. Suatu variabel dapat

berupa urutan tertentu huruf (besar atau kecil), angka, garis bawah, dan tanda

dolar. Tidak boleh diawali oleh angka dan bersifat case sensitive.

Kelompok Java mengikuti aturan penamaan identifier untuk semua

method public dan variabel instans dengan huruf awal kecil dan menandai bagian

kata selanjutnya dengan huruf besar, misalnya nextItem, currentValue,

getTimeOfDay.

Untuk variabel provate dan lokal identifier akan berupa huruf kecil

semua dikombinasikan dengan garis bawah, misalnya next_val, temp_val. Untuk

variabel final yang mewakili suatu konstanta, digunakan huruf besar semua,

misalnya TOK_BRACE, DAY_FRIDAY.

Literal
Besaran konstanta pada Java dihasilkan dengan menggunakan literal

yang mewakilinya. Setiap literal merepresentasikan nilai suatu tipe, dimana tipe

itu sendiri menjelaskan bagaimana sifat nilai tersebut dan bagaimana

penyimpanannya.

Separator (Pemisah)

Simbol Nama Fungsi


() Kurung Digunakan untuk menghimpun parameter dalam definisi dan
pemanggilan method, juga digunakan untuk menyatakan
tingkatan pernyataan, menghimpun pernyataan untuk
pengaturan alur program dan menyatakan tipe cast.
{} kurung Digunakan untuk menghimpun nilai yang otomatis
kurawal dimasukkan kedalam array, juga digunakan untuk
mendefinisikan blok program, untuk cakupan class, method,
dan lokal.
[] kurung siku Digunakan untuk menyatakan tipe array, juga digunakan
untuk membedakan nilai array.
; titik-koma pemisah pernyataan.

pemrograman java tingkat dasar 15


, koma Pemisah urutan identifier dalam deklarasi variabel, juga
digunakan untuk mengaitkan pernyataan didalam pernyataan
for.
. titik Dugunakan untuk memisahkan nama paket dari sub-paket dan
class, juga digunakan untuk memisahkan variabel atau method
dari variabel referensi.

Variabel
variabel adalah satuan dasar penyimpanan dalam program Java. Suatu

variabel didefinisikan dengan kombinasi identifier, tipe, dan cakupan. Bergantung

pada tempat kita mendeklarasikannya, variabel dapat bersifat lokal atau

sementara, misalnya didalam perulangan for, atau dapat juga berupa variabel

instans yang dapat diakses oleh semua method dalam class. Cakupan lokal

dinyatakan dalam kurung kurawal.

II.5 Tipe Data

Java merupakan contoh bahasa yang strongly typed language. Hal ini

berarti bahwa setiap variabel harus memiliki tipe yang sudah dideklarasikan.

Terdapat 8 tipe primitif, 6 diantaranya adalah tipe bilangan ( 4 tipe integer, 2 tipe

floating point), 1 tipe karakter char, digunakan mengawa-sandi (encode) Unicode,

dan 1 tipe boolean.

Integer

Tipe Tempat Jangkauan (inclusive)


yang
Diperlukan
int 4 byte - 2.147.483.648 sampai 2.147.483.647 (hanya lebih dari 2
miliar)
short 2 byte - 32.768 sampai 32.767
long 8 byte - 9.223.372.036.854.775.808L sampai
9.223.372.036.854.775.807L
byte 1 byte - 128 sampai 127

pemrograman java tingkat dasar 16


Floating Point

Tipe Tempat Jangkauan


Yang
Dibutuhkan
float 4 byte secara kasar 3,40282347E+38F ( 7 digit desimal signifikan)
double 8 byte secara kasar  1,79769313486231570E+308 (15 digit
desimal siignifikan)

Char
Tipe char menggunakan tanda kutip tunggal untuk menyatakan suatu

char. Tipe char juga menyatakan karakter dalam upaya mengawa-sandi unicode,

yang merupakan kode 2-byte. Karakter unicode paling sering dinyatakan dalam

istilah skema pengkodean hexadesimal yang dimulai dari \u0000 sampai \uFFFF.

Selain karakter bebas (escape ‘ \u ‘ yang menyatakan karakter unicode di Java

terdapat juga

\b backspace \u0008
\t tab \u0009
\n linefeed \u000a
\r carriage return \u000d
\” double quote \u0022
\’ single quote \u0027
\\ a backslash \u005c

Boolean
Tipe boolean memiliki nilai true dan false. Tipe ini digunakan untul

logical testing dengan menggunakan operator relasional.

Konversi antar Nilai Numerik


Operasi biner apapun pada variabel numerik dengan tipe yang berbeda

dapat diterima dan diperlakukan dengan cara seperti dibawah ini :

1. Jika tipe operand adalah double, maka yang lain juga akan

diperlakukan sebagai double pada lingkup operasi tersebut.

pemrograman java tingkat dasar 17


2. Jika operand adalah float, maka yang lain juga akan diperlakukan

sebagai float.

3. Jika operand adalaha long, maka yang lain juga akan diperlakukan

sebagai long.

konversi yang diijinkan adalah sebagai berikut :

byte  short  int  long  float  double

Dimana kita dapat memberikan nilai variabel suatu tipe disebelah kiri ke

tipe disebelah kanannya.

II.6 Operator

Assignment Operator ( = )

Shorthand assignment operator

Operator Usage Meaning


+= X += Y X=X+Y
-= X -= Y X=X–Y
*= X *= Y X=X*Y
/= X /= Y X=X/Y
%= X %= Y X=X%Y

Arithmetic Operator

Operator Operation
+ Addition
- Subtraction
* Multiplication
/ Division
% Modulo

Bitwise Operator

Operator Operation
& AND
| OR
^ XOR

pemrograman java tingkat dasar 18


>> Shift Kanan
<< Shift Kiri
>>> Shift Kanan isi dengan nol

Unary Operator

Operator Operation
~ Unary NOT
- Minus
++ Increment
-- Decrement

Relational Operator

Operator Operation
== Equal To
!= Not Equal To
> Greater Than
< Less Than
>= Greater or Equal To
<= Less or Equal To

Logical Operator

Operator Operation
! Short-circuit NOT
&& Short-circuit AND
|| Short-circuit OR
?: Operator ternary if-then-
else

Preseden Operator

Tertinggi
() [] .
++ -- ~ !
* / %
+ -
>> >>> <<
> >= < <=
== !=
&
^
|
&&

pemrograman java tingkat dasar 19


||
?:
= op=
Terendah

II.7 Control Flow

II.7.1 Percabangan

 if – else
Bentuk if-else menyebabkan eksekusi dijalankan melalui sekumpulan

keadaan boolean sehingga hanya bagian tertentu program yang dijalankan. Bentuk

umum pernyataan if-else :

if (boolean expression) statement 1; [else statement 2; ]

Klausa else bersifat optional, setiap statement dapat berupa satu

statement tunggal atau dapat berupa satu blok statement yang ditandai dengan

tanda {} (kurung kurawal). Boolean expression dapat berupa sembarang

pernyataan boolean yang menghasilkan besaran boolean.

 break
Java tidak memiliki pernyataan goto. Penggunaan goto adalah untuk

membuat percabangan secara sembarang yang membuat program sulit dimengerti

dan mengurangi optimasi compiler tertentu. Pernyataan break pada Java dirancang

untuk mengatasi semua kasus tersebut. Istilah break mengacu kepada proses

memecahkan blok program. Proses tersebut memerintahkan runtime untuk

menjalankan program dibelakang blok tertentu. Untuk dapat ditunjuk blok diberi

nama/label. Break juga dapat digunakan tanpa label untuk keluar dari suatu loop

dan pernyataan switch. Penggunaan break menunjukkan bahwa kita akan keluar

dari sutu blok program.

pemrograman java tingkat dasar 20


 switch
Pernyataan switch memberiikan suatu cara ubtuk mengirimkan bagian

program berdasarkan nilai suatu variabel atau pernyataan tunggal. Bentuk umum

pernyataan switch :

switch (expression)
{ case value1 :
Statement;
break;
case value2 :
Statement;
break;
case valueN :
Statement;
break;
default;
}

Expression dapat menghasilkan suatu tipe sederhana, dan setiap

value yang disebutkan pada pernyataan case harus berupa tipe yang cocok.

Pernyataan switch bekerja dengan cara membandingkan nilai expression dengan

setiap nilai pada pernyataan case. Jika ada yang cocok maka urutan program yang

ada di pernyataan case tersebut akan dijalankan, jika tidak ada yang cocok,

program akan menjalankan default

 return
Java menggunakan bentuk sub-routine yang disebut method untuk

mengimplementasikan antarmuka prosedural ke class objek. Setiap saat dalam

method dapat digunakan pernyataan return yang menyebabkan eksekusi

mencabang kembali ke pemanggil method.

pemrograman java tingkat dasar 21


II.7.2 Perulangan (Looping)

Looping artinya mengulangi eksekusi blok program tertentu sampai

tercapai kondisi untuk menghentikannya. Setiap perulangan memiliki 4 bagian:

a. Inisialisasi, adalah program yang mengyiapkan bagian awal perulangan

b. Badan program, adalah pernyataan yang ingin kita ulangi.

c. Iterasi, adalah program yang sering digunakan untu penambahan atau

penguranagn pencacah dan index.

d. Terminasi, adalah pernyataan boolean yang diperiksa setiap kali selama

perulangan dilaksanakan untuk melihat apakah perulangan sudah

saatnya dihentikan.

 while
While adalah pernyataan perulangan yang paling mendasar pada Java.

Penggunaan pernyataan while akan menyebabkan rekursi pernyataan secara terus

menerus selama pernyataan booleannya bernilai true. Bentuk umum dari

pernyataan while :

[initialization;]
while (termination)
{ body program ;
[iteration;]
}

 do-while
Penggunaan pernyataan do –while menyebabkan body program akan

dieksekusi sekurang-kurangnya 1 kali walaupun pernyataan booleannya

menghasilkan nilai false. Pemeriksaan terminasi dilaksanakan pada akhir

program. Bentuk umum pernyataan do – while :

pemrograman java tingkat dasar 22


[initialization;]
do
{ body program;
[iteration;]
}
while [termination];

 for
Pernyataan for adalah cara praktis untuk menyatakan suatu perulangan.

Bentuk umum pernyataan for :

for {initialization; termination; iteration ) body program;

Jika keadaan awal tidak menyebabkan termination bernilai true maka

pernyataan body program dan iteration tidak akan dijalankan.

 Pernyataan koma
Kadang-kadang ada keadaan dimana kita ingin memasukkan lebih dari

satu pernyataan inisialisasi atau terminasi, Java menyediakan cara lain untuk

menyatakan beberapa pernyataan sekaligus. Penggunaan koma untuk memisahkan

pernyataan di batasi hanya untuk digunakan didalam tanda kurung untuk

pernyataan for.

 continue
Pernyataan continue akan menghentikan iterasi yang bersangkutan tetapi

program akan menjalankan sisa perulangan sampai dengan selesai.

II.8 Class dan Object

Beberapa orang pada awalnya, biasanya tidak memperhatikan

perbedaan antara class dan object, mereka mencampuradukkan kedua istilah

tersebut. Mari kita simak kode berikut :

pemrograman java tingkat dasar 23


/*
Di sini kita mendefinisikan sebuah class bernama NiceGuy.
Simpan sebagai file NiceGuy.java dan compile file
Tersebut. Anda akan mendapatkan file bernama
NiceGuy.class
*/

public class NiceGuy {


private string name;

public NiceGuy(String name) {


system.out.println(“Instantion of NiceGuy named “ + name) ;
this.name=name;
}
public void sayHello() {
system.out.println(“Hello Object Oriented World…!!!“ ) ;
}
public sayHelloOutLoud() {
system.out.println(“HELLLOOOO OBJECT ORIENTED
WORLD!!!”) ;
}
Public String getName() {
Return name;
}
}
Gambar 1. Definisiclass NiceGuy

/*
Di sini, kita membuat sebuah java application yang
bernama OurFirstCode.
Simpan source ini dalam file bernama OurFirstCode.java,
di direktori yang sama dengan tempat anda menyimpan
NiceGuy.java. Kemudian compile file tersebut, Anda akan
Mendapatkan file OurFirstCode.class.
Lalu jalankan aplikasi ini dengan mengetikan java
OurFirstCode pada command line
*/
public class OurFirstCode {
public static void main(String[] args) {
NiceGuy ng= new NiceGuy (“ButtHead”);
ng.sayHello();
ng.sayHelloOutLoud();

//he’s so cute…,who’s he???


String NiceGuyName = ng.getName();
System.out.println(“OH…!!!! HE’S “ +
NiceGuyName.toUpperCase());
}
}
Gambar 2. Aplikasi Java

pemrograman java tingkat dasar 24


Diatas merupakan contoh pendefinisian sebuah class bernama NiceGuy

pada Gambar 1. Pada Gambar 2 merupakan kode dari sebuah aplikasi java yang

bernama OurFirstCode. Pada aplikasi tersebut kita menggunakan class NiceGuy

untuk membuet objek bertipe NiceGuy.

II.9 Pendefinisian Class

Sintaks dalam mendefinisikan class adalah sebagai berikut :

[modifier-modifier] class namaclass [extends parentclass]


[implements interface] {
[deklarasi field-field]
[definisi method-method]
}

Yang tertera didalam kurung siku bersifat optional. Dengan demikian,

definisi minimal dari sebuah class bisa jadi seperti berikut :

class Useless {

//….mmm….

Tidak ada yang bisa kita harapkan dari objek diatas. Contoh yang lebih

baik adalah Gambar 1. Disana kita mendeklarasikan 1 field dan 3 method. Pada

baris 8 kita mendeklarasikan field yang bernama name yang bertipe string. Secara

umum sintaks untuk mendeklarasikan field adalah :

type namafield;

Tipe dari field bisa primitif (seperti int, boolean, float, dan sebagainya),

dan bisa juga Object (seperti String, Vector, Hashtable, dan sebagainya).

pemrograman java tingkat dasar 25


Method-method yang dimiliki class NiceGuy adalah method sayHello()

sepanjang baris 14-16 (method void), method sayHelloOutLoud() pada baris 17-

19 (method void), dan method getName() pada baris 20-22 (method non-void).

Secara umum sintaks dalam pendefinisian sebuah method adalah :

[modifier-modifier] return-type namamethod


( [parameter1, [parameter2],… , [parameter N] ) {
[statement-statement];
}

Tipe Return bisa void, tipe data primitif, atau tipe data object. Method

dengan tipe return non-void harus mencantumkan statement return <something>

pada akhir deklarasi method itu (seperti pada baris 21 class NiceGuy) kita juga

dapat menggunakan kata return pada method void untuk keluar dari method

tersebut.

Bagian penting lain dari definisi class adalah constructor. Pendefinisian

constructor dicontohkan pada baris 10-12 class NiceGuy. Constructor digunakan

pada saat penciptaan objek dari sebuah class. Pendeklarasian constructor mirip

dengan pendeklarasian method, dengan satu pengecualian bahwa constructor tidak

mencantumkan tipe return.

[modifier-modifier] namaconstructor ([parameter 1], [parameter 2], …


, [parameter N]) {
[statement-statement];
}

Hal lain yang perlu dicatat tentang constructor adalah, nama constructor

harus sama dengan classnya. Constructor tanpa parameter disebut default

constructor. Kalau kita sama sekali tidak mendeklarasikan constructor, compiler

secara otomatis akan membuatkan sebuah default constructor.

pemrograman java tingkat dasar 26


Pada Gambar 2, aplikasi OurFirstCode memanfaatkan class NiceGuy

untuk menciptakan sebuah objek bertipe NiceGuy dimemori (perhatikan baris 13

gambar 2). Setelah itu, reference ng dapat digunakan untuk memanggil method-

method (mengirimkan pesan kepadanya) atau mengakses field-field dari objek

yang bersangkutan.

Reference adalah seperti alamat rumah sedangkan objek adalah

rumahnya. dengan mengetahui alamat, kita bisa mencapai rumah yang dimaksud.

II.10 Inheritance

Salah satu topik penting dalam OOP adalah inheritance (pewarisan sifat).

Dengan inheritance, pengembangan software dapat bekerja lebih efisien dan lebih

cepat. Berkat inheritance dapat menggunakan definisi class yang pernah dibuat

sebelumnya untuk membuat class-class lain yang menyerupai class tersebut.

Perhatikan contoh berikut :

public class KattWorld {


public static void main (String args[]) {
Katt k = new Katt();
k.speak();
Anggora a = new Anggora();
a.speak(); a.jump();
Siam s = new Siam();
s.speak();
}
}

class Katt {
public Katt() {
system.out.println(“Katt Constructor”);
}
public void speak() {
system.out.println(“Miaww…”);
}
}

class Anggora extends Katt {

pemrograman java tingkat dasar 27


public void jump() {
system.out.println(“Crash…Boom…”);
}
}

class Siam extends Katt {


public Siam() {
system.out.println(“Siam Constructor”);
}
public void speak() {
system.out.println(“Mmurrrr…mmurrrr…”);
}
}
Gambar 3. Kisah kucing

Hal pertama yang harus diperhatikan dari gambar 3 dalah cara

melakukan inheritance. Coontoh diatas mempunyai satu class bernama Katt (baris

12-19). Kemudian dibut class lainnya yang mempunyai sifat seperti Katt, tetapi

memiliki keunikan sendiri. Contohnya adalah class Anggora, kita dapat membuat

subclass dari Katt (baris 21-25).

Kini dapat dikatakan bahwa Katt menjadi parentclass (baseclass atau

superclass) dari class Anggora. Secara umum kita dapat mendefinisikan suatu

class sebagai turunan dari baseclass dengan cara :

class namaclass extends baseclass {


[statement-statement];
}

II.11 Method overiding

Kita membuat varian baru lain dari Katt dengan cara mengeong

Murr….Murr…Murr…. Kita namai varian itu Siam. Kita definisikan Siam

sebagai subclass dari Katt, tapi kini kita melakukan metode overiding, kita

mendefinisikan ulang method speak() didalam definisi class Siam. Jika dijalankan

akan menghasilkan output :

pemrograman java tingkat dasar 28


Katt constructor
Miaww…
Katt constructor
Miaww…
Crash…Boom…
Katt constructor
Siam constructor
Mmurrr…mmurrr…

Baris 6 dan 7 dimunculkan sewaktu berlangsung konstruksi/instantiasi

objek bertipe Siam. Default constructor Katt dijalankan terlebih dahulu. Ini

menunjukkan bahwa default, kecuali kita minta yang lain, dari baseclass secara

otomatis dijalankan terlebih dahulu sebelum constructor dari class yang

bersangkutan.

II.12 This

This sebenarnya adalah sebuah variable read-only (tidak dapat diubah

nilainya). Dengan variable ini, kita mendapatkan reference/pointer menuju objek

terkini. Bayangkan aplikasi anda sedang berjalan, pada saat tertentu yang

dijalankan oleh komputer anda adalah method aMethod() milik object anObject.

Dari method aMethod() anda membutuhkan reference ke objek terkini yaitu object

anObject itu sendiri. Untuk itulah kita menggunakan variabel this dalam method

aMethod() milik object anObject. Perhatikan contoh berikut :

public class BeavisAndButtheadStory {


public static void main (string[] args) {
DivineBeing beavis = new DivineBeing (“Beavis”);
DivineBeing butthead = new DivineBeing (“Butthead”);
//guess what’s gonna happen next…
beavis.messWith (butthead);
butthead.makeRevenge();
}
}

class DivineBeing {

pemrograman java tingkat dasar 29


private String name;
private DivineBeing baddDivineBeing;
public DivineBeing (String name) {
this.name = name ;
}
public void messWith (DivineBeing anotherDivineBeing) {
anotherDivineBeing.kapow(this);
}
public void kapow (DivineBeing baddDivineBeing) {
system.out.println(baddDivineBeing.getName()+”!!!!Damn
You!!”);
//forgive but not forget…
this.baddDivineBeing = baddDivineBeing;

}
public void makeRevenge() {
of (baddDivineBeing != null) {
baddDivineBeing.kapow(this);
}
}
public String getName() {
return name;
}
}

Gambar 4.Contoh penggunaan kata kunci this

beavis memulai gara-gara dengan memukul butthead, beavis memberikan

butthead referensi atas dirinya sendiri. Hal ini dilakukan dengan memberikan

argument this pada pemanggilan method kapow(divineBeing baddDivineBeing).

Dengan reference yang ia dapatkan itu , suatu saat butthead dapak balik mengirim

pesan makeRevenge() ke beavis.butthead ingat betul siapa yang memukulnya,

karena sewaktu ia dipukul, ia menyimpan reference ke objek beavis itu pada

variabel baddDivineBeing miliknya, yang dideklarasikan pada baris 13. Praktek

diatas disebut Callback.

Penggunaan lain dari this dapat dilihat pada baris 15 dan 23. Pada baris

15, kita bermaksud menetapkan variabel name yang di deklarasikan pada baris 12,

tapi sekarang timbul konflik dalam penamaan variabel. Didalam daftar argumen

pemrograman java tingkat dasar 30


pada constructor kita juga mendefinisikan variabel lain yang juga bernama name

(baris 14). Jangkauan variabel name pada baris 12 mencakup semua ruang pada

class DivineBeing, sedangkan variabel name pada baris 14 mempunyai jangkauan

terbatas didalam constructor itu. Untuk mengatakan saya menginginkan name

yang global bukan name yang lokal, kita menerobos keluar dengan keyword this.

Dapat dilihat pada gambar 5.

class DivineBeing {
private String name;

private DivineBeing baddDivineBeing;


public DivineBeing (String name ) {

this.name = name ;

Gambar 5.Out Of The Box Experience

II.13 Abstract

Abstract method adalah method yang belum mempunyai implementasi.

Kita dapat menyatakan suatu method abstract dengan membubuhkan keyword

abstract pada deklarasi method tersebut. Secara umum sintaks dari pendeklarasian

method abstract :

abstract return-type namamethod ([daftar-parameter]);

Contoh:

public class ExplainAbstract {


public static void main (String args[]) {
Penyanyi joshua = new Pnyanyi();
joshua.berkesenian();
Pemrogram raka = new Pemrogram();
raka.berkesenian();

pemrograman java tingkat dasar 31


}
}

abstract class Seniman {


public abstract void berkesenian();
public void tidur() {
system.out.println (“ZZZZ…”);
}
}

class Pemrogram extends Seniman {


public void berkesenian() {
system.out.println(“tap…tap…click-
click…tap…PLAK ! Click…DOR !!!”);
}
public void tidur() {
system.out.println(“Buzzz…ngingggg….”);
}
}

class Penyanyi extends Seniman {


public void berkesenian() {
system.out.println(“Tralala-Trilili…”);
}
}

Gambar 6. Contoh Pendeklarasian method abstract

II.14 Static method

Pada contoh-contoh sebelumnya kita harus menginstantiasi/membuat

objek terlebih dahulu sebelum dapat menggunakan method-method atau

mengakses field-field pada class yang bersangkutan. Tapi dengan mendefinisikan

suatu field atau method sebagai static, kita dapat saja mengakses field method

tersebut tanpa harus melakukan instantiasi terlebih dahulu. Perhatikan contoh

berikut :

public class MyGeomUtil {


int iAmNotPopular = 13; static int iAmCelebrity = 7;

public static double luasSegiempat (float length, float width) {


return length * width;

pemrograman java tingkat dasar 32


}
public static double luasSegitiga (float alas, float tinggi) {
return 0.5 * alas * tinggi;
}
public static double luasSegitiga (float A, float B, float gamma) {
//fungsi sin (double angel) menerima masukan sudut
//dalam radian angle not angel, you prevert..!
return 0.5 * A * B * Math.sin(gamma / Math.PI);
}
}

Gambar 7. Definisi MyGeomUtil

II.15 Final

Dengan menambahkan modifier final pada deklarasi sebuah

method, kita menetapkan bahwa method pada class tersebut tiidak bisa ditimpa

pada subclass yang kelak mungkin akan dibuat. Salah satu alasan untuk

membubuhkan final pada method di sebuah base class adalah karena method itu

begitu fundamental bagi kerja instance class tersebut, sehingga jika di

implementasikan secara berbeda oleh subclassnya ( yang bisa saja ditulis oleh

programer yang salah ) berpotensi menyebabkan kerja instance itu tidak benar.

Bentuk umum final method :

[modifier-modifier] final namamethod() {


//…mmmm…..
}

Final juga bisa diberlakukan bagi class, kita tidak dapat membuat turunan

dari class final. Bentuk umum final class :

final class namaclass extends parentclass {


//…mmm…
}

pemrograman java tingkat dasar 33


II.16 Interface

Pada Interface juga kita dapat mendeklarasikan method-method, field-

field (dengan beberapa catatan tentunya), dan juga dapat membuat rantai

inheritance seperti yang dilakukan pada class. Lihat contoh program dibawah ini

import java.awt.*;
import java.awt.event.*;

public class AustinPower extends Frame implements MouseListener {


Button behave;

public static void main (String args[]) {


AustinPower asyWhoShaggedMe = new AustinPower();
spyWhoShaggedMe.setSize(100,100);
spyWhoShaggedMe.setVisible(true);
}

public AustinPower() {
behave = new Button (“I Am a Button”);
behave.addMouseListener(this);
add(behave);
}

public void mouseEntered(MouseEvent me) {


behave.setLabel (“Click me…!!!”);
}

public void mouseExited(MouseEvent me) {


behave.setLabel (“Come to me…!!!”);
}
public void mousePressed(MouseEvent me){}
public void mouseReleased(MouseEvent me){}
public void mouseClicked(MouseEvent me){}
}

Gambar 8. Penggunaan Interface

Sedangkan interface MouseListener seperti tertera dibawah ini :

package java.awt.event;

pemrograman java tingkat dasar 34


import java.util.EventListener;
/**
* The listener interface for receiving mouse event on a
* Component.
* @version 1.7 07/01/98
* @author Carl Quinn
*/
public interface MouseListener extends EventListener {
public void mouseClicked (MouseEvent e);
public void mousePressed (MouseEvent e);
public void mouseReleased (MouseEvent e);
public void mouseEntered (MouseEvent e);
public void mouseExited (MouseEvent e);
}

Gambar 9. Deklarasi interface MouseListener

Pada contoh diatas, kita mengatakan bahwa AustinPower

mengimplementasikan MouseListener. Secara umum interface dapat

dideklarasikan sebagai berikut :

interface namainterface [extends parentinterface] {


[deklarasi field-field (konstanta)]
[deklarasi method-method]

Mendeklarasikan method dalam interface mirip dengan mendeklarasikan

method abstract, dimana deklarasi method tidak diakhiri pasangan kurung

kurawal, melainkan tanda titik koma :

return-type namamethod ([daftar parameter]);

Ada satu catatan, field-field yang didefinisikan pada interface secara

otomatis bersifat static dan final, yang berarti mereka hanya bertindak sebagai

konstanta.

Sedangkan secara umum, suatu class dibuat agar mengimplementasikan

suatu interface dengan cara sebagai berikut :

pemrograman java tingkat dasar 35


class namaclass [extends parentclass] [implements interface1,interface2,
…]
{ [deklarasi field-field]
[deklarasi method-method milik class ini]

[deklarasi implementasi method-method yang terdefinisikan pada


interface-interface yang di implementasi oleh class
tersebut]
}

Pada contoh diatas dengan mengimplementasikan MouseListener, class

AustinPower dikatakan menandatangai suatu kontrak yang menyatakan bahwa ia

mampu menunjukkan kelakuan-kelakuan seorang MouseListener (yaitu bereaksi

terhadap event-event yang berhubungan dengan Mouse).

Semua method yang terdefinisi pada interface adalah betul-betul

abstract, tidak ada implementasinya. Salah satu konsekuensi dari totalitas

abstraksi pada interface itu adalah semua method yang tertera pada interface harus

di implementasikan oleh implementor.

II.17 Polymorphism

Polymorphism didefinisikan sebagai kemampuan beberapa objek bertipe

sama bereaksi secara berbeda terhadap message yang sama. Lihat contoh dibawah

ini :

public class KattParty {


public static void main (String args[]) {
Katt[] kandangKatt = new Katt[3];
kandangKatt[0] = new Anggora();
kandangKatt[1] = new Siam();
kandangKatt[2] = new Katt();
for (int I = 0 ; I < 3 ; I++) {
kandangKatt[I].speak();
}
}
}
Gambar 10. Pesta Kucing

pemrograman java tingkat dasar 36


Disetiap iterasi pada loop diatas, pada dasarnya kita mengirimakan pesan

yang sama ke objek-objek yang bertipe sama (yaitu Katt, sesuai dengan definisi

array pada baris 3), speak(). Walaupun begitu, ternyata masing-masing bereaksi

dengan caranya sendiri-sendiri.

Contoh lain dari polymorphism yaitu, misalkan kita membuat aplikasi

client/server, dimana client mengirimkan objek-objek Katt (dan tentunya bisa juga

apapun turunan Katt) ke server. Pada kasus tersebut, server bersedia menerima

Kat-Kat itu tanpa terlalu mempermasalahkan perbedaan spesifikasinya. Untu itu

kode diserver bisa jadi seperti berikut:


Katt k = null;
while (true) {
k = receive();
}

Tentunya untuk kasus ini, tidaklah tepat jika, secara static kita

mengasosiasikan k dengan class Siam (misal dengan pendeklarasian Siam k =

null). Pada kode diatas, pengasosiasian k dengan clas spesifik (Anggora, Siam

atau lainnya) dilakukan pada saat run-time, yaitu ketika return Value dari

pemanggilan receive() di-assign ke k. Itulah yang disebut dynamic/late binding.

II.18 Operator Instanceof

Bagaimana seandainya pihak server ingin mengetahui type spesifik dari

objek Katt yang diterimanya ? lihat contoh KattParty yang dimodifikasi berikut:

public class KattParty {


public static void main (String args[]) {
Katt[] kandangKatt = new Katt[3];
kandangKatt[0] = new Anggora();
kandangKatt[1] = new Siam();

pemrograman java tingkat dasar 37


kandangKatt[2] = new Katt();
for (int I = 0 ; I < 3 ; I++) {
kandangKatt[I].speak();
if (kandangKatt[I] instanceof Siam) {
System.out.println(“Wow, It’s a Siam…”);
} else if (kandangKatt[I] instanceof Anggora) {
System.out.println(“Look, they sent us
Anggora…”);
}else {
System.out.println(“Well…It could be Lucifer,” +
“ or Alleys or Regular Katt”);
System.out.println(“But one thing for sure…it’s
Katt” +
“ Praise the Lord”);
}
}
}
}
Gambar 11. To know more about Katt

Operator yang kita pakai adalah instanceof. A instanceof B, mengevaluai

apakah objek A bertipe B (B adalah nama class). Evaluasi itu menghasilkan nilai

true jika nama class dari objek A adalah B atau nama

parent/grandparent/greatgrandparent /seterusnya dari class dari objek A adalah B.

Evaluasi juga akan bernilai benar jika B adalah nama interface dan A

mengimplementasikan B. Begitu pula jika

parent/grandparent/greatgrandparent/seterusnya dari class objek A

mengimplementasi B.

Singkat kata. jika A instanceof B menghasilkan true, berarti objek A

dapat menunjukkan behavior yang disyaratkan oleh class atau interface B.

II.19 Package

Kita biasannya mengelompokkan class-class (dan juga interface-

interface) yang terkait (karena jenisnya/fungsinya/alasan lain) dalam sebuah

pemrograman java tingkat dasar 38


package. Mungkin ada baiknya jika class-class geometris yang kita buat

dikumpulkan dalam sebuah package bernama com.raka.geoms

/*simpan sebagai Graphic.java */


package com.raka.geoms;
public abstract class Shape {
…….
}
Gambar 12. Package---1

/* Simpan sebagai Rectangle java */


package com.raka.geoms;
public class Rectangle extends Shape {
……………
}
Gambar 13. Package---2

/* Simpan sebagai Triangle.java */


package com.raka.geoms;
public class Triangle extends Shape {
……………
}
Gambar 14. Package---3

Beberapa keuntungan mengorganisasi class-class buatan kita dalam

sebuah package adalah :

1. Terhindar dari konflik penamaan. Mungkin saja ada orang lain,

dibelahan dunia lain, membuat class yang bernama Rectangle juga.

Yang membedakan antara Rectangle kita dengan yang lain adalah fully

qualified name. Fully qualified name dari class Rectangle kita adalah

com.raka.geoms.Rectangle.

2. Teratur. Mendapatkan suatu class tertentu akan mudah dengan

mengetahui nama package-nya.

Pada contoh diatas, masing-masing anggota dari package

com.raka.geoms disimpan di file terpisah, dan dideklarasikan sebagai public.

pemrograman java tingkat dasar 39


dengan demikian class/program lain (yang bukan anggota com.raka.geoms) dapat

mengimport clas-class kita diatas. Kita juga dapat mendefinisikan beberapa class

sekaligus dalam sebuah file java, seperti contoh berikut :

/* Simpan sebagai NuclearWarHead.java */


package com.raka.lethal;

public class NuclearWarHead {


……………
}
class Sarin {
………………….
}
class Uzi {
………………….
}
Gambar 15. All in Life

Jika kita kompilasi NuclearWarHead.java diatas, kita akan mendapatkan

tiga file class, yaitu NuclearWarHead.class,Sarin.class, Uzi.class. Kesemuanya

akan menjadi anggota dari package com.raka.lethal. Akan tetapi hanya

NuclearWarHead yang bisa digunakan secara langsung dari luar package

com.raka.lethal, karena hanya NuclearWarHead yang dideklarasikan sebagai

public, selebihnya dedeklarasikan sebagai protected (defaultnya), sehingga hanya

dapat digunakan oleh class-class yang tergabung didalam com.raka.lethal.

Sekarang untuk menggunakan class-class yang terdapat pada

com.raka.geoms dari luar com.raka.geoms, kita mengenal kata kunci import.

Seperti contoh dibawah ini:

package com.drawworks.threedee;
import com.raka.geoms.*;
……

public class Cube {


……
Rectangle r = new Rectangle ();

pemrograman java tingkat dasar 40


…..
}
…..
Gambar 16. Mengimpor class.

Jika pemrogram com.drawworks.threedee bermaksud menggunakan

class-class yang terdapat pada java.awt juga dimana terdapat juga class Rectangle,

maka saat inilah digunaka fully qualified name. seperti contoh dibawah ini :

package com.drawworks.threedee;
import com.raka.geoms.*;
import java.awt.*;
……

public class ThreeWorld extends Canvas {


……
com.raka.geoms.Rectangle r = new com.raka.geoms.Rectangle ();
…..
}
…..
Gambar 17. Fully Qualified Name

Package-package didalam harddisk dapat kita organisasikan dalam suatu

struktur direktori. File-file class anggota com.raka.geoms terkumpul dalam

struktur direktori. Anda boleh mengambil kesimpulan bahwa tiap-tiap suku kata

pada nama package adalah nama sebuah direktori.

II.20 Penanganan Eksepsi

Eksepsi adalah keadaan tidak normal yang muncul pada suatu bagian

program pada saat dijalankan. Penanganan eksepsi pada java membawa

pengelolaan kesalahan program saat dijalankan kedalam orientasi-objek. Eksepsi

java adalah objek yang menjelaskan suatu keadaan eksepsi yang muncul pada

suatu bagian program.

pemrograman java tingkat dasar 41


Saat suatu keadaan eksepsi muncul, suatu objek exception dibuat dan

dimasukkan ke dalam method yang menyebabkan eksepsi. Method tersebut dapat

dipilih untuk menangani eksepsi berdasarkan tipe tertentu. Method ini juga

menjaga agar tidak keluar terlalu dini melalui suatu eksepsi, dan memiliki suatu

blok program yang dijalankan tepat sebelum suatu eksepsi menyebabkan

metodenya kembali ke pemanggil.

Eksepsi dapat muncul tidak beraturan dalam suatu method, atau dapat

juga dibuat secara manual dan nantinya melaporkan sejumlah keadaan kesalahan

ke method yang memanggil.

II.20.1 Dasar-dasar penanganan Eksepsi

Penanganan eksepsi pada java diatur dengan lima kata kunci : try, catch,

throw, throws dan finally. Pada dasarnya try digunakan untuk mengeksekusi suatu

bagian program, dan jika muncul kesalahan, sistem akan melakukan throw suatu

eksepsi yang dapat anda catch berdasarkan tipe eksepsinya, atau yang anda

berikan finally dengan penangan default.

Berikut ini bentuk dasar bagian penanganan eksepsi :

try {
// Block of Code
}
catch (ExceptionType1 e) {
// Exception Handler for ExceptionType1
} catch (ExceptionType2 e) {
// Exception Handler for ExceptionTYpe2
throw (e); // re-throw the Exception…
}
finally {
}

pemrograman java tingkat dasar 42


II.20.2 Tipe Eksepsi

Dipuncak hirarki class eksepsi terdapat satu class yang disebut

throwable. Class ini digunakan untuk merepresentasikan semua keadaan ekasepsi.

Setiap ExceptionType pada bentuk umum diatas adalah subclass dari throwable.

Dua subclass langsung throwable didefinisikan untuk membagi class

throwable menjadi dua cabang yang berbeda. Satu, class Exception, digunakan

untuk keadaan eksepsi yang harus ditangkap oleh program yang kita buat.

Sedangkan yang lain diharapkan dapat menangkap class yang kita subclasskan

untuk menghasilkan keadaan eksepsi.

Cabang kedua throwable adalah class error, yang mendefinisikan

keadaan yang tidak diharapkan untuk ditangkap dalam lingkungan normal.

II.20.3 Eksepsi Yang Tidak Dapat Ditangkap

Obyek eksepsi secara otomatis dihasilkan oleh runtime java untuk

menanggapi suatu keadaan eksepsi. Perhatikan contoh berikut :

class Exc0 {
public static void main (Stinr args[]) {
int d = 0;
int a = 42 / d;
}
}

Saat runtime java mencoba meng-eksekusi pembagian, akan terlihat

bahwa pembaginya adalah nol, dan akan membentuk objek eksepsi baru yang

menyebabkan program terhenti dan harus berurusan dengan keadaan kesalahan

tersebut. Kita belum mengkodekan suatu penangan eksepsi, sehingga penanganan

eksepsi default akan segera dijalankan. Keluaran dari program diatas:

pemrograman java tingkat dasar 43


java.lang.ArithmeticExpression : /by zero
at Exc0.main (Exc0.java:4)

Berikut adalah contoh lainnya dari eksepsi :

class Exc1 {
static void subroutine() {
int d = 0;
int a = 42 / d;
}

public static void main (Stinr args[]) {


Exc1.subroutine();
}
}

Output-nya :

java.lang.ArithmeticException : / by zero
at Exc1.subroutine(Exc1.java :4)
at Exc1.main(Exc1.java : 7)

II.20.4 Try dan Catch

Kata kunci try digunakan untuk menentukan suatu blok program yang

harus dijaga terhadap semua eksepsi, setelah blok try masukkan bagian catch,

yang menentukan tipe eksepsi yang akan ditangkap. Perhatikan contoh berikut:

class Exc2 {
public static void main (String args[]) {
try {
int d = 0;
int a = 42 / d;
}
catch (ArithmeticException e) {
System.out.println(“Division By Zero);
}
}
}

pemrograman java tingkat dasar 44


II.20.5 Throw

Pernyataan throw digunakan untuk secara eksplisit melemparkan suatu

eksepsi. Pertama kita harus mendapatkan penanganan dalam suatu instance

throwable, melalui suatu parameter kedalam bagian catch, atau dengan

membuatnya menggunakan operator new. Bentuk umum pernyataan throw:

throw ThrowableInstance;

Aliran eksekusi akan segera terhenti setelah pernyataan throw, dan

pernyataan selanjutnya tidak akan dicapai. Blok try terdekat akan diperiksa untuk

melihat jika telah memiliki bagian catch yang cocok dengan tipe instance

Throwable. Jika tidak ditemukan yang cocok, maka pengaturan dipindahkan ke

pernyataan tersebut. Jika tidak, maka blok pernyataan try selanjutnya diperiksa,

begitu seterusnya sampai penanganan eksepsi terluar menghentikan program dan

mencetak penelusuran semua tumpukan sampai pernyataan throw. Contoh :

class throwDemo {
static void demoProc() {
try {
throw new NullPointerException(“demo”);
}
catch (NullPointerException e) {
System.out.println(“caught inside demoproc…”);
throw e;
}
}

public static void main (String args[]) {


try {
demoproc();
}
catch (NullPointerException e) {
System.out.println(“recaugt : “ + e);
}
}
}

Output :

pemrograman java tingkat dasar 45


caught inside demoproc
recaught : java.lang.NullPointerException : demo

II.20.6 Throws

Kata kunci throws digunakan untuk mengenali daftar eksepsi yang

mungkin di-throw oleh suatu method. Jika tipe eksepsinya adalah error, atau

RuntimeException, atau suatu subclassnya, aturan ini tidak berlaku, karena tidak

diharapkan sebagai bagian normal dari kerja program.

Jika suatu method secara eksplisit men-throws suatu intans dari

Exception atau subclassnya, diluar RuntimeException, kita harus mendeklarasikan

tipenya dengan pernyataan throws. ini mendefinisikan ulang deklarasi method

sebelumnya dengan sintaks sbb:

type method-name (arg-list) throws exception-list { }

Contoh :

class ThrowsDemo {
static void procedure () thorws IllegalAccessException {
System.out.println(“Inside Procedure”);
throw new IllegalAccessException(“demo”);
}

public static void main(String args[]) {


try {
procedure();
}
catch (IllegalAccessException e) {
System.out.println(“caught “+ e);
}
}
}

Output :
Inside procedure
caught java.lang.IllegalAccessException : demo

pemrograman java tingkat dasar 46


II.20.7 Finally

Saat suatu eksepsi dilemparkan, alur program dalam suatu method

membuat jalur yang cenderung tidak linier melalui method tersebut, melompati

baris-baris tertentu, bahkan mungkin akan keluar sebelum waktunya pada kasus

dimana tidak ada bagian catch yang cocok. Kadang-kadang perlu dipastikan

bahwa bagian program yang diberikan akan berjalan, tidak perduli eksepsi apa

yang terjadi dan ditangkap. Kata kunci finally dapat digunakan untuk menentukan

bagian program seperti itu.

Setiap try membutuhkan sekurang-kurangnya satu bagian catch atau

finally yang cocok. Jika kita tidak mendapatkan bagian catch yang cocok, maka

bagian finally akan dieksekusi sebelum akhir program, atau setiap kali suatu

method akan kembali ke pemanggilnya, melalui eksepsi yang tidak dapat

ditangkap, atau melalui pernyataan return, bagian finally akan dieksekusi sebelum

kembali ke method kembali.

Berikut adalah contoh program yang menunjukkan beberapa method

yang keluar dengan berbagai cara, tidak satu pun tanpa mengeksekusi bagian

finally-nya.

class finallyDemo {
static void proA() {
try {
System.out.println(“Inside procA..”);
throw new RuntimeException(“Demo”);
}
finally {
System.out.println(“procA is finally”);
}
}

static void proB() {


try {
System.out.println(“Inside procB..”);

pemrograman java tingkat dasar 47


return;
}
finally {
System.out.println(“procB is finally”);
}
}

public static void main(String args[]) {


try {
procA{};
}
catch (Exception e);
procB();
}
}

Output :
Inside procA..
procA is finally
Inside procB..
procB is finally

II.21 Multithreading

Banyak persoalan dalam pemrograman membutuhkan kemampuan suatu

program untuk melakukan beberapa hal sekaligus, atau memberikan penanganan

segera terhadap suatu kejadian/ event tertentu dengan menunda aktivitas yang

sedang dijalankan untuk menangani event tersebut dan akhirnya kembali

melanjutkan aktivitas yang tertunda.

Contoh, dalam sistem aplikasi jaringan, kita dapat membuat suatu

program melakukan komputasi lokal dengan data yang sudah didapat dari

jaringan, pada saat program tersebut menunggu datangnya tambahan data dari

jaringan. Tanpa multithreading, program tersebut harus melakukannya secara

sekuensial dalam sebuah alur program tunggal (yaitu alur control utama), yang

diawali dengan penantian tibanya keseluruhan data, baru kemudian komputasi.

pemrograman java tingkat dasar 48


Pada masa penantian tersebut, komputer berada pada keadaan idle yang

menyebabkan ketidakefisienan pada keseluruhan program.

Dengan multithreading kita dapat menciptakan dua thread secara

dinamis, yaitu thread yang berjaga dipintu gerbang, menunggu masuknya data.,

dan thread yang melakukan komputasi lokal atas data yang sudah tersedia.

II.21.1 Multithreading dan Java

Thread (seringkali disebut juga lightweight process atau execution

context) adalah sebuah singlesequentialflow of control didalam sebuah program.

Secara sederhana, thread adalah sebuah subprogram yang berjalan didalam sebuah

program.

Seperti halnya sebuah program, sebuah thread mempunyai awal dan

akhir. Sebuah program dapat mempunyai beberapa thread didalamnya. Jadi

perbedaannya program yang multithreaded mempunyai beberapa flow of control

yang berjalan secara konkuren atau paralel sedangkan program yang

singlethreaded hanya mempunyai satu flow of control.

Sebuah
Thread

Sebuah Program

Thread
lainnya

Gb.1. Dua thread dalam satu program

pemrograman java tingkat dasar 49


Dua program yang dijalankan secara terpisah ( dari command line secara

terpisah ), berada pada dua address space yang terpisah. Sebaliknya, kedua thread

pada gambar diatas berada pada address space yang sama (address space dari

program dimana kedua thread tersebut dijalankan).

Kalau program itu berjalan diatas mesin dengan single processor, maka

thread-thread itu dijalankan secara konkuren (dengan mengeksekusi secara

bergantian dari satu thread ke thread yang lainnya). Jika program itu berjalan

diatas mesin dengan multiple processor, maka thread-thread itu bisa dijalankan

secara paralel (masing-masing thread berjalan di processor yang terpisah).

Concurrency Parallelism

Time Time

Task I Task 2
T
a
s T
k a
s
1 k

Gb.2. Konkurensi dan parallelism

Gambar 2 dapat menjelaskan perbedaan antara konkurensi dan

parallelism. Bahasa Java mempunyai kemampuan multithreading built-in, pada

Java Virtual Macjine terdapat thread scheduler yang menentukan thread mana

pemrograman java tingkat dasar 50


yang beraksi pada selang waktu tertentu. Scheduler pada JVM mendukung

preemptive multithreading, yaitu suatu thread dengan prioritas tinggi dapat

menyeruak masuk dan menginterupsi thread yang sedang beraksi, kemampuan ini

sangat menguntungkan dalam membuat aplikasi real-time.

Scheduler pada JVM juga mendukung non-preemptive multithreading

I(atau sering disebut juga cooperative multithreading), yaitu thread yang sedang

beraksi tidak dapat diinterupsi, ia akan menguasai waktu CPU, sampai ia

menyelesaikan tugasnya atau secara eksplisit merelakan diri untuk berhenti dan

memberi kesempatan bagi thread yang lain.

II.21.2 Daur Hidup sebuah Thread

Blocke
d
stop()

suspend()
sleep()
wait() Dead
New
Born

stop()

resume()
notify()

start() stop()

Runnabl Runnin
e g

yield()

Gb.3. State-state dari thread

pemrograman java tingkat dasar 51


Newborn
Sebuah thread berada pada state ini ketika dia di instantiasi. Sebuah

ruangan dimemori telah dialokasikan untuk thread itu,dan telah menyelesaikan

tahap inisialisasinya.

………
Thread timerThread = new TimerThread();
……..

Pada state ini, timeThread belum masuk dalam skema penjadwalan

thread scheduler.

Runnable
Pada state ini, sebuah thread berada dalam skema penjadwalan, akan

tetapi dia tidak sedang beraksi. Kita bisa membuat timerThread yang kita buat

sebelumnya masuk ke state runnable dengan :

…..
timerThread.start();
……

Kapan tepatnya timerThread beraksi, ditentukan oleh thread scheduler.

Running
Pada state ini, thread sedang beraksi. Jatah waktu beraksi bagi thread ini

ditentukan oleh thread scheduler. Pada kasus tertentu, thread scheduler berhak

meng-interupsikegiatan dari thread yang seddang beraksi (misalnya ada thread

lainnya dengan prioritas yang lebih tinggi).

Thread dalam keadaan running bisa juga lengser secara sukarela, dan

masuk kembali ke state runnable, sehingga thread lain yang sedang menunggu

pemrograman java tingkat dasar 52


giliran(runnable) memperoleh kesempatan untuk beraksi. Tinddakan thread yang

lengser secara sukarela itu biasanya disebut yield-ing.

public void run() {


…….
Thread.yield();
…….
}
Blocked

Pada tahap inii thread sedang tidak beraksi dan diabaikan dalam

penjadwalan thread scheduler. Thread yang sedang terblok menunggu sampai

syarat-syarat tertentu terpenuhi, sebelum ia kembali masuk kedalam skema

penjadwalan thread scheduler (masuk state runnable lagi). Suatu thread menjadi

terblok karena hal-hal berikut :

a. Thread itu tidur untuk jangka waktu tertentu, seperti berikut :

public void run() {


……
try {
thread.slepp(3000);
//thread yg sedang beraksi akan tidur selama 3000
milisecond=3menit
}
catch (InterruptedException e) {
…….
}

b. Thread itu di- suspend(). Thread yang ter-suspend() itu bisa masuk kembali ke

state runnable bila ia resume(). seperti hal berikut:

……
//timerThread akan segera memasuki state blocked
timerThread.suspend();
………
timerThread.resume();
//timerThread kembali masuk state runnable
……

pemrograman java tingkat dasar 53


c. Bila thread tersebut memanggil method wait() dari suatu object yang sedang ia

kunci. Thread tersebut bisa kembali memasuki state runnable bila ada thread

lain yang memanggil method notify() atau notifyAll() dari object tersebut.

d. Bila thread ini menunggu selesainya aktifitas yang berhubungan dengan I/O.

Misalnya, jika suatu thread menunggu datangnya bytes dari jaringan komputer

maka secara otomatis thread tersebut masuk ke state blocked.

e. Bila suatu thread mencoba mengakses critical section dari suatu object yang

sedang dikunci oleh thread lain. Critical section adalah method/blok kode yang

ditandai dengan kata synchronized.

Dead
Suatu thread secara otomatis disebut mati bila method run() – nya sudah

dituntaskan (return dari method run() ). Contoh dibawah ini adalah thread yang

akan mengecap state running hanya sekali saat thread scheduler memberinya

kesempatan untuk running, ia akan mencetak “ I’m doing something….something

stupid….but I’m proud of It”… kemudian mati.

public class MyThread extends Thread {


…..
public void run() {
System.out.print(“I’m doing something…”);
System.out.print(“something stupid…”);
System.out.println(“but I’m proud of It…”);
// MyThread akan mati begitu baris diatas selesai
dieksekusi
}
……
}

pemrograman java tingkat dasar 54


DAFTAR PUSTAKA

- Rahmat Hakim S, Sutarto, “Mastering Java”, PT. Elex Media


Komputindo, Jakarta, 2009.

- Rangsang Purnama, “Tuntunan Pemrograman Java Jilid 3”, Prestasi


Pustaka, Jakarta, 2005.

- Sinaga B.L, “Pemrograman Berorientasi Objek dengan Java”, Gava


Media, Yogyakarta, 2004.

- Prasetyo D.D, “Solusi Membuat Aplikasi Java dengan Java Studio”, Elex
Media Komputindo, Jakarta, 2004.

- Bambang Hariyanto, “Esensi-esensi Bahasa Pemrograman Java”,


Informatika, Bandung, 2005.

pemrograman java tingkat dasar 55


COVER BUKU YANG DISADUR

pemrograman java tingkat dasar 56


pemrograman java tingkat dasar 57
DAFTAR ISI BUKU YANG DISADUR

pemrograman java tingkat dasar 58


pemrograman java tingkat dasar 59
pemrograman java tingkat dasar 60
pemrograman java tingkat dasar 61
pemrograman java tingkat dasar 62

Anda mungkin juga menyukai