You are on page 1of 63

DIk1A1

LMkCGkAMAN 8LkCkILN1ASI C8ILk







C
I I
ZE^d




UNIVLkSI1AS ISLAM MAkASSAk
kCGkAM S1UDI 1LkNIk INICkMA1IkA
IAkUL1AS 1LkNIk

INSTALASI J2SDK & SETTING PATH


Download distribusi J2SDK terbaru dari
http://java.sun.com/j2se/1.4.2/install-windows.html.
Di gambar ini J2SDK versi 1.4.2.19 telah berada pada
folder D:\Software\Misc. Lakukan double-click &
akan muncul Window seperti gambar di bawah
Klik tombol Next dan biarkan hingga instalasi selesai
Seluruh command file java secara otomatis akan berada pada folder
C:\j2sdk1.4.2_19\bin
Untuk Setting Path, klik kanan icon My
Computer Properties
Kemudian klik Menu Advanced system setting
Pada Window System
Properties, pilih tombol
Environment Variables
Tempatkan kursor pada
variable PATH dan klik
tombol Edit
Kembali ke Windows
Explorer, klik kanan address
bar pada posisi folder
C:\j2sdk1.4.2_19\bin dan
lakukan proses copy
Kemudian kembali ke
Window Environment
Variables, pada Window
Edit User Variable
salin/paste path
C:\j2sdk1.4.2_19\bin,
kemudian klik OK
Untuk mencoba apakah
Setting Path sudah berhasil,
buka Command Prompt dari
Run Cmd, masuk ke
dalam salah satu folder di
drive manapun & ketikkan
perintah Javac, jika Setting
Path berhasil, akan ada
tampilan seperti gambar di
samping
Pemrog. Berorientasi Objek **, Pertemuan Ke-1
Noviyanto, ST Halaman 1
Pengenalan Bahasa Pemrograman Java
Java adalah bahasa pemrograman berorientasi objek murni yang dibuat berdasarkan
kemampuan-kemampuan terbaik bahasa pemrograman objek sebelumnya (C++, Ada,
Simula). Java diciptakan oleh James Gosling, developer dari Sun Microsystems pada
tahun 1991.
Karakteristik Java antara lain :
- Sederhana (Simple)
- Berorientasi Objek (Object Oriented)
- Terdistribusi (Distributed)
- Interpreted
- Robust
- Aman (Secure)
- Architecture Neutral
- Portable
- Performance
- Multithreaded
- Dinamis
Macam-macam Java 2 Software Developer Kit (J2SDK) antara lain :
- J2SE (Java 2 Standard Edition)
- J2EE (Java 2 Enterprise Edition)
- J2ME (Java 2 Micro Edition)
Cara kerja Java dapat digambarkan sebagai berikut :
Java mempunyai platform yaitu :
- Java Virtual Machine (Java VM)
- Java Application Programming Interface (Java API)
Pemrog. Berorientasi Objek **, Pertemuan Ke-1
Noviyanto, ST Halaman 2
Aplikasi-aplikasi java antara lain :
- Stand alone
- Applets
- Aplikasi berbasis Windows (GUI)
- Java Servlet
- Java Server Pages (JSP)
- Java Beans dan Enterprise Java
Beans
- Java Micro Edition
- Penulisan program:
o Menulis program
Struktur program java yaitu :
Komentar program
Deklarasi package dan import
class NamaKelas {
<pernyataan>
}
// Kelas pertama
class NamaKelasLain {
<pernyataan>
}
// Kelas lainnya
Program Java (.java)
Dapat ditulis dalam satu file .java:
Berisi satu kelas
Berisi beberapa kelas
Ditulis dalam beberapa file .java:
Satu file satu kelas
Satu file banyak kelas
Hanya boleh ada satu fungsi utama pada setiap program objek.
o Kompilasi
javac <namafile.java>
Contoh:
javac HelloWorld.java
o Eksekusi
java <namafile hasil kompilasi> [<argumen baris perintah>]
Contoh:
java HelloWorld
Pemrog. Berorientasi Objek **, Pertemuan Ke-1
Noviyanto, ST Halaman 3
Contoh Program 1 (HelloWorld.java) yaitu :
/**
* Program Java untuk menuliskan kata Hello, world!
* HelloWorld.java
*/
// Deklarasi kelas
class HelloWorld {
// Deklarasi fungsi yang mewakili program utama
public static void main(String args[]) {
System.out.println("Hello, world!");
}
}
Output Program
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
nts
import inner instanceof
int interface long native new null
operator outer package private protected public
rest return short static super switch
synchronized this throw throws transient true
try var void volatile while
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.
Pemrog. Berorientasi Objek **, Pertemuan Ke-1
Noviyanto, ST Halaman 4
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.
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
yang
Diperlukan
Jangkauan (inclusive)
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
Floating Point
Tipe Tempat
Yang
Dibutuhkan
Jangkauan
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 mengawal-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.
Pemrog. Berorientasi Objek **, Pertemuan Ke-1
Noviyanto, ST Halaman 5
Java Applet
Applet berjalan pada Browser atau pada halaman WEB menggunakan HTML
Java Applet adalah sebuah class yang dapat diaktifkan pada Web Browser seperti
Internet explorer. Java Applet dienkapsulasi sebagai bagian dari HTML
Langkah-langkah membuat applet.
1.Membuat sebuah class Applet.
2.Membuat dokumen html yang berasosiasi dengan class Applet yang telah dibuat pada
langkah pertama.
Template untuk applet
import java.applet.Applet;
import jawa.awt.*;
public class AppletTemplate extends Applet
{
// deklarasi variabel.
public void init()
{
// inisialisasi variabel, image loading, dll.
}
public void paint(Graphics g)
{
// drawing operations.
}
}
Template untuk html
<HTML>
<HEAD>
<TITLE> Template untuk loading applet</TITLE>
</HEAD>
<BODY>
<H1> Sebuah template untuk loading applet </H1>
<P>
<APPLET CODE= AppletTemplate.class WIDTH=120 HEIGHT=60>
<B> Error! Anda harus mengkatifkan Java-enabled
browser.</B>
</APPLET>
</BODY>
</HTML>
Pemrog. Berorientasi Objek **, Pertemuan Ke-1
Noviyanto, ST Halaman 6
Contoh Program Applet
import java.applet.Applet;
import java.awt.Graphics;
public class HelloWorld extends Applet {
public void paint(Graphics g) {
g.drawString("Hello world!", 50, 25);
}
}
Kompilasi di Command Line Prompt
M:\gundar\PBO\OOP\Applet>javac HelloWorld.java
Contoh HTML Applet dari program diatas:
<html>
<head>
<title>HelloWorld Applet </title>
</head>
<body>
<applet code="HelloWorld.class" height="50" width="345">
</applet>
</body>
</html>
Output:
Pada contoh HTML Applet dari program diatas
Kode program:
<applet code="HelloWorld.class" height="50" width="345">
</applet>
Applet dibuat dengan lebar 345 pixels dan tinggi 50 pixels
Pada contoh Program Applet diatas
Method drawString menggambar string Hello world pada posisi pixel(50,25)
g.drawString("Hello world!", 50, 25);
Pemrog. Berorientasi Objek **, Pertemuan Ke-2
Noviyanto, ST Halaman 1
Struktur Kontrol
Struktur Kontrol Keputusan
Struktur kontrol keputusan adalah statement dari Java yang mengijinkan user untuk memilih dan
mengeksekusi blok kode dan mengabaikan blok kode yang lain.
1. Statement if
Statement-if menentukan sebuah statement (atau blok kode) yang akan dieksekusi jika dan hanya
jika persyaratan boolean (boolean statement) bernilai true.
Bentuk dari statement if,
if( boolean_expression )
statement;
atau
if( boolean_expression ){
statement1;
statement2;
. . . }
Gambar 1: Flowchart Statement If
dimana, boolean_expression adalah sebuah persyaratan boolean (boolean statement) atau
boolean variabel.
Berikut ini adalah contoh code statement if,
int grade = 68;
if( grade > 60 ) System.out.println("Congratulations!");
atau
int grade = 68;
if( grade > 60 ){
System.out.println("Congratulations!");
System.out.println("You passed!");
}
Statement if-else
Statement if-else digunakan apabila kita ingin mengeksekusi sebuah statement dengan kondisi
true dan statement yang lain dengan kondisi false.
Bentuk statement if-else,
if( boolean_expression )
statement;
else
statement;
Pemrog. Berorientasi Objek **, Pertemuan Ke-2
Noviyanto, ST Halaman 2
dapat juga ditulis seperti,
if( boolean_expression ){
statement1;
statement2;
. . . }
else{
statement1;
statement2;
. . . }
Berikut ini contoh code statement if-else,
int grade = 68;
if( grade > 60 ) System.out.println("Congratulations!");
else System.out.println("Sorry you failed");
atau
int grade = 68;
if( grade > 60 ){
System.out.println("Congratulations!");
System.out.println("You passed!");
}
else{
System.out.println("Sorry you failed");
}
Gambar 2: Flowchart Statement If-Else
2. Statement switch
Cara lain untuk membuat percabangan adalah dengan menggunakan kata kunci switch. Dengan
menggunakan switch kita bisa melakukan percabangan dengan persyaratan yang beragam.
Bentuk statement switch,
switch( switch_expression ){
case case_selector1:
statement1; //
statement2; //block 1
. . . //
break;
case case_selector2:
statement1; //
statement2; //block 2
. . . //
Pemrog. Berorientasi Objek **, Pertemuan Ke-2
Noviyanto, ST Halaman 3
break;
. . .
default:
statement1; //
statement2; //block n
. . . //
break;
}
dimana, switch_expression adalah persyaratan integer atau character dan case_selector1,
case_selector2 dan seterusnya adalah konstanta nilai integer yang unique (unik).
Ketika statement switch ditemukan, pertama kali Java memeriksa switch_expression, dan
meloncat ke case dan mencocokkan nilai yang sama dengan persyaratannya. Program
mengeksekusi statement dari awal sampai menemui statement break, dan melewati statement
yang lain sampai akhir struktur switch.
Jika tidak ditemui case yang cocok, maka program akan mengeksekusi blok default. Bisa anda
catat bahwa blok default adalah optional. Sebuah statement switch bisa tidak memiliki blok default.
CATATAN:
Tidak seperti statement if, pada struktur switch statement dieksekusi tanpa memerlukan tanda
kurung kurawal ({}).
Ketika sebuah case pada statement switch menemui kecocokan, semua statement pada case
tersebut akan dieksekusi. Tidak hanya demikian, statement lain yang berada pada case yang
cocok juga dieksekusi.
Untuk menghindari program mengeksekusi statement pada case berikutnya, kita menggunakan
statement break sebagai statement akhir.
Gambar 4: Flowchart Statement Switch
Pemrog. Berorientasi Objek **, Pertemuan Ke-2
Noviyanto, ST Halaman 4
Contoh statement switch
public class Grade
{
public static void main( String[] args )
{
int grade = 92;
switch(grade){
case 100:
System.out.println( "Excellent!" );
break;
case 90:
System.out.println("Good job!" );
break;
case 80:
System.out.println("Study harder!" );
break;
default:
System.out.println("Sorry, you failed."); }
}
}
Struktur Kontrol Perulangan
Struktur kontrol pengulangan adalah statement dari Java dimana kita bisa mengeksekusi blok
code berulang-ulang dalam kurun nilai tertentu. Ada tiga macam jenis struktur kontrol pengulangan
yaitu while, do-while, dan for-loops.
1. while loop
Statement while loop adalah statement atau blok statement yang diulang-ulang sampai mencapai
kondisi yang cocok.
Bentuk statement while,
while( boolean_expression ){
statement1;
statement2;
. . . }
Statement di dalam while loop akan dieksekusi berulang-ulang selama boolean_expression
bernilai true.
Contoh, pada code dibawah ini,
int i = 4;
while ( i > 0 ){
System.out.print(i);
i--; }
Contoh diatas akan mencetak angka 4321 pada layar. Perlu dicatat jika bagian i--; dihilangkan,
akan menghasilkan looping yang tidak berhenti (infinite loop). Sehingga, ketika menggunakan
while loop atau bentuk pengulangan yang lain, pastikan Anda memberikan statement yang
membuat pengulangan berhenti pada suatu titik.
Berikut ini adalah beberapa contoh while loop,
Contoh 1:
int x = 0;
while (x<10) {
System.out.println(x);
x++; }
Contoh 2:
//infinite loop
while(true)
System.out.println( hello );
Pemrog. Berorientasi Objek **, Pertemuan Ke-2
Noviyanto, ST Halaman 5
Contoh 3:
//no loops
// statement is not even executed
while (false)
System.out.println( hello );
2. do-while loop
Do-while loop mirip dengan while-loop. Statement di dalam do-while loop akan dieksekusi
beberapa kali selama kondisi bernilai true.
Perbedaan antara while dan do-while loop adalah dimana statement di dalam do-while loop
dieksekusi sedikitnya satu kali.
Bentuk statement do-while,
do{
statement1;
statement2;
. . .
}while( boolean_expression );
Statement di dalam do-while loop akan dieksekusi pertama kali, dan dilakukan pengecekan kondisi
dari boolean_expression. Jika nilai tersebut belum mencapai nilai yang diinginkan, statement akan
dieksekusi lagi.
Berikut ini beberapa contoh do-while loop:
Contoh 1:
int x = 0;
do
{
System.out.println(x);
x++;
}while (x<10);
Contoh ini akan memberikan output
0123456789 pada layar.
Contoh 2:
//infinite loop
do{
System.out.println( hello );
} while (true);
Contoh di atas akan melakukan pengulangan
yang tidak berhenti untuk menulis hello
pada layar.
Contoh 3:
//one loop
// statement is executed once
do
System.out.println( hello );
while (false);
Contoh di atas akan memberikan output hello pada layar.
3. for loop
Seperti pada struktur pengulangan sebelumnya yaitu melakukan pengulangan eksekusi code
beberapa kali.
Bentuk dari for loop,
for (InitializationExpression; LoopCondition; StepExpression){
statement1;
statement2;
. . . }
Pemrog. Berorientasi Objek **, Pertemuan Ke-2
Noviyanto, ST Halaman 6
dimana,
InitializationExpression inisialisasi dari variabel loop.
LoopCondition - membandingkan variabel loop pada nilai batas.
StepExpression - melakukan update pada variabel loop.
Berikut ini adalah contoh dari for loop,
int i;
for( i = 0; i < 10; i++ ){
System.out.print(i);
}
Pada contoh ini, statement i=0 merupakan inisialisasi dari variabel. Selanjutnya, kondisi i<10
diperiksa. Jika kondisi bernilai true, statement di dalam for loop dieksekusi. Kemudian, statement
i++ dieksekusi, dan dilakukan pengecekan kondisi. Kondisi ini akan dilakukan berulang-ulang
sampai mencapai nilai yang salah (false).
Contoh tadi, adalah contoh yang sama dari while loop,
int i = 0;
while( i < 10 ){
System.out.print(i);
i++;
}
break statement
Statement break memiliki dua bentuk: unlabeled dan labeled.
o Unlabeled break statement
Unlabeled menghentikan jalannya statement switch. Anda bisa juga menggunakan bentuk
unlabeled untuk menghentikan for, while atau do-while loop.
Contohnya,
String names[] = {"Beah", "Bianca", "Lance", "Belle",
"Nico", "Yza", "Gem", "Ethan"};
String searchName = "Yza";
boolean foundName = false;
for( int i=0; i< names.length; i++ ){
if( names[i].equals( searchName )){
foundName = true;
break; }
}
if( foundName ){
System.out.println( searchName + " found!" );
}
else{
System.out.println( searchName + " not found." );
}
Pada contoh ini, jika string Yza ditemukan, pengulangan pada for loop akan dihentikan
dan akan melanjutkan ke proses berikutnya.
Pemrog. Berorientasi Objek **, Pertemuan Ke-2
Noviyanto, ST Halaman 7
o Labeled break statement
Bentuk labeled form dari statement break akan menghentikan statement luar, dimana
diidentifikasikan berupa label pada statement break. Program berikut ini akan mencari nilai
dalam array dua dimensi. Terdapat dua pengulangan bersarang (nested loop). Ketika
sebuah nilai ditemukan, labeled break akan menghentikan statement yang diberi label
searchLabel, dimana label ini berada di luar.
int[][] numbers = {{1, 2, 3}, {4, 5, 6},
{7, 8, 9}};
int searchNum = 5;
boolean foundNum = false;
searchLabel:
for( int i=0; i<numbers.length; i++ ){
for( int j=0; j<numbers[i].length; j++ ){
if( searchNum == numbers[i][j] ){
foundNum = true; break searchLabel;
}
}
}
if( foundNum ){
System.out.println( searchNum + " found!" );
}
else{
System.out.println( searchNum + " not found!" );
}
Statement break menghentikan sementera labeled statement; ia tidak lagi menjalankan
flow control pada label. Flow control pada label akan di-transfer secara otomatis mengikuti
labeled statement.
Continue statement
Statement continue memiliki dua bentuk: unlabeled dan labeled. Anda dapat menggunakan
statement continue untuk melewati pengulangan dari for, while, atau do-while loop yang sedang
berjalan.
o Unlabeled continue statement
Bentuk unlabeled akan melewati akhir statement pada bagian yang dalam dan memeriksa
boolean expression yang mengkontrol loop, pada dasarnya akan melewati bagian
pengulangan pada loop.
Berikut ini adalah contoh dari penghitungan angka dari Beah dalam suatu array.
String names[] = {"Beah", "Bianca", "Lance", "Beah"};
int count = 0;
for( int i=0; i<names.length; i++ ){
if( !names[i].equals("Beah") ){
continue; //skip next statement
}
count++;
}
System.out.println("There are " + count + " Beahs in the list");
Pemrog. Berorientasi Objek **, Pertemuan Ke-2
Noviyanto, ST Halaman 8
o Labeled continue statement
Bentuk labeled akan melanjutkan sebuah statement dengan melewati pengulangan yang
sedang berjalan dari loop terluar yang diberi label (tanda).
outerLoop:
for( int i=0; i<5; i++ ){
for( int j=0; j<5; j++ ){
System.out.println("Inside for(j) loop"); //message1
if( j == 2 ) continue outerLoop;
}
System.out.println("Inside for(i) loop"); //message2
}
Pada contoh ini, pesan ke-2 tidak dicetak, karena statement continue akan melewati
pengulangan yang sedang berjalan.
Return statement
Statement return digunakan untuk keluar dari sebuah fungsi (method). Statement return memiliki
dua bentuk: menggunakan sebuah nilai, dan tidak memberikan nilai.
Untuk memberikan sebuah nilai, cukup berikan nilai (atau ekspresi yang menghasilkan sebuah
nilai) sesudah return. Contohnya,
return ++count;
atau
return "Hello";
Tipe data dari nilai yang diberikan harus sama dengan tipe dari fungsi yang dideklarasikan. Ketika
sebuah method void dideklariskan, gunakan bentuk return yang tidak memberikan nilai.
Contohnya,
return;
Pemrog. Berorientasi Objek **, Pertemuan Ke-3
Noviyanto, ST Halaman 1
Pengertian dari Class, Object, dan Method
Class merupakan suatu blueprint atau cetakan untuk menciptakan suatu instant
dari object. class juga merupakan grup suatu object dengan kemiripan
attributes/properties, behaviour dan relasi ke object lain.
Contoh : Class Person, Vehicle, Tree, Fruit dan lain-lain.
Object adalah instance dari class. Jika class secara umum merepresentasikan
(template) sebuah object, sebuah instance adalah representasi nyata dari class itu
sendiri.
Contoh : Dari class Fruit kita dapat membuat object Mangga, Pisang, Apel dan lain-
lain.
Membuat object
Untuk membuat object, kita menggunakan perintah new dengan sebuah nama class
yang akan dibuat sebagai instance dari class tersebut.
String str = new String();
Random r = new Random();
Pegawai p2 = new PEgawai();
Date hari = new Date();
hari adalah object reference dari class Date yang akan digunakan untuk mengakses
class Date.
Sedangkan operator new adalah operator yang akan menghasilkan hari sebagai
reference ke instance dari class Date().
Attributes merupakan nilai data yang terdapat pada suatu object yang berasal dari
class. Attributes merepresentasikan karakteristik dari suatu object.
Contoh : pada Class Fruit terdapat attribute : warna, berat pada object mangga :
warna berisi kuning dan berat misalkan 0.25 kg pada object apel : warna berisi
merah dan berat misalkan 0.30 kg
Method merupakan suatu operasi berupa fungsi-fungsi yang dapat dikerjakan oleh
suatu object. Method didefinisikan pada class akan tetapi dipanggil melalui object.
Contoh : pada object mangga : terdapat method ambilRasa , kupasKulit dan lain-lain.
Pemrog. Berorientasi Objek **, Pertemuan Ke-3
Noviyanto, ST Halaman 2
METHOD
Metode menentukan perilaku objek, yakni apa yang terjadi ketika objek itu dibuat serta
berbagai operasi yang dapat dilakukan objek sepanjang hidupnya.
Metode memiliki 4 (empat) bagian dasar :
1. Nama metode
2. Tipe Objek atau tipe primitive yang dikembalikan metode.
3. Daftar parameter.
4. Badan atau isi metode.
Tiga bagian pertama mengindikasikan informasi penting tentang metode itu sendiri.
Dengan kata lain, nama metode tersebut=metode lain dalam program. Dalam java kita
dapat memiliki metode-metode berbeda yang memiliki nama sama tetapi berbeda tipe
kembalian atau daftar argumennya, sehingga bagian-bagian definisi metode ini menjadi
penting. Ini disebut overloading metode.
Untuk menjalankan program yang memiliki sifat polymorphism tersebut, diperlukan
suatu kemampuan overloading, yaitu suatu kemampuan untuk menentukan fungsi
yang mana yang harus digunakan atau dijalankan jika terdapat nama fungsi yang sama.
Polimorfisme bisa diartikan seperti kemampuan suatu variable untuk mengubah
perangai sesuai dengan objek hasil instansiasi yang digunakan. Polimorfisme
membiarkan lebih dari 1 objek dari sub class sub class dan diperlakukan sebagai
objek dari super class tunggal
Contoh:
Mahasiswa cowok = new anakSI();
cowok.methodKU( Bernaz );
Mahasiswa cewek = new anakTI();
cewek.mothodKU( Amelia );
Outputnya:
Methodku dengan parameter dengan nilai Bernaz di class anakSI telah dipanggil
Methodku dengan parameter dengan nilai Amelia di class anakTI telah dipanggil
Pemrog. Berorientasi Objek **, Pertemuan Ke-3
Noviyanto, ST Halaman 3
Contoh Program:
class buku
{
String pengarang;
String judul;
void isi (String isi1,String isi2)
{
judul = isi1;
pengarang = isi2;
}
void cetak()
{
if (judul==null&&pengarang==null)return;
System.out.println("judul=" +judul +"pengarang=" +pengarang);
}
}
class karangan
{
public static void main(String[]args)
{
buku a,b,c,d;
a=b=c=d=new buku();
a.isi ("pengarang pascal", "yogiyanto");
a.cetak();
b.isi ("pengarang java", "asep hermanto");
b.cetak();
c.isi ("pengarang web", "johan prasutyo");
c.cetak();
d.isi ("pengarang c++", "adbul kadil");
}
}
Output
Pemrog. Berorientasi Objek **, Pertemuan Ke-4
Noviyanto, ST Halaman 1
Array
Pengantar
Program yang cukup kompleks membutuhkan variabel dalam jumlah besar. Kita
mungkin saja mendeklarasikan variabel-variabel tersebut satu per satu. Andaikan
sebuah program membutuhkan 5 (lima) variabel bertipe int, kita bisa saja
mendeklarasikan kelima variabel tersebut dengan cara biasa:
int a, b, c, d, e;
Persoalan akan timbul jika kita membutuhkan variabel dalam jumlah cukup besar,
100 misalnya. Bagaimana kita mendeklarasikan seluruh variabel tersebut: apakah
dengan cara mengetik satu persatu atau melakukan trik copy-and-paste Manapun
cara yang anda tempuh, cara tersebut akan menghabiskan waktu cukup banyak.
Selain masalah waktu, kita juga akan menemui masalah sulitnya mencari nama
yang benar-benar unik. Ingat bahwa tidak boleh ada dua variabel atau lebih
dengan nama sama. Atau anda ingin menggunakan cara seperti ini :
int x1, x2, x3, dst.
Java menawarkan konsep array untuk solusi mendeklarasikan sejumlah besar
variabel secara cepat. Pemakaian variabel array akan menghemat waktu
penyebutan nama variabel. Sebuah variabel array sesungguhnya adalah sejumlah
variabel berbeda dengan nama sama, namun memiliki nomor indeks yang unik
untuk membedakan setiap variabel tersebut.
0 1 2 3
Indeks adalah sebuah angka yang menyatakan urutan sebuah elemen pada suatu
variabel array. Karena seluruh kotak memiliki nama yang sama, maka untuk
membedakannya diperlukan suatu cara yaitu dengan memberi nomor urut. Ibarat
deretan rumah pada sebuah jalan, untuk membedakan antara rumah yang satu
dengan rumah yang lain maka setiap rumah diberi nomor unik yang berbeda
antara rumah satu dengan rumah lainnya.
Nomor indeks variabel array selalu dimulai dari 0 (nol), sehingga nomor indeks
bagi elemen terakhir adalah sebesar (N-1), dimana N adalah jumlah total elemen.
Kita bisa mengakses setiap elemen dalam variabel array dengan mengacu pada
nomor indeksnya. Awalan nol untuk nomor indeks array sering menimbulkan
kerancuan bagi kita yang terbiasa dengan awalan angka 1.
Pemrog. Berorientasi Objek **, Pertemuan Ke-4
Noviyanto, ST Halaman 2
Deklarasi Variabel Array
Bentuk umum pendeklarasian variabel array di Java adalah:
tipeData[] namaVariabel [= new tipeData[jumlahElemen] ];
TipeData bisa berupa salah satu dari berbagai tipe data seperti int, long, double
maupun nama class; baik class standar Java atau class buatan kita sendiri
1. Mendeklarasikan variabel array tanpa menyebutkan berapa jumlah elemen
yang diperlukan.
int[] angka;
Variabel angka kita deklarasikan sebagai variabel array dimana setiap elemennya
akan menyimpan data bertipe int. Kita tidak menyebutkan berapa jumlah elemen
dari variabel angka. Kita harus menuliskan di salah satu baris program instruksi
untuk memesan jumlah elemen ini. Sebelum terjadi pemesanan jumlah elemen,
kita tidak bisa menggunakan variabel array ini untuk menyimpan data.
2. Mendeklarasikan variabel array dengan menyebutkan jumlah elemen yang
diperlukan.
int[] angka = new int[5];
Variabel angka kita deklarasikan sebagai variabel array dimana setiap elemennya
akan menyimpan data bertipe int. Pada saat mendeklarasikan ini kita langsung
memesan 5 elemen array yang kita perlukan
3. Mendeklarasikan variabel array secara otomatis.
Kita tidak menyebutkan jumlah elemen secara tegas, namun kita mendefinisikan
sejumlah data secara terurut.
int[] angka = {5, 3, 23, 99, 2};
Variabel angka kita deklarasikan sebagai variabel array dimana setiap elemennya
akan menyimpan data bertipe int. Kita tidak menyebutkan berapa elemen yang kita
pesan, tetapi kita langsung menentukan nilai setiap elemen. Karena jumlah data
yang kita berikan ada 5, maka komputer akan mengetahui bahwa jumlah elemen
yang kita butuhkan adalah 5.
Pemrog. Berorientasi Objek **, Pertemuan Ke-4
Noviyanto, ST Halaman 3
Menghitung Jumlah Elemen Variabel Array
Kita bisa menggunakan instruksi length untuk mengetahui jumlah elemen dari
sebuah variabel array. Pernyataan angka.length akan menghasilkan berapa jumlah
elemen dari variabel array yang bernama angka. Entah dengan cara bagaimana
kita mendeklarasikan sebuah variabel array, Java tetap dapat melaporkan jumlah
elemen variabel tersebut melalui instruksi length.
Contoh Program Menghitung Elemen Array
class JumlahElemenArray
{
public static void main (String[] args)
{
int[] angka;
angka = new int[5];
System.out.println ("Jumlah elemen = " + angka.length);
}
}
Output Program
Pemrog. Berorientasi Objek **, Pertemuan Ke-4
Noviyanto, ST Halaman 4
Array Dua Dimensi
Materi diatas adalah tentang pembahasan array satu dimensi. Istilah satu dimensi
mengacu kepada jumlah bilangan yang digunakan sebagai indeks. Penulisan
seperti ini
System.out.println(angka[3]);
merupakan penulisan untuk array satu dimensi. Perhatikan bahwa bilangan yang
kita gunakan sebagai nomor indeks array hanya satu, tidak perduli berapa jumlah
digitnya. Angka 100 merupakan sebuah bilangan, walaupun jumlah digitnya ada 3.
Pada beberapa kondisi diperlukan penulisan variabel array yang menggunakan
nomor indeks dua bilangan, misalnya pada aplikasi matrik. Data pada suatu matrik
diketahui berdasarkan nilai baris dan kolomnya. Baris adalah sebuah bilangan dan
kolom adalah sebuah bilangan juga. Tanpa adanya salah satu dari keduanya kita
tidak bisa mengetahui data mana yang dimaksud, jika kita ingin mengambil sebuah
data individu.
Bentuk umum pendeklarasian variabel array dua dimensi di Java adalah:
tipeData[][] nama_variabel[=new tipeData[jumlah_baris] [jumlah_kolom]];
Untuk memudahkan pemahaman, bentuk array dua dimensi bisa dihambarkan
dalam bentuk petak-petak sebagai berikut:
N adalah nilai yang menyatakan jumlah baris dari array, sedangkan M menyatakan
jumlah kolom dari array. Sama seperti array satu dimensi, penomoran indeks untuk
array dua dimensi juga dimulai dari 0 untuk baris maupun kolomnya. Tidak ada
aturan yang mengatakan bahwa urutan untuk nomor indeks adalah baris dulu baru
kolom
N
M
Pemrog. Berorientasi Objek **, Pertemuan Ke-4
Noviyanto, ST Halaman 5
Contoh Program Array 2 Dimensi
class ArrayDuaDimensi
{
public static void main (String[] args)
{
int[][] angka = new int[5][3];
for (int i=0; i<angka.length; i++)
for (int j=0; j<angka[i].length; j++)
angka[i][j] = (int)(Math.random()*100);
System.out.println("Data array dua dimensi:\n");
for (int i=0; i<angka.length; i++)
{
for (int j=0; j<angka[i].length; j++)
System.out.print(angka[i][j] + " ");
System.out.println();
}
}
}
Output
Pemrog. Berorientasi Objek **, Pertemuan Ke-5
Noviyanto, ST Halaman 1
Pewarisan / Inheritance & Polimorfisme
Pewarisan / Inheritance
Pengertian
Inheritance (pewarisan) proses pewarisan data dan method dari suatu
kelas kepada kelas lain.
Pewarisan bersifat menyeluruh
Semua data dan method milik kelas asalnya diturunkan ke kelas baru.
Kelas yang mewariskan Super Class atau Kelas Induk
Kelas yang diwariskan Sub Class atau Kelas Anak
Misal :
kelas B adalah kelas anak dari kelas A, maka sifat sifat dari kelas A
otomatis akan dimiliki juga oleh kelas B.
Jika kelas induk merupakan turunan dari kelas lain, maka data dan method
yang berasal dari kelas tersebut akan ikut diwariskan pula kepada kelas
anaknya.
Contoh :
o Kelas C adalah kelas anak dari kelas B
o Kelas B merupakan kelas anak dari kelas A.
o Maka sifat sifat yang diwariskan kelas A ke kelas B juga akan
diwariskan ke kelas C.
Keyword untuk pewarisan : extends
Pemrog. Berorientasi Objek **, Pertemuan Ke-5
Noviyanto, ST Halaman 2
Contoh Program
class Induk {
private String var1; //hak akses private berarti tidak dapat diakses oleh kls
anak
public int var2; //hak akses public berarti dapat diakses oleh kls anak
//konstruktor
Induk (){
}
//method
public void cetakData() {
}
}
class Anak extends Induk{
private String dataAnak; //variabel
//konstruktor
Anak () {
}
public void cetak() {
cetakData();//method milik Induk
// ada jg yang memanggil dgn super.cetakData()
}
}
class DemoPewarisan {
public static void main(String args[]) {
Anak anak = new Anak();
anak.cetak();
anak.cetakData();
System.out.println("Demo Pewarisan");
System.out.println("isi var 2="+anak.var2);
}
}
Output Program:
C:\Documents and Settings\suherman\My Documents>javac
DemoPewarisan.java
C:\Documents and Settings\suherman\My Documents>java DemoPewarisan
Demo Pewarisan
isi var 2=0
Pemrog. Berorientasi Objek **, Pertemuan Ke-5
Noviyanto, ST Halaman 3
Keuntungan Pewarisan
Bersifat reusable
Tidak harus menyalin semua data dan method dari suatu kelas jika akan
menggunakannya lagi
Kemudahan dalam me-manage kelas yang memiliki data dan method yang
sama
Untuk memodifikasi suatu data atau method untuk semua subkelas / kelas
anak, maka tidak perlu melakukan perubahan di masing-masing kelas
anak melainkan hanya pada kelas induk saja.
Polimorfisme
Polimorfisme sesuatu yang memiliki banyak bentuk.
Dalam pemrograman, polimorfisme dapat diartikan sebagai modul yang
memiliki nama sama, namun memiliki behaviour (tingkah laku) yang berbeda
sehingga listing code implementasinya juga berbeda
Contoh Program
class Hewan {
private String jenis;
private int kaki;
Hewan (){
}
Hewan (String jenis, int kaki){
this.jenis = jenis;
this.kaki = kaki;
}
public void bersuara() {
System.out.print("suara hewan "+jenis+" berkaki"+kaki);
}
}
class Anjing extends Hewan {
Anjing() {
super();
}
public void bersuara() { //overriding method
System.out.println("guk guk guk....");
}
}
Pemrog. Berorientasi Objek **, Pertemuan Ke-5
Noviyanto, ST Halaman 4
class Kucing extends Hewan {
Kucing(String jenis, int kaki) {
super(jenis, kaki);
}
public void bersuara() { //overriding method
super.bersuara();
System.out.println( miaowwww....");
}
}
class DemoPoli {
public static void main(String args[]) {
Anjing doggy = new Anjing();
Kucing tom = new Kucing("Kucing", 4);
doggy.bersuara();
tom.bersuara();
}
}
Output Program
C:\Documents and Settings\suherman\My Documents>javac DemoPoli.java
C:\Documents and Settings\suherman\My Documents>java DemoPoli
guk guk guk....
suara hewan Kucing berkaki 4 miaowwww....
Pemrog. Berorientasi Objek **, Pertemuan Ke-6
Noviyanto, ST Halaman 1
String
Dalam bahasa lain seperti C/C++ dan Pascal (Delphi), string merupakan array
karakter.
Dalam Java, string adalah object dan bukan array karakter.
Dapat dibuat array karakter, tetapi ia bukan string.
String terdiri dari sederetan karakter yang dibatasi oleh tanda petik ganda (double-
quote).
Berikut perbedaan antara deklarasi char dan deklarasi String:
char inputKey;
char ampersand = '&';
String perancangJava = "James Gosling";
String strAmpersand = "&";
Perhatikan tanda kutip tunggal dan kutip ganda yang membedakan karakter
dan string.
Meskipun kedua variabel berisi data satu karakter ampersand, tetapi
Variable ampersand mempunyai tipe primitif char.
Variable strAmpersand mempunyai tipe object String.
Operasi String
concat(str) digunakan untuk mengabungkan 2 buah string string.
isEmpty() digunakan untuk mengecek apakah string kosong atau tidak.
trim() digunakan untuk membuang spasi di sebelah kiri dan kanan string.
length() digunakan untuk menghitung banyak karakter dalam string.
equals(str) digunakan untuk membandingkan 2 buah string.
substring(<awal>, <akhir>) digunakan untuk mengambil substring dari string.
charAt(<index>) digunakan untuk mengambil karakter yang ada pada index.
lastIndexOf(kar) digunakan untuk mencari index terakhir dari string yang
mengandung karakter kar.
equalsIgnoreCase(str) digunakan untuk membandingkan string dengan str,
tidak membedakan huruf besar dan kecil.
copyValueOf(arr_char) digunakan untuk membentuk string dari array karakter.
replace(<old>, <new>) digunakan untuk mengganti <old> menjadi <new>.
Menampilkan String
Untuk menampilkan string dalam program Java non-GUI (teks), kita dapat
memakai perintah System.out.println() ataupun System.out.print().
println() akan menambahkan karakter ganti baris (CR+LF) di akhir string,
sedang print() tidak.
Pemrog. Berorientasi Objek **, Pertemuan Ke-6
Noviyanto, ST Halaman 2
class TampilString {
public static void main(String args[]) {
System.out.print("Perancang C: ");
System.out.print("Brian Kernighan dan Dennis Ritchie.");
System.out.println(); // berganti baris
System.out.println("Perancang Java: ");
System.out.println(" James Gosling.");
}
}
Perhatikan perbedaan antara print() dan println().
Output program (ditampilkan string sebagai berikut):
Perancang C++: Brian Kernighan dan Dennis Ritchie.
Perancang Java:
James Gosling.
Object String akan mengenali operator penggabungan string (concat) berupa tanda
(+).
Contoh:
String s1 = "Java Micro - ";
String s2 = s1 + "Java Enterprise";
System.out.println(s2);
Akan menampilkan string:
Java Micro - Java Enterprise
Selain untuk menjumlahkan tipe variable String dengan String, operator + juga dapat
dipakai untuk menjumlahkan tipe variable String dengan tipe lainnya:
String dengan boolean,
String dengan integer (byte, short, int, long, char),
String dengan floating-point (float, double),
String dengan object.
Contoh Program
class Concat {
public static void main(String args[ ]) {
boolean bool = true;
long intg = 4567890;
double flot = 45678.9123e-11;
Concat objt1 = null;
Concat objt2 = new Concat( );
Pemrog. Berorientasi Objek **, Pertemuan Ke-6
Noviyanto, ST Halaman 3
System.out.println("Concatenation:" +
"\nString + boolean: " + false + " - " + bool +
"\nString + integer: " + 123 + " ~ " + intg +
"\nString + float : " + 3.14 + " ~ " + flot +
"\nString + object : " + objt1 + " ~ " + objt2);
}
}
String dengan operator new
Sebuah object String dapat dibuat dengan memakai operator new.
hasilnya akan sama saja dengan cara deklarasi yang telah dijelaskan di
atas.
Contoh:
String s1 = "JBuilder 9.";
String s2 = new String("JBuilder 9.");
Kedua variable s1 dan s2 akan sama-sama merupakan object String yang
berisikan teks: JBuilder 9.
Dengan operator new, dapat juga membuat object String dari array karakter.
Contoh:
char chArray[] = {'J', 'B', 'u', 'i', 'l', 'd', 'e', 'r', '9'};
String s1 = new String(chArray); // s1 = "JBuilder 9."
Dapat juga memilih sub-array dari array karakter untuk dikonversi menjadi object
String.
Bentuk umumnya adalah sebagai berikut:
String [nama var] = new String( char[ ] chArray, int offset, int count )
Di mana,
chArray merupakan array karakter,
offset merupakan index awal dari sub-array,
count merupakan jumlah karakter yang akan diambil.
Contoh:
char chAr[] = {'J', 'B', 'u', 'i', 'l', 'd', 'e', 'r', ' ', '9'};
String s1 = new String(chAr, 1, 5); //s1 = "Build
Index array maupun String dimulai dari angka 0 (zero-based index).
Dengan offset = 1, maka karakter awalnya adalah 'B' (index 1).
Dengan count = 5, akan diambil sebanyak 5 karakter mulai dari 'B'.
Sub-array yang diambil adalah: 'Build'.
Pemrog. Berorientasi Objek **, Pertemuan Ke-6
Noviyanto, ST Halaman 4
String sebagai class
Dalam Java, variable dengan tipe String merupakan sebuah object dari class String.
Ketika dideklarasikan sebuah string, maka secara otomatis, compiler Java
akan membuatkan sebuah object String.
Dalam JDK, class String disimpan dalam package java.lang.
Jadi full-name bagi class ini adalah: java.lang.String.
Sebagai sebuah class, String mempunyai beberapa member berupa method.
Berikut beberapa method penting
PANJANG STRING: LENGTH( )
MENGAMBIL SUB-STRING: SUBSTRING( )
MENGAMBIL KARAKTER: CHARAT( )
MENGAMBIL INDEX: INDEXOF( )
CASING: TOUPPERCASE( ), TOLOWERCASE( )
LENGTH()
Method length() dipakai untuk mengambil panjang dari variable String.
Contoh:
String s1 = "JBuilder 9.";
int lenStr = s1.length(); // lenStr = 11
System.out.println(lenStr); // 11
SUBSTRING()
Method substring() dipakai untuk mengambil sub-string dari sebuah object String.
Ada dua bentuk dari method ini
Bentuk pertama (overload method):
String substring(int beginIndex, int endIndex);
String substring(int beginIndex);
Bentuk tersebut mengambil sub-string dimulai dari posisi beginIndex
sampai posisi endIndex-1.
Bentuk kedua.
// posisi: "01234567890"
String s1 = "JBuilder 9.";
String cutStr = s1.substring(5); // cutStr = "der 9."
String subStr = s1.substring(1, 6); // subStr = "Build
Bentuk tersebut mengambil sub-string dimulai dari posisi beginIndex
sampai akhir string
Pemrog. Berorientasi Objek **, Pertemuan Ke-6
Noviyanto, ST Halaman 5
CHARAT()
Method charAt() dipakai untuk mengambil karakter dari object String pada posisi
index tertentu.
Contoh:
// posisi: "01234567890"
String s1 = "JBuilder 9.";
char c1 = s1.charAt(1); // c1 = 'B'
char c2 = s1.charAt(9); // c2 = '9'
char c3 = s1.charAt(6); // c3 = 'e'
INDEXOF()
Method indexOf() dipakai untuk mengambil nilai index berupa posisi karakter
tertentu di dalam object String.
Posisi karakter yang dicari adalah posisi dari karakter pertama yang ditemui.
Contoh:
// posisi: "0123456789012345678"
String s1 = "JBuilder untuk Java";
int pos1 = s1.indexOf('u'); // pos1 = 2
int pos2 = s1.indexOf('t'); // pos2 = 11
int pos3 = s1.indexOf('J'); // pos3 = 0
Nilai index yang dikembalikan adalah index dari karakter pertama yang ditemui.
Misalnya ada 3 buah karakter 'u' dalam s1, tetapi yang dikembalikan adalah posisi
dari karakter 'u' yang pertama (yaitu 2).
TOUPPERCASE(), TOLOWERCASE()
Method toUpperCase() atau toLowerCase() dipakai untuk konversi semua karakter di
dalam object String menjadi huruf besar atau huruf kecil.
String toUpperCase();
String toLowerCase();
Contoh:
String s1 = "JBuilder untuk Java\u2122";
String sUp = s1.toUpperCase(); // = JBUILDER UNTUK JAVA
String sDown = s1.toLowerCase(); // = jbuilder untuk java
Pemrog. Berorientasi Objek **, Pertemuan Ke-7
Noviyanto, ST Halaman 1
Packages, Import dan Interfaces
1. Packages
Packages dalam JAVA berarti pengelompokan beberapa class dan interface
dalam satu unit. Fitur ini menyediakan mekanisme untuk mengatur class dan
interface dalam jumlah banyak dan menghindari konflik pada penamaan.
Mengimport Packages
Supaya dapat meggunakan class yang berada diluar package yang sedang
dikerjakan, Anda harus mengimport package dimana class tersebut berada.
Pada dasarnya, seluruh program JAVA mengimport package java.lang.*,
sehingga Anda dapat menggunakan class seperti String dan Integer dalam
program meskipun belum mengimport package sama sekali.
Penulisan import package dapat dilakukan seperti dibawah ini :
import <namaPaket>;
Sebagai contoh, bila Anda ingin menggunakan class Color dalam package
awt, Anda harus menuliskan import package sebagai berikut :
import java.awt.Color;
import java.awt.*;
Baris pertama menyatakan untuk mengimport class Color secara spesifik
pada package, sedangkan baris kedua menyatakan mengimport seluruh class
yang terkandung dalam package java.awt.
Cara lain dalam mengimport package adalah dengan menuliskan referensi
package secara eksplisit. Hal ini dilakukan dengan menggunakan nama
package untuk mendeklarasikan object sebuah class :
java.awt.Color color;
Pemrog. Berorientasi Objek **, Pertemuan Ke-7
Noviyanto, ST Halaman 2
2. Import
Pada sebuah file .java, dibutuhkan referensi file-file mana saja yang menjadi
referensi dari class-class, method-method, ataupun segala sesuatu yang
digunakan dalam sebuah program java yang ditulis dalam sebuah file .java
tersebut. aturan penulisan pada umumnya ditulis di bawah penulisan
package, contohnya adalah sebagai berikut :
import java.io.RandomAccessFile;
import java.net.*;
3. Interface
Mendeklarasikan sebuah interface pada dasarnya mendeklarasikan sebuah
class tetapi sebagai penggantinya menggunakan kata kunci class, kata kunci
interface digunakan. Berikut syntaxnya.
<interfaceDeclaration> ::=
<modifier> interface <name> {
<attributeDeclaration>*
[<modifier> <returnType> <name>(<parameter>*);]*
}
Anggotanya adalah public ketika interface dideklarasikan public.
Petunjuk Penulisan Program:
Secara mutlak atribut adalah static dan final dan harus diinisialisasi dengan
nilai konstanta. Seperti mendeklarasikan class teratas, acces modifier yang
valid hanyalah public dan package(yakni jika tidak ada acces modifier
mengawali kata kunci class).
Class mengimplementasikan sebuah interface yang telah ada dengan
menggunakan kata kunci
implements. Class ini dibuat untuk mengimplementasikan semua method
interface. Sebuah class boleh mengimplementasikan lebih dari satu interface.
Pemrog. Berorientasi Objek **, Pertemuan Ke-7
Noviyanto, ST Halaman 3
Contoh berikut menunjukkan bagaimana mendeklarasikan dan
menggunakan sebuah interface.
interface MyInterface {
void iMethod();
}
class MyClass1 implements MyInterface {
public void iMethod() {
System.out.println("Interface method.");
}
void myMethod() {
System.out.println("Another method.");
}
}
class MyClass2 implements MyInterface {
public void iMethod() {
System.out.println("Another implementation.");
}
}
class InterfaceDemo {
public static void main(String args[]) {
MyClass1 mc1 = new MyClass1();
MyClass2 mc2 = new MyClass2();
mc1.iMethod();
mc1.myMethod();
mc2.iMethod();
}
}
Output Program:
C:\Documents and Settings\Administrator\My Documents>javac
InterfaceDemo.java
C:\Documents and Settings\Administrator\My Documents>java
InterfaceDemo
Interface method.
Another method.
Another implementation.
Pemrog. Berorientasi Objek **, Pertemuan Ke-8
Noviyanto, ST Halaman 1
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.
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.
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 { }
Tipe Eksepsi
Dipuncak hirarki class eksepsi terdapat satu class yang disebut throwable. Class ini
digunakan untuk merepresentasikan semua keadaan eksepsi. 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.
Throwable
Exception Error
Pemrog. Berorientasi Objek **, Pertemuan Ke-8
Noviyanto, ST Halaman 2
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 (String 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 :
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 (String args[]) {
Exc1.subroutine();
}
}
Output-nya :
Exception in thread main java.lang.ArithmeticException : / by zero
at Exc1.subroutine(Exc1.java :4)
at Exc1.main(Exc1.java : 7)
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 );
}
}
}
Outputnya:
C:\Documents and Settings\noviyanto\My Documents>java Exc2
Division By Zero
Pemrog. Berorientasi Objek **, Pertemuan Ke-8
Noviyanto, ST Halaman 3
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 :
caught inside demoproc
recaught : java.lang.NullPointerException : demo
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 () throws 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
Pemrog. Berorientasi Objek **, Pertemuan Ke-8
Noviyanto, ST Halaman 4
caught java.lang.IllegalAccessException : demo
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 satupun tanpa mengeksekusi bagian finally-nyA.
class finallyDemo {
static void procA() {
try { System.out.println( Inside procA.. );
throw new RuntimeException( Demo ); }
finally { System.out.println( procA is finally ); }
}
static void procB() {
try { System.out.println( Inside procB.. );
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
Pemrog. Berorientasi Objek **, Pertemuan Ke-9
Noviyanto, ST Halaman 1
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. 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.
Multithreading dan Java
Thread (seringkali disebut juga lightweight process atau execution context) adalah
sebuah single sequential flow 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.
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).
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 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.
Pemrog. Berorientasi Objek **, Pertemuan Ke-9
Noviyanto, ST Halaman 2
Scheduler pada JVM juga mendukung non-preemptive multithreading (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.
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-interupsi
kegiatan dari thread yang sedang beraksi (misalnya ada thread lainnya dengan prioritas
yang lebih tinggi).
Pemrog. Berorientasi Objek **, Pertemuan Ke-9
Noviyanto, ST Halaman 3
Thread dalam keadaan running bisa juga lengser secara sukarela, dan masuk kembali
ke state runnable, sehingga thread lain yang sedang menunggu 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 ini 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
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
} }
Pemrog. Berorientasi Objek **, Pertemuan Ke-9
Noviyanto, ST Halaman 4
contoh :
1. class theThread implements Runnable{
2. Thread t;
3.
4. theThread(){ t = new Thread(this, "DemoThread");
5. System.out.println("Child Thead : " + t);
6. t.start(); }
7.
8. public void run(){
9. try{ for(int i=5;i>0;i--){
10. System.out.println("Child Thread :" + i);
11. Thread.sleep(500); }
12. }
13. catch(InterruptedException e){
14. System.out.println("Child Interrupted"); }
15. System.out.println("Exiting Child Thread"); }
16. }
17. class MyThread{
18. public static void main(String args[]){
19. new theThread();
20. try{ for(int i=5;i>0;i--){
21. System.out.println("Main Thread :" + i);
22. Thread.sleep(1000); }
23. }
24. catch(InterruptedException e){
25. System.out.println("main Interrupted"); }
26. System.out.println("Exiting Main Thread"); }
27. }
Output :
Child Thread : Thread(Demo Thread, 5, main)
Main Thread : 5
Child Thread : 5
Child Thread : 4
Main Thread : 4
Child Thread : 3
Child Thread : 2
Main Thread : 3
Child Thread : 1
Exiting Child Thread
Main Thread : 2
Main Thread : 1
Exiting Main Thread
Pemrog. Berorientasi Objek **, Pertemuan Ke-10
Noviyanto, ST Halaman 1
STREAM DAN FILE
Proses penulisan dan pembacaan data sering kita sebut dengan proses input dan
output, dimana penulisan data berarti mengalirkan data ke output dan menerima atau
mendapatkan data dari input.
A. Stream
Stream merupakan dasar operasi input-output ( I/O ) dalam Java yang menggunakan
package java.io sebagai package utama. Stream adalah representasi abstrak dari input
dan output device, dimana aliran bytes akan ditransfer seperti file dalam harddisk, file
pada sistem remote atau printer. Kita dapat membaca data dari input stream, yang
dapat berupa file, keyboard atau komputer remote. Sedangkan untuk operasi penulisan
berarti menulis data pada output stream. Package java.io mendukung dua tipe stream,
yaitu binari dan karakter stream. Binari merupakan
data berupa bit atau data binari, sedangkan karakter adalah tipe khusus untuk
pembacaan dan penulisan teks/karakter.
B. Input Stream
Subclass-subclass dari inputStream adalah :
AudioInputStream,
ByteArrayInputStream,
FileInputStream,
FilterInputStream,
PipedInputStream,
SequenceInputStream, dan
StringBufferInputStream.
Dua method utama dari InputStream adalah :
Read
Method ini digunakan untuk membaca stream.
Close
Method ini digunakan untuk menutup koneksi input stream.
Latihan 38. InputStream.java
import java.io.*;
class InputStream {
public static void main(String[] args) throws IOException {
byte[] data = new byte[10];
System.out.print("Ketik 10 buah karakter :");
System.in.read(data);
System.out.print("Karakter yang Anda ketik yaitu : ");
for(int i=0;i<data.length;i++) {
System.out.print((char)data[i]); }
}
}
C. Output Stream
Subclass-subclass dari outputStream adalah :
ByteArrayOutputStream : digunakan untuk menuliskan stream menjadi byte array.
FileOutputStream : digunakan untuk menulis pada file
FilterOutputStream : merupakan superclass dari subclass-subclass seperti
DataOutputStream, BufferOutputStream, PrintStream, CheckedOutputStream
ObjectOutputStream : digunakan untuk menuliskan objek pada OutputStream.
PipedOutputStream : digunakan untuk menjadi output dari PipedInputStream.
Pemrog. Berorientasi Objek **, Pertemuan Ke-10
Noviyanto, ST Halaman 2
Sebagian method-method OutputStream adalah :
Voidclose()
Menutup output stream yang aktif dan melepaskan sumber daya terkait dengan
stream tersebut
Void flush()
Melakukan flush output stream dan memaksa semua byte buffer untuk dituliskan
keluar
Void write(byte[] b)
Menulis sebanyak b.length dari byte array ke output stream
Void write(byte[] b, int off, int len)
Menuliskan sebanyak len byte dari byte array b dimulai dari index off
Latihan 39. OutputStream.java
import java.io.*;
class OutputStream {
public static void main(String[] args) throws IOException {
byte[] data = {'a','b','c','d','e','f','g'};
System.out.write(data,3,4);
System.out.write('\n'); //pindah baris
System.out.write(data); //tulis semua isi array data }
}
D. DataOutputStream
DataOutputStream merupakan class yang menyediakan cara praktis untuk menuliskan
tipe data primitif ke output stream. Sebagian method DataOutputStream adalah :
writeDouble : berfungsi menuliskan data bertipe double ke output stream
writeInt : berfungsi menuliskan data bertipe integer ke output stream
writeBoolean : berfungsi menuliskan data boolean ke output stream
writeUTF : berfungsi menuliskan data string menggunakan encoding UTF-8 yang
tidak tergantung pada mesin.
E. DataInputStream
DataInputStream berfungsi untuk saling melengkapi dengan DataOutputStream, yaitu
untuk mendapatkan data yang ditulis dengan DataOutputStream. Sebagian method
DataInputStream adalah :
ReadDouble() : membaca data bertipe double
readInt() : membaca data bertipe integer
readBoolean() : membaca data Boolean
readUTF() : membaca data dengan encoding UTF-8
F. FileInputStream dan FileOutputStream
FileInputStream digunakan untuk membaca data dari file yang merupakan turunan
langsung dari class InputStream dan FileOutputStream untuk menuliskan data ke file
merupakan turunan langsung dari class OutputStream.
Latihan 40. FileInStream.java
import java.io.*;
class FileInStream {
public static void main(String[] args){
if(args.length==0) {
System.out.println("Anda harus memasukkan nama file sebagai parameternya.");
return; }
byte data;
FileInputStream fin=null;
try {
fin = new FileInputStream(args[0]);
do {
data = (byte)fin.read();
System.out.print((char)data);
}while(data!=-1);
}catch(FileNotFoundException e) {
System.out.println("File : " + args[0] + " tidak ditemukan.");
}catch(IOException e) {
System.out.println("Eksepsi tidak diketahui : " + e);
}finally {//tutup file
Pemrog. Berorientasi Objek **, Pertemuan Ke-10
Noviyanto, ST Halaman 3
if(fin!=null) {
try{
fin.close();
}catch(IOException err) {
System.out.println("Eksepsi tidak diketahui : " + err);
}
}
}
}
}
Latihan 41. FileOutStream
import java.io.*;
class FileOutStream {
public static void main(String[] args){
if(args.length==0) {
System.out.println("Anda harus memasukkan nama file sebagai parameternya.");
return; }
byte data;
FileOutputStream fout=null;
try{
fout = new FileOutputStream(args[0]);
System.out.println("Ketik data yang ingin Anda tulis ke file.");
System.out.println("Ketik Q jika Anda ingin berhenti.");
data = (byte)System.in.read();
while(data!=(byte)'Q') {
fout.write(data);
data = (byte)System.in.read(); }
}catch(FileNotFoundException e) {
System.out.println("File : " + args[0] + " tidak dapat dibuka atau dibuat.");
}catch(IOException e) {
System.out.println("Eksepsi tidak diketahui : " + e);
}finally { //tutup file
if(fout!=null) {
try{
fout.close();
}catch(IOException err) {
System.out.println("Eksepsi tidak diketahui : " + err);
}
}
}
}
}
Keterangan : file output1.txt sebenarnya tidak ada, dengan perintah diatas akan secara
langsung terbuat
Pemrog. Berorientasi Objek **, Pertemuan Ke-10
Noviyanto, ST Halaman 4
G. Class File
Class File merupakan langkah awal dalam mempelajari proses input-output dengan
Java, karena File merupakan objek yang mewakili path, file, atau direktori pada
harddisk. Ada tiga cara membuat objek File, yaitu :
Menggunakan objek string sebagai argumen yang menginformasikan path untuk file
atau direktori.
Menggunakan dua langkah, dimana yang pertama untuk mendefinisikan direktori
dan yang kedua untuk file.
Menggunakan dua argumen, dimana yang pertama adalah argumen string yang
mendefinisikan direktori, dan yang kedua adalah argumen string yang
mendefinisikan nama file.
H. FileWriter
Di dalam aplikasi web, disamping database, penggunaan file untuk menyimpan data
cukup banyak dilakukan karena kebutuhan penyimpanan data yang sederhana cukup
dengan menggunakan file. FileWriter merupakan subclass dari OutputStreamWriter
yang merupakan subclass dari class abstract Writer. Class FileWriter memiliki
konstruktor yang umum seperti berikut :
FileWriter ( File objekfile );
FileWriter ( String pathkefile );
FileWriter ( String pathkefile, boolean append );
Contoh penggunaan :
File inifile = (pathdirektori, namafile);
FileWriter outputnya = new FileWriter (inifile);
Latihan 42. MenulisFile.java
import java.io.*;
class MenulisFile {
public static void main(String[] args){
if(args.length==0) {
System.out.println("Anda harus memasukkan nama file sebagai parameternya.");
return; }
String data;
FileWriter fout=null;
BufferedReader br = new BufferedReader(new InputStreamReader(System.in))
try{
fout = new FileWriter(args[0]);
System.out.println("Ketik data yang ingin Anda tulis ke file.");
System.out.println("Ketik BERHENTI jika Anda ingin berhenti.");
data = br.readLine();
while(!data.equals("BERHENTI")){ // \r\n digunakan untuk pindah baris
fout.write(data + "\r\n");
data = br.readLine();
}
}catch(FileNotFoundException e) {
System.out.println("File : " + args[0] + " tidak dapat dibuka atau dibuat.");
}catch(IOException e) {
System.out.println("Eksepsi tidak diketahui : " + e);
}finally //tutup file
if(fout!=null) {
try{
fout.close();
}catch(IOException err) {
System.out.println("Eksepsi tidak diketahui : " + err);
}
}
}
}
}
Pemrog. Berorientasi Objek **, Pertemuan Ke-10
Noviyanto, ST Halaman 5
I. FileReader
FileReader merupakan class yang dapat digunakan untuk membaca file teks.
Konstruktor dari FileReader :
FileReader(File objekfile);
FileReader(String pathkefile);
Method yang digunakan :
Read(char[] array);
Read(char[] array, int offset, int length);
Contoh penggunaan :
File fileteks = new File(direktori, namafile);
FileReader baca = new FileReader(fileteks);
C=baca.read(char[] yang dibaca);
Latihan 43. BacaFile.java
import java.io.*;
class BacaFile {
public static void main(String[] args){
if(args.length==0) {
System.out.println("Anda harus memasukkan nama file sebagai parameternya.");
return; }
String data;
FileReader fin=null;
try{
fin = new FileReader(args[0]);
BufferedReader br = new BufferedReader(fin);
//bungkus objek FileReader dengan objek BufferedReader
do{
data = br.readLine();
System.out.println(data);
}while(data!=null);
}catch(FileNotFoundException e) {
System.out.println("File : " + args[0] + " tidak ditemukan.");
}catch(IOException e) {
System.out.println("Eksepsi tidak diketahui : " + e);
}finally { //tutup file
if(fin!=null) {
try{
fin.close();
}catch(IOException err) {
System.out.println("Eksepsi tidak diketahui : " + err);
}
}
}
}
}
Pemrog. Berorientasi Objek **, Pertemuan Ke-10
Noviyanto, ST Halaman 6
LATIHAN
1. Jelaskan tentang Byte Stream dan Character Stream, beserta dengan
perbedaan utamanya ?
2. Berikan contoh program untuk DataInputStream dan DataOutputStream !
3. Buatlah program untuk mengecek keberadaan file/isi pada direktori !
4. Buatlah program untuk mengkopi suatu file teks ! Nama file yang hendak
dikopi dan hasil kopianya harus dilewatkan sebagai parameter pada waktu
eksekusi.
Contoh eksekusi program :
Java kopi file1.txt file2.txt
Pemrog. Berorientasi Objek **, Pertemuan Ke-11
Noviyanto, ST Halaman 1
GUI Pada Java
Pengantar
GUI (Graphical User Interface), memungkinkan user untuk berinteraksi dengan komputer
secara lebih baik.
Pengguna berinteraksi dengan berbagai elemen grafis,diantaranya: button, dialog box, menu,
dsb.
Sejak 1994 Sun Microsystem berupaya untuk membuat JAVA memiliki perangkat bergaya
desktop dengan ToolkitJAVA yang dikenal sebagai AWT (Abstract Windowing Toolkit)
Tahun 1997, muncul JFC (Java Foundation Class) untuk kepentingan pembuatan aplikasi
Window yang merupakan pengembangan dari AWT.
JFC mempunyai kode swing yang terdapat pada package yang disediakan pada JAVA SDK
versi 1.2 ke atas (JAVA 2)
JAVA menyediakan dua graphical library.
AWT (Abstract Windows Toolkit)
Swing
Contoh: import java.awt.* ;
Import java.awt.event.* ;
Import javax.swing.* ;
Graphical Object
Container (tempat), obyek yang dapat menampung komponen grafis dan tempat yang lebih
kecil
Contoh: frames, panels
Component, obyek grafis yang berfungsi untuk menampilkan data, menerima masukan, atau
menunjukkan suatu kondisi.
Contoh: buttons, labels, text fields
Event, obyek yang merepresentasikan suatu kejadian.
Contoh: gerakan mouse, penekanan tombol
Listener, suatu obyek yang menunggu suatu kejadian khusus dan akan bereaksi (melakukan
sesuatu) jika kejadian tersebut terjadi
Graphical Object
Pemrog. Berorientasi Objek **, Pertemuan Ke-11
Noviyanto, ST Halaman 2
Container : Frame
import javax.swing.*;
class FramePertamaku extends JFrame {
public FramePertamaku() {
setTitle( "Frame Pertama );
setSize( 300 , 200 );
}
}
public class Frameku {
public static void main (String args[ ] ) {
FramePertamaku coba = new FramePertamaku();
coba.show();
}
}
Beberapa method java.awt.Frame
void setResizable (boolean b)
menentukan apakah user dapat merubah ukuran frame
void setTitle(String s)
mengatur teks pada title bar
void setIconImage(Image image)
gambar yang digunakan sebagai icon dari frame
Component : Text
import java.awt.*;
public class WindowText extends Frame {
public void paint(Graphics g) {
setSize(300, 200);
setTitle(getClass().getName());
Font f = new Font( "Monospaced , Font.BOLD, 16);
g.setFont(f);
g.drawString( "Hello ... , 10 , 100);
g.drawString( "Salam kenal dari Frame ... , 30 ,120);
}
public static void main(String[ ] args) {
WindowText coba = new WindowText();
coba.setSize(500, 300);
coba.setLocation(200, 100);
coba.setTitle("Window Text );
coba.show();
}
}
Beberapa method java.awt.Font :
Font (String name, int style, int size)
mengatur jenis font, format font (PLAIN,BOLD,ITALIC) dan ukuran font.
String getFontName() mengetahui nama font face
String getFamily() mengetahui jenis keluarga font
Component : Label
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class KomponenLabel {
public static void main(String[ ] args) {
JFrame frame = new JFrame("Membuat Label");
JLabel label = new JLabel("Pemrograman Berorientasi Obyek");
frame.getContentPane().add(label);
frame.pack();
frame.setVisible(true);
frame.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
}
}
Pemrog. Berorientasi Objek **, Pertemuan Ke-11
Noviyanto, ST Halaman 3
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class KomponenLabelBerformat {
public static void main(String[] args) {
JFrame frame = new JFrame("Membuat Label");
JLabel label = new JLabel("Pemrograman Berorientasi Obyek");
label.setForeground(Color.yellow);
label.setBackground(Color.blue);
label.setOpaque(true);
label.setFont(new Font("SansSerif", Font.BOLD, 14));
frame.getContentPane().add(label);
frame.pack();
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
Component : TextField
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class TeksField {
public static void main(String[ ] args) {
JFrame frame = new JFrame("Membuat TeksField");
JLabel label = new JLabel("Nama :");
JTextField textField = new JTextField(20);
frame.getContentPane().setLayout(new FlowLayout());
frame.getContentPane().add(label);
frame.getContentPane().add(textField);
frame.pack();
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
Component
Beberapa obyek ContentPanel, yaitu :
JPasswordField, JTextArea, JButton, JRadioButton,
JCheckBox, JComboBox.
Event - Listener.
Jika sebuah CLASS ingin bereaksi atas aksi yang dilakukan oleh pemakai(user) melalui
keyboard, mouse atau lainnya, maka Java menjawab dengan sistem yang disebut sebagai Event
Handling.
Program atau Interface ini disebut sebagai EventListener
ActionListener
Bereaksi atas perubahan komponen , seperti klik mouse atau tombol.
AdjustmentListener
Bereaksi atas perubahaan komponen untuk penyesuaian, misalnnya scrollbar yang digerakkan.
FocusListener
Event yang disebabkan oleh focus pada field, misalnya kursor berada pada field tersebut.
ItemListener
Bereaksi pada perubahan checkbox, radiobutton dan lainnya.
KeyListener
Bereaksi atas keyboard, misalnya penekanan tombol ALT Ctrl dan lainnya.
Pemrog. Berorientasi Objek **, Pertemuan Ke-11
Noviyanto, ST Halaman 4
WindowsListener
Bereaksi atas perubahaan pada window, misalnya diperbesar, diperkecil, digeser atau ditutup.
MouseMotionListener
Bereaksi atas pergerakan mouse, misalnya bila melewati area komponen tertentu.
Listeners terdaftar pada java.awt.event.*
Setelah komponen dideklarasikan, maka listener dapat ditambahkan pada komponen tersebut,
misalnya pada Button:
Jbutton b1=new Jbutton("Tombol"); b1.addActionListener( )
Listener harus ditembahkan lebih dahulu ke dalam komponen, sebelum komponen tersebut
diletakkan pada Frame/ Content Pane.
Contoh form action listener dengan dua tombol:
ketika tombol 1 ditekan maka text pada form akan berubah menjadi "tombol 1 ditekan "
Sumber:
http://www.freewebs.com/tekomitn/Materi/PBO/Basic%20GUI.ppt
Hermawan, Beni. Menguasai Java 2 & Object oriented Programming,Penerbit Andi
Yogyakarta, 2004.
www2.ukdw.ac.id/kuliah/info/IN1253/DasarPerancanganGUI.pdf
roemly.blogspot.com/2008/06/event-listener.html - 101k
Pemrog. Berorientasi Objek **, Pertemuan Ke-12
Noviyanto Halaman 1
Sinkronisasi
Mengapa menggunakan sinkronisasi threads?
Bagaimanapun juga sebuah thread yang berjalan bersama-sama kadang-kadang membutuhkan
resource atau method dari luar
Butuh untuk berkomunikasi satu dengan yang lain sehingga dapat mengetahui status dan
aktifitas mereka
Contoh: Permasalahan Produser-Konsumer
1 class TwoStrings {
2 static void print(String str1, String str2) {
3 System.out.print(str1);
4 try {
5 Thread.sleep(500);
6 } catch (InterruptedException ie) {
7 }
8 System.out.println(str2);
9 }
10 }
11 class PrintStringsThread implements Runnable {
12 Thread thread;
13 String str1, str2;
14 PrintStringsThread(String str1, String str2) {
15 this.str1 = str1;
16 this.str2 = str2;
17 thread = new Thread(this);
18 thread.start();
19 }
20 public void run() {
21 TwoStrings.print(str1, str2);
22 }
23 }
24 class TestThread {
25 public static void main(String args[]) {
26 new PrintStringsThread("Hello ", "there.");
27 new PrintStringsThread("How are ", "you?");
28 new PrintStringsThread("Thank you ",
29 "very much!");
30 }
31 }
Contoh hasil:
Hello How are Thank you there.
you?
very much!
Mengunci sebuah object:
Untuk memastikan bahwa hanya satu thread yang mendapatkan hak akses kedalam method
tertentu
Java memperbolehkan penguncian terhadap sebuah object termasuk method-method-nya
dengan menggunakan monitor
Object tersebut akan menjalankan sebuah monitor implicit pada saat object dari
method sinkronisasi dipanggil
Sekali object tersebut dimonitor, monitor tersebut akan memastikan bahwa tidak ada
thread yang akan mengakses object yang sama
Pemrog. Berorientasi Objek **, Pertemuan Ke-12
Noviyanto Halaman 2
Sinkronisasi sebuah method:
Menggunakan keyword synchronized
Dapat menjadi header dari pendefinisian method
Dapat mensinkronisasi object dimana method tersebut menjadi anggota dari
synchronized (<object>) {
//statements yang akan disinkronisasikan
}
Contoh Synchronized Pertama
1 class TwoStrings {
2 synchronized static void print(String str1,
3 String str2) {
4 System.out.print(str1);
5 try {
6 Thread.sleep(500);
7 } catch (InterruptedException ie) {
8 }
9 System.out.println(str2);
10 }
11 }
12 class PrintStringsThread implements Runnable {
13 Thread thread;
14 String str1, str2;
15 PrintStringsThread(String str1, String str2) {
16 this.str1 = str1;
17 this.str2 = str2;
18 thread = new Thread(this);
19 thread.start();
20 }
21 public void run() {
22 TwoStrings.print(str1, str2);
23 }
24 }
25 class TestThread {
26 public static void main(String args[]) {
27 new PrintStringsThread("Hello ", "there.");
28 new PrintStringsThread("How are ", "you?");
29 new PrintStringsThread("Thank you ",
30 "very much!");
31 }
32 }
Contoh Hasil:
Hello there.
How are you?
Thank you very much!
Pemrog. Berorientasi Objek **, Pertemuan Ke-12
Noviyanto Halaman 3
Contoh Synchronized Kedua
1 class TwoStrings {
2 static void print(String str1, String str2) {
3 System.out.print(str1);
4 try {
5 Thread.sleep(500);
6 } catch (InterruptedException ie) {
7 }
8 System.out.println(str2);
9 }
10 }
11 class PrintStringsThread implements Runnable {
12 Thread thread;
13 String str1, str2;
14 TwoStrings ts;
15 PrintStringsThread(String str1, String str2,
16 TwoStrings ts) {
17 this.str1 = str1;
18 this.str2 = str2;
19 this.ts = ts;
20 thread = new Thread(this);
21 thread.start();
22 }
23 public void run() {
24 synchronized (ts) {
25 ts.print(str1, str2);
26 }
27 }
28 }
29 class TestThread {
30 public static void main(String args[]) {
31 TwoStrings ts = new TwoStrings();
32 new PrintStringsThread("Hello ", "there.", ts);
33 new PrintStringsThread("How are ", "you?", ts);
34 new PrintStringsThread("Thank you ",
35 "very much!", ts);
36 }}
Komunikasi Antar Thread: Methods
Methods untuk komunikasi Interthread
public final void wait()
Menyebabkan thread ini menunggu sampai thread yang lain memanggil
notify atau notifyAll method dari object ini. Hal ini dapat menyebabkan
InterruptedException.
public final void notify()
Membangunkan thread yang telah memanggil method wait dari object yang
sama.
public final void notifyAll()
Membangunkan semua thread yang telah memanggil method wait dari object
yang sama.
Pemrog. Berorientasi Objek **, Pertemuan Ke-12
Noviyanto Halaman 4
Komunikasi Antar Thread
Contoh Produsen-Konsumen
1 class SharedData {
2 int data;
3 synchronized void set(int value) {
4 System.out.println("Generate " + value);
5 data = value;
6 }
7 synchronized int get() {
8 System.out.println("Get " + data);
9 return data;
10 }
11 }
12 class Producer implements Runnable {
13 SharedData sd;
14 Producer(SharedData sd) {
15 this.sd = sd;
16 new Thread(this, "Producer").start();
17 }
18 public void run() {
19 for (int i = 0; i < 10; i++) {
20 sd.set((int)(Math.random()*100));
21 }
22 }
23 }
Pemrog. Berorientasi Objek **, Pertemuan Ke-12
Noviyanto Halaman 5
24 class Consumer implements Runnable {
25 SharedData sd;
26 Consumer(SharedData sd) {
27 this.sd = sd;
28 new Thread(this, "Consumer").start();
29 }
30 public void run() {
31 for (int i = 0; i < 10 ; i++) {
32 sd.get();
33 }
34 }
35 }
36 class TestProducerConsumer {
37 public static void main(String args[])
38 throws Exception {
39 SharedData sd = new SharedData();
40 new Producer(sd);
41 new Consumer(sd);
42 }
43 }
Contoh hasil:
Generate 8
Generate 45
Generate 52
Generate 65
Get 65
Generate 23
Get 23
Generate 49
Get 49
Generate 35
Get 35
Generate 39
Get 39
Generate 85
Get 85
Get 85
Get 85
Generate 35
Get 35
Get 35
Contoh Produsen-Konsumen yang telah diperbaiki
1 class SharedData {
2 int data;
3 boolean valueSet = false;
4 synchronized void set(int value) {
5 if (valueSet) { //hanya dihasilkan jika mempumyai sebuah nilai
6 try {
7 wait();
8 } catch (InterruptedException ie) {
9 }
10 }
11 System.out.println("Generate " + value);
12 data = value;
13 valueSet = true;
14 notify();
15 }
16 synchronized int get() {
17 if (!valueSet) {
18 //producer belum memiliki suatu nilai
19 try {
20 wait();
21 } catch (InterruptedException ie) {
22 }
23 }
24 System.out.println("Get " + data);
25 valueSet = false;
26 notify();
27 return data;
28 }
29 }
30
31 /* Bagian kode tertentu tidak berubah. */
Pemrog. Berorientasi Objek **, Pertemuan Ke-12
Noviyanto Halaman 6
Contoh hasil:
Generate 76
Get 76
Generate 25
Get 25
Generate 34
Get 34
Generate 84
Get 84
Generate 48
Get 48
Generate 29
Get 29
Generate 26
Get 26
Generate 86
Get 86
Generate 65
Get 65
Generate 38
Get 38
Generate 46
Get 46
Ringkasan
Sinkronisasi
Mengunci sebuah Object
Keyword synchronized
Method header
Object
Komunikasi Antar Thread (Interthread)
Methods
wait
notify
notifyAll

You might also like

  • MEMBACA ALQURAN
    MEMBACA ALQURAN
    Document126 pages
    MEMBACA ALQURAN
    Pak Teh
    100% (6)
  • Modul
    Modul
    Document62 pages
    Modul
    Ilham Idrus
    No ratings yet
  • Jurnal
    Jurnal
    Document41 pages
    Jurnal
    Ilham Idrus
    100% (1)
  • Jurnal
    Jurnal
    Document68 pages
    Jurnal
    Ilham Idrus
    No ratings yet
  • Jurnal
    Jurnal
    Document36 pages
    Jurnal
    Ilham Idrus
    No ratings yet
  • Modul
    Modul
    Document172 pages
    Modul
    Ilham Idrus
    100% (1)
  • Kawasan Khusus
    Kawasan Khusus
    Document396 pages
    Kawasan Khusus
    Muhammad Riza
    No ratings yet
  • Teknik
    Teknik
    Document88 pages
    Teknik
    Ilham Idrus
    No ratings yet