KATA PENGANTAR
Yang Maha Kuasa atas limpahan Rahmat-Nya sehingga buku saduran dengan
selesaikan.
Buku ini disusun hanya untuk kalangan sendiri yaitu UPT Pelatihan
Penulis juga mengucapkan banyak terima kasih atas dukungan semua pihak yang
telah mendukung pembuatan buku ini sehingga buku ini dapat terselesaikan.
Penulis,
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
pelajaran yang membekali siswa agar dapat membangun sebuah aplikasi atau
atau konsep berupa logika dan algoritma yang dikemukakan orang lain dan
I.2 Tujuan
Jember sehingga peserta pelatihan akan terarah sesuai dengan tujuan dari
proses latihan.
perusahaan Sun yang dimotori oleh James Gosling mempunyai keinginan untuk
peralatan konsumen seperti kotak tombol saluran TV. Proyek ini kemudian diberi
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
nama pohon yang tumbuh tepat diluar jendela kantornya di Sun), tetapi kemudian
nama Oak diubah menjadi java, karena nama Oak merupakan nama bahasa
Andreessen dengan bayaran $6.85 per jam, sebagai mahasiswa yang melakukan
studi praktek. Di kemudian hari ia meraih ketenaran sebagai salah seorang pendiri
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
diperlihatkan pada SunWorld ’95 pada tanggal 23 mei 1995, yang mengilhami
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.
objek pada Java pada dasarnya adalah sama dengan C++. Feature pemrograman
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
Java dan C++ adalah Java memiliki sebuah model pointer yang mengurangi
corrupt).
Aman (Secure)
Java dimaksudkan untuk digunakan pada jaringan terdistribusi. Sebelum
syaraf, program yang di kompile dapat dijalankan pada banyak prosesor, disini
diberikan sistem run time dari Java. Kompiler Java melakukannya dengan
arsitektur komputer tertentu. Dan yang lebih baiik Java dirancang untuk
Portabel (Portable)
Tidak seperti pada C dan C++, di Java terdapat ketergantungan pada saat
Interpreter
Interpreter Java dapat meng-eksekusi kode byte Java secara langsung
dalam Java merupakan proses yang kenaikannya tahap demi tahapdan berbobot
ringan, maka proses pengembangan dapat menjadi lebih cepat dan masih dalam
penelitian.
memadai, tetapi masih terdapat situasi yang memerlukan kinerja yang lebih tinggi.
Multithreaded
Multithreading adalah kemampuan sebuah program untuk melakukan
lebih dari satu pekerjaan sekaligus. Keuntunga dari multithreading adalah sifat
Dinamis
Dalam sejumlah hal, Java merupakan bahasa pemrograman yang lebih
menambah metode dan variabel contoh yang baru tanpa banyak mempengaruhi
memenuhi janji sebagai pemrograman berorientasi objek. Jadi apa yang salah dari
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
program yang disimpan dalan punch card, penghubung alat pemrograman adalah
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
Goto
Beberapa kemampuan yang digunakan sebagai cara cepat untuk
keadaan eksepsi.
Java tidak memiliki pernyataan goto. Java menyediakan kata goto hanya
bagian break yang diberi label dan pernyataan continue yang merupakan bagian
dimana goto boleh dipergunakan. Penanganan eksepsi yang ampuh dan terdefinisi
Pointer
ampuh juga paling berbahaya. Biasanya kesalahan terjadi karena “kurang satu
tempat” atau rusaknya data yang disimpan karena lokasi memori terakhir
dimemori.Di Java kita tidak dapat menulis sebelum akhir lokasi yang disediakan
untuk array.
Alokasi Memori
Kemampuan C++ yang sama berbahayanya dengan pengolahan
diwujudkan dengan keunggulan dan kelemahan fungsi library malloc() dan free().
mengeluarkan address blok tersebut. Fungsi free, mengirimkan blok yang telah
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
bilangan bulat dan pecahan dengan berbagai rentang nilai dan ketelitian. Rentang
nilai dan ketelitian tipe ini bervariasi bergantung pada implementasi kompilernya.
untuk semua tipe numerik dasar dan menyatukannya. Arsitektur tertentu akan
data yang bergantung hardware secara ketat pada interpreter Java yang diberikan,
tetapi inilah satu-satunya cara untuk menjamin hasil yang dapat dibuat ulang pada
Penggunaan ini, walaupun tidak baik, tetapi cukup aman. Tentu saja
sepanjang sizeof (struct p).ini harus digunakan dengan sangat hati-hati karena
tidak ada syarat untuk memeriksa apakah kita telah memilih tipe dengan benar.
tipe selama program berjalan, dan menghasilkan eksepsi jika terjadi kegagalan.
Sangat menyenagkan jika Java memiliki cara yang aman terhadap tipe
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
yang di-compile dilakukan melalui file header-nya, maka kode yang telah di-
compile sangat bergantung pada apa yang ada pada file header tersebut.
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
berjalan, jadi sama sekali tidak ada cara untuk mengakses variabel private dari
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 ,
Peng-hacker-an Preprocessor
Untuk mewujudkan keinginan memiliki model yang jelas untuk ditulis
oleh programmer, compiler C dan C++ menggunakan tool yang sama dengan
preprocessor C yang tugasnya mencari perintah khusus yang diawali tanda pagar
dibaca.
QED
Berasal dari bahasa latin Quod Erat Demonstrandum, yang berarti
“Terbuktikan..!!!”.
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 :
komentar.
compiler.
contoh penulisan :
/*
* komentar…….
* komentar……
*/
3. Komentar terdokumentasi
contoh penulisan :
/**
* komentar….
* komentar…..
*/
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 :
berupa urutan tertentu huruf (besar atau kecil), angka, garis bawah, dan tanda
dolar. Tidak boleh diawali oleh angka dan bersifat case sensitive.
method public dan variabel instans dengan huruf awal kecil dan menandai bagian
getTimeOfDay.
Untuk variabel provate dan lokal identifier akan berupa huruf kecil
variabel final yang mewakili suatu konstanta, digunakan huruf besar semua,
Literal
Besaran konstanta pada Java dihasilkan dengan menggunakan literal
yang mewakilinya. Setiap literal merepresentasikan nilai suatu tipe, dimana tipe
penyimpanannya.
Separator (Pemisah)
Variabel
variabel adalah satuan dasar penyimpanan dalam program Java. Suatu
sementara, misalnya didalam perulangan for, atau dapat juga berupa variabel
instans yang dapat diakses oleh semua method dalam class. Cakupan lokal
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
Integer
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.
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
1. Jika tipe operand adalah double, maka yang lain juga akan
sebagai float.
3. Jika operand adalaha long, maka yang lain juga akan diperlakukan
sebagai long.
Dimana kita dapat memberikan nilai variabel suatu tipe disebelah kiri ke
II.6 Operator
Assignment Operator ( = )
Arithmetic Operator
Operator Operation
+ Addition
- Subtraction
* Multiplication
/ Division
% Modulo
Bitwise Operator
Operator Operation
& AND
| OR
^ XOR
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
() [] .
++ -- ~ !
* / %
+ -
>> >>> <<
> >= < <=
== !=
&
^
|
&&
II.7.1 Percabangan
if – else
Bentuk if-else menyebabkan eksekusi dijalankan melalui sekumpulan
keadaan boolean sehingga hanya bagian tertentu program yang dijalankan. Bentuk
statement tunggal atau dapat berupa satu blok statement yang ditandai dengan
break
Java tidak memiliki pernyataan goto. Penggunaan goto adalah untuk
dan mengurangi optimasi compiler tertentu. Pernyataan break pada Java dirancang
untuk mengatasi semua kasus tersebut. Istilah break mengacu kepada proses
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
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;
}
value yang disebutkan pada pernyataan case harus berupa tipe yang cocok.
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,
return
Java menggunakan bentuk sub-routine yang disebut method untuk
saatnya dihentikan.
while
While adalah pernyataan perulangan yang paling mendasar pada Java.
pernyataan while :
[initialization;]
while (termination)
{ body program ;
[iteration;]
}
do-while
Penggunaan pernyataan do –while menyebabkan body program akan
for
Pernyataan for adalah cara praktis untuk menyatakan suatu perulangan.
Pernyataan koma
Kadang-kadang ada keadaan dimana kita ingin memasukkan lebih dari
satu pernyataan inisialisasi atau terminasi, Java menyediakan cara lain untuk
pernyataan for.
continue
Pernyataan continue akan menghentikan iterasi yang bersangkutan tetapi
/*
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();
pada Gambar 1. Pada Gambar 2 merupakan kode dari sebuah aplikasi java yang
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
type namafield;
Tipe dari field bisa primitif (seperti int, boolean, float, dan sebagainya),
dan bisa juga Object (seperti String, Vector, Hashtable, dan sebagainya).
sepanjang baris 14-16 (method void), method sayHelloOutLoud() pada baris 17-
19 (method void), dan method getName() pada baris 20-22 (method non-void).
Tipe Return bisa void, tipe data primitif, atau tipe data object. Method
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.
pada saat penciptaan objek dari sebuah class. Pendeklarasian constructor mirip
Hal lain yang perlu dicatat tentang constructor adalah, nama constructor
gambar 2). Setelah itu, reference ng dapat digunakan untuk memanggil method-
yang bersangkutan.
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
class Katt {
public Katt() {
system.out.println(“Katt Constructor”);
}
public void speak() {
system.out.println(“Miaww…”);
}
}
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
superclass) dari class Anggora. Secara umum kita dapat mendefinisikan suatu
Kita membuat varian baru lain dari Katt dengan cara mengeong
sebagai subclass dari Katt, tapi kini kita melakukan metode overiding, kita
mendefinisikan ulang method speak() didalam definisi class Siam. Jika dijalankan
objek bertipe Siam. Default constructor Katt dijalankan terlebih dahulu. Ini
menunjukkan bahwa default, kecuali kita minta yang lain, dari baseclass secara
bersangkutan.
II.12 This
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
class DivineBeing {
}
public void makeRevenge() {
of (baddDivineBeing != null) {
baddDivineBeing.kapow(this);
}
}
public String getName() {
return name;
}
}
butthead referensi atas dirinya sendiri. Hal ini dilakukan dengan memberikan
Dengan reference yang ia dapatkan itu , suatu saat butthead dapak balik mengirim
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
(baris 14). Jangkauan variabel name pada baris 12 mencakup semua ruang pada
yang global bukan name yang lokal, kita menerobos keluar dengan keyword this.
class DivineBeing {
private String name;
this.name = name ;
II.13 Abstract
abstract pada deklarasi method tersebut. Secara umum sintaks dari pendeklarasian
method abstract :
Contoh:
suatu field atau method sebagai static, kita dapat saja mengakses field method
berikut :
II.15 Final
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
implementasikan secara berbeda oleh subclassnya ( yang bisa saja ditulis oleh
programer yang salah ) berpotensi menyebabkan kerja instance itu tidak benar.
Final juga bisa diberlakukan bagi class, kita tidak dapat membuat turunan
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 AustinPower() {
behave = new Button (“I Am a Button”);
behave.addMouseListener(this);
add(behave);
}
package java.awt.event;
otomatis bersifat static dan final, yang berarti mereka hanya bertindak sebagai
konstanta.
abstraksi pada interface itu adalah semua method yang tertera pada interface harus
II.17 Polymorphism
sama bereaksi secara berbeda terhadap message yang sama. Lihat contoh dibawah
ini :
yang sama ke objek-objek yang bertipe sama (yaitu Katt, sesuai dengan definisi
array pada baris 3), speak(). Walaupun begitu, ternyata masing-masing bereaksi
client/server, dimana client mengirimkan objek-objek Katt (dan tentunya bisa juga
apapun turunan Katt) ke server. Pada kasus tersebut, server bersedia menerima
…
Katt k = null;
while (true) {
k = receive();
}
…
Tentunya untuk kasus ini, tidaklah tepat jika, secara static kita
null). Pada kode diatas, pengasosiasian k dengan clas spesifik (Anggora, Siam
atau lainnya) dilakukan pada saat run-time, yaitu ketika return Value dari
objek Katt yang diterimanya ? lihat contoh KattParty yang dimodifikasi berikut:
apakah objek A bertipe B (B adalah nama class). Evaluasi itu menghasilkan nilai
Evaluasi juga akan bernilai benar jika B adalah nama interface dan A
mengimplementasi B.
II.19 Package
Yang membedakan antara Rectangle kita dengan yang lain adalah fully
qualified name. Fully qualified name dari class Rectangle kita adalah
com.raka.geoms.Rectangle.
mengimport clas-class kita diatas. Kita juga dapat mendefinisikan beberapa class
package com.drawworks.threedee;
import com.raka.geoms.*;
……
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.*;
……
struktur direktori. Anda boleh mengambil kesimpulan bahwa tiap-tiap suku kata
Eksepsi adalah keadaan tidak normal yang muncul pada suatu bagian
java adalah objek yang menjelaskan suatu keadaan eksepsi yang muncul pada
dipilih untuk menangani eksepsi berdasarkan tipe tertentu. Method ini juga
menjaga agar tidak keluar terlalu dini melalui suatu eksepsi, dan memiliki suatu
Eksepsi dapat muncul tidak beraturan dalam suatu method, atau dapat
juga dibuat secara manual dan nantinya melaporkan sejumlah keadaan kesalahan
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
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 {
}
Setiap ExceptionType pada bentuk umum diatas adalah subclass dari throwable.
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
class Exc0 {
public static void main (Stinr args[]) {
int d = 0;
int a = 42 / d;
}
}
bahwa pembaginya adalah nol, dan akan membentuk objek eksepsi baru yang
class Exc1 {
static void subroutine() {
int d = 0;
int a = 42 / d;
}
Output-nya :
java.lang.ArithmeticException : / by zero
at Exc1.subroutine(Exc1.java :4)
at Exc1.main(Exc1.java : 7)
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);
}
}
}
throw ThrowableInstance;
pernyataan selanjutnya tidak akan dicapai. Blok try terdekat akan diperiksa untuk
melihat jika telah memiliki bagian catch yang cocok dengan tipe instance
pernyataan tersebut. Jika tidak, maka blok pernyataan try selanjutnya diperiksa,
class throwDemo {
static void demoProc() {
try {
throw new NullPointerException(“demo”);
}
catch (NullPointerException e) {
System.out.println(“caught inside demoproc…”);
throw e;
}
}
Output :
II.20.6 Throws
mungkin di-throw oleh suatu method. Jika tipe eksepsinya adalah error, atau
RuntimeException, atau suatu subclassnya, aturan ini tidak berlaku, karena tidak
Contoh :
class ThrowsDemo {
static void procedure () thorws IllegalAccessException {
System.out.println(“Inside Procedure”);
throw new IllegalAccessException(“demo”);
}
Output :
Inside procedure
caught java.lang.IllegalAccessException : demo
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
finally yang cocok. Jika kita tidak mendapatkan bagian catch yang cocok, maka
bagian finally akan dieksekusi sebelum akhir program, atau setiap kali suatu
ditangkap, atau melalui pernyataan return, bagian finally akan dieksekusi sebelum
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”);
}
}
Output :
Inside procA..
procA is finally
Inside procB..
procB is finally
II.21 Multithreading
segera terhadap suatu kejadian/ event tertentu dengan menunda aktivitas yang
program melakukan komputasi lokal dengan data yang sudah didapat dari
jaringan, pada saat program tersebut menunggu datangnya tambahan data dari
sekuensial dalam sebuah alur program tunggal (yaitu alur control utama), yang
dinamis, yaitu thread yang berjaga dipintu gerbang, menunggu masuknya data.,
dan thread yang melakukan komputasi lokal atas data yang sudah tersedia.
Secara sederhana, thread adalah sebuah subprogram yang berjalan didalam sebuah
program.
Sebuah
Thread
Sebuah Program
Thread
lainnya
terpisah ), berada pada dua address space yang terpisah. Sebaliknya, kedua thread
pada gambar diatas berada pada address space yang sama (address space dari
Kalau program itu berjalan diatas mesin dengan single processor, maka
bergantian dari satu thread ke thread yang lainnya). Jika program itu berjalan
diatas mesin dengan multiple processor, maka thread-thread itu bisa dijalankan
Concurrency Parallelism
Time Time
Task I Task 2
T
a
s T
k a
s
1 k
Java Virtual Macjine terdapat thread scheduler yang menentukan thread mana
menyeruak masuk dan menginterupsi thread yang sedang beraksi, kemampuan ini
I(atau sering disebut juga cooperative multithreading), yaitu thread yang sedang
menyelesaikan tugasnya atau secara eksplisit merelakan diri untuk berhenti dan
Blocke
d
stop()
suspend()
sleep()
wait() Dead
New
Born
stop()
resume()
notify()
start() stop()
Runnabl Runnin
e g
yield()
tahap inisialisasinya.
………
Thread timerThread = new TimerThread();
……..
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
…..
timerThread.start();
……
Running
Pada state ini, thread sedang beraksi. Jatah waktu beraksi bagi thread ini
ditentukan oleh thread scheduler. Pada kasus tertentu, thread scheduler berhak
Thread dalam keadaan running bisa juga lengser secara sukarela, dan
masuk kembali ke state runnable, sehingga thread lain yang sedang menunggu
Pada tahap inii thread sedang tidak beraksi dan diabaikan dalam
penjadwalan thread scheduler (masuk state runnable lagi). Suatu thread menjadi
b. Thread itu di- suspend(). Thread yang ter-suspend() itu bisa masuk kembali ke
……
//timerThread akan segera memasuki state blocked
timerThread.suspend();
………
timerThread.resume();
//timerThread kembali masuk state runnable
……
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
e. Bila suatu thread mencoba mengakses critical section dari suatu object yang
sedang dikunci oleh thread lain. Critical section adalah method/blok kode yang
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
- Prasetyo D.D, “Solusi Membuat Aplikasi Java dengan Java Studio”, Elex
Media Komputindo, Jakarta, 2004.