Just another WordPress.com site

Bab 3
Teknik Pemrograman Lanjut
3.1 Tujuan
Modul ini mengenalkan suatu teknik pemrograman yang lebih tinggi. Dalam bagian ini
Anda akan mempelajari rekursif dan tipe data abstrak.
Setelah menyelesaikan pelajaran ini, diharapkan Anda dapat:
1. Memahami dan menggunakan rekursif
2. Mengetahui perbedaan antara stacks dan queues
2. Mengimplementasikan suatu implementasi sequensial dari stacks dan queues
3. Mengimplementasikan suatu implementasi linked dari stacks and queues
4. Menggunakan Collection classes yang ada
3.2 Rekursif
3.2.1 Apa yang dimaksud dengan Rekursif?
Rekursif adalah teknik pemecahan masalah yang powerful dan dapat digunakan ketika
inti dari masalah terjadi berulang kali. Tentu saja, tipe dari masalah ini dapat dipecahkan
mengunakan perkataan berulang-ulang (i.e., menggunakan konstruksi looping seperti
for, while dan do-while).
Sesungguhnya, iterasi atau perkataan berulang-ulang merupakan peralatan yang lebih
efisien jika dibandingkan dengan recursif tetapi recursion menyediakan solusi yang lebih
baik untuk suatu masalah. Pada rekursif, method dapat memanggil dirinya sendiri. Data
yang berada dalam method tersebut seperti argument disimpan sementara kedalam
stack sampai method pemanggilnya diselesaikan.
3.2.2 Rekursif Vs. Iterasi
Untuk pengertian yang lebih baik dari rekursif, mari kita lihat pada bagaimana macammacam
dari teknik iterasi. Dalam teknik-teknik tersebut dapat juga kita lihat
penyelesaian sebuah loop yang lebih baik menggunakan rekursif dari pada iterasi.
Menyelesaikan masalah dengan perulangan menggunakan iterasi secara tegas juga
digunakan pada struktur kontrol pengulangan. Sementara itu, untuk rekursif, task
diulangi dengan memanggil sebuah method pengulangan. Maksud dari hal tersebut
adalah untuk menggambarkan sebuah masalah kedalam lingkup yang lebih kecil dari
pengulangan itu sendiri. Pertimbangan suatu perhitungan yang faktorial dalam
penentuan bilangan bulat. Definisi rekursif dari hal tersebut dapat diuraikan sebagai
berikut: factorial(n) = factorial(n-1) * n; factorial(1) = 1. Sebagai contohnya, nilai
faktorial dari 2 sama dengan fatorial (1)*2, dimana hasilnya adalah 2. Faktorial dari 3
adalah 6, dimana sama dengan faktorial dari (2)*3.
Pengenalan Pemrograman 2 1

Gambar 1: Contoh Factorial
Dengan iterasi, proses diakhiri ketika kondisi loop gagal atau salah. Dalam kasus dari
penggunaan rekursif, proses yang berakhir dengan kondisi tertentu disebut
permasalahan dasar yang telah tercukupi oleh suatu pembatasan kondisi. Permasalahan
yang mendasar merupakan kejadian yang paling kecil dari sebuah masalah. Sebagai
contohnya, dapat dilihat pada kondisi rekursif pada faktorial, kasus yang mudah adalah
ketika inputnya adalah 1. 1 dalam kasus ini merupakan inti dari masalah.
Penggunaan dari iterasi dan rekursif dapat bersama-sama memandu loops jika hal ini
tidak digunakan dengan benar.
Keuntungan iterasi dibandingkan recursion adalah performance yang lebih baik. Hal
tersebut lebih cepat untuk recursion sejak terbentuknya sebuah parameter pada sebuah
method yang disebabkan oleh suatu CPU time. Bagaimanapun juga, rekursif mendorong
practice software engineering yang lebih baik, sebab teknik ini biasanya dihasilkan pada
kode yang singkat yang lebih mudah untuk dimengerti dan juga mempromosikan
reuseability pada suatu solusi yang telah diterapkan.
Memilih antara iterasi dan rekursif merupakan masalah dari menjaga keseimbangan
antara baiknya sebuah performance dan baiknya software engineering.
3.2.3 Factorials: Contoh
Listing program berikut ini menunjukkan bagaimana menghitung faktorial menggunakan
teknik iterasi.
class FactorialIter {
static int factorial(int n) {
int result = 1;
for (int i = n; i > 1; i–) {
result *= i;
}
Pengenalan Pemrograman 2 2
return result;
}
public static void main(String args[]) {
int n = Integer.parseInt(args[0]);
System.out.println(factorial(n));
}
}
Dibawah ini merupakan listing program yang sama tetapi menggunakan rekursif.
class FactorialRecur {
static int factorial(int n) {
if (n == 1) { /* The base case */
return 1;
}
/* Recursive definition; Self-invocation */
return factorial(n-1)*n;
}
public static void main(String args[]) {
int n = Integer.parseInt(args[0]);
System.out.println(factorial(n));
}
}
3.2.4 Print n in any Base: Contoh yang lain
Sekarang, pertimbangan dari masalah dalam pencetakkan suatu angka desimal yang
nilai basenya telah ditetapkan oleh pengguna. Ingat bahwa solusi dalam hal ini untuk
menggunakan repetitive division dan untuk menulis sisa perhitungannya. Proses akan
berakhir ketika sisa hasil pembagian kurang dari base yang ditetapkan. Dapat
diasumsikan jika nilai input desimal adalah 10 dan kita akan mengkonversinya menjadi
base 8. Inilah solusinya dengan perhitungan menggunakan pensil dan kertas.
Dari solusi diatas, 10 adalah sama dengan 12 base 8.
Contoh berikutnya. Nilai input desimalnya adalah 165 dan akan dikonversi ke base 16.
Pengenalan Pemrograman 2 3
165 adalah sama dengan A5 base 16. Catatan: A=10.
Berikut ini merupakan solusi iterative untuk masalah diatas.
class DecToOthers {
public static void main(String args[]) {
int num = Integer.parseInt(args[0]);
int base = Integer.parseInt(args[1]);
printBase(num, base);
}
static void printBase(int num, int base) {
int rem = 1;
String digits = “0123456789abcdef”;
String result = “”;
/* the iterative step */
while (num!=0) {
rem = num%base;
num = num/base;
result = result.concat(digits.charAt(rem)+””);
}
/* printing the reverse of the result */
for(int i = result.length()-1; i >= 0; i–) {
System.out.print(result.charAt(i));
}
}
}
Berikut ini merupakan recursion untuk masalah yang sama dengan solusi sebelumnya.
class DecToOthersRecur {
static void printBase(int num, int base) {
String digits = “0123456789abcdef”;
/* Recursive step*/
if (num >= base) {
printBase(num/base, base);
}
/* Base case: num < base */
System.out.print(digits.charAt(num%base));
}
public static void main(String args[]) {
int num = Integer.parseInt(args[0]);
int base = Integer.parseInt(args[1]);
printBase(num, base);
}
}
Pengenalan Pemrograman 2 4
3.3 Abstract Data Type
3.3.1 Apa yang Dimaksud dengan Abstract Data Type?
Abstract Data Type (ADT) adalah kumpulan dari elemen-elemen data yang disajikan
dengan satu set operasi yang digambarkan pada elemen-elemen data tersebut. Stacks,
queues dan binary trees adalah tiga contoh dari ADT. Dalam bab ini, Anda akan
mempelajari tentang stacks dan queues.
3.3.2 Stacks
Stack adalah satu set atau urutan elemen data dimana manipulasi data dari elemenelemen
hanya diperbolehkan pada tumpukan teratas dari stack. Hal ini merupakan
perintah pengumpulan data secara linier yang disebut “last in, first out” (LIFO). Stacks
berguna untuk bermacam-macam aplikasi seperti pattern recognition dan
pengkonversian antar notasi infix, postfix dan prefix .
Dua operasi yang dihubungkan dengan stacks adalah operasi push dan pop. Push berarti
memasukkan data kedalam stacks yang paling atas dimana pop sebagai
penunjuk/pointer untuk memindahkan elemen ke atas stacks. Untuk memahami
bagaimana cara kerja stacks, pikirkan bagaimana Anda dapat menambah atau
memindakan sebuah data dari tumpukan data. Pikiran Anda akan memberitahu Anda
untuk menambah atau memindahkan data hanya pada stack yang paling atas karena
jika menggunakan cara lain, dapat menyebabkan tumpukan stack akan terjatuh.
Dibawah ini merupakan ilustrasi bagaimana tampilan dari stacks.
n-1

6
5 Jayz top
4 KC
3 Jojo
2 Toto
1 Kyla
0 DMX bottom
Tabel 1.2.2: Ilustrasi Stack
Stack akan berarti penuh jika jangkauan cell teratas disimbolkan dengan n-1. Jika nilai
teratas / top sama dengan -1, stack berarti kosong.
Pengenalan Pemrograman 2 5
3.3.3 Queues
Queues adalah contoh lain dari ADT. Hal ini merupakan perintah pengumpulan data yang
disebut “first-in, first-out”. Aplikasi ini meliputi jadwal pekerjaan dalam operating
system, topological sorting dan graph traversal.
Enqueue dan dequeue merupakan operasi yang dihubungkan dengan queues. Enqueu
menunjuk pada memasukkan data pada akhir queue dimana dequeue berarti
memindahkan elemen dari queue tersebut. Untuk mengingat bagaimana queue bekerja,
ingatlah arti khusus dari queue yaitu baris. Berikut ini bagaimana cara kerja queue.
Siapa yang akan mendapatkan kesempatan pertama untuk bertemu bintang idolanya
dari mereka yang sedang menunggu dalam sebuah barisan? Seharusnya orang pertama
yang berada pada barisan tersebut. Orang ini mendapat kesempatan pertama untuk
meninggalkan barisan. Hubungkan hal tersebut dengan bagaimana queue bekerja.
Berikut ini merupakan ilustrasi dari bagaimana tampilan dari queue.
0 1 2 3 4 5 6 7 8 9 … n-1
Eve Jayz KC Jojo Toto Kyla DMX
fron
t
end  Insert
 Delete
Tabel 1.2.3: Ilustrasi Queue
Queue akan kosong jika nilai end kurang dari front. Sementara itu, akan penuh jika end
sama dengan n-1.
3.3.4 Sequential and Linked Representation
ADTs biasanya dapat diwakilkan menggunakan sequential dan linked representation. Hal
ini memudahkan untuk membuat sequential representation dengan menggunakan array.
Bagaimanapun juga, masalah dengan menggunakan array adalah pembatasan size,
yang membuatnya tidak fleksibel. Dengan menggunakan array, sering terjadi
kekurangan atau kelebihan space memory. Mempertimbangkan hal tersebut, Anda harus
membuat sebuah array dan mendeklarasikannya agar mampu menyimpan 50 elemen.
Jika user hanya memasukkan 5 elemen, maka 45 space pada memory akan sia-sia.
Disisi lain, jika user ingin memasukkan 51 elemen, space yang telah disediakan didalam
array tidak akan cukup.
Dibandingkan dengan sequential representation, linked representation lebih sedikit rumit
tetapi lebih fleksibel. Linked representation menyesuaikan memory yang dibutuhkan oleh
user. Penjelasan lebih lanjut pada linked representation akan didiskusikan pada bab
berikutnya.
3.3.5 Sequential Representation dari Integer Stack
class SeqStack {
int top = -1; /* initially, the stack is empty */
int memSpace[]; /* storage for integers */
int limit; /* size of memSpace */
Pengenalan Pemrograman 2 6
SeqStack() {
memSpace = new int[10];
limit = 10;
}
SeqStack(int size) {
memSpace = new int[size];
limit = size;
}
boolean push(int value) {
top++;
/* check if the stack is full */
if (top < limit) {
memSpace[top] = value;
} else {
top–;
return false;
}
return true;
}
int pop() {
int temp = -1;
/* check if the stack is empty */
if (top >= 0) {
temp = memSpace[top];
top–;
} else {
return -1;
}
return temp;
}
public static void main(String args[]) {
SeqStack myStack = new SeqStack(3);
myStack.push(1);
myStack.push(2);
myStack.push(3);
myStack.push(4);
System.out.println(myStack.pop());
System.out.println(myStack.pop());
System.out.println(myStack.pop());
System.out.println(myStack.pop());
}
}
3.3.6 Linked Lists
Sebelum mengimplementasikan linked representation dari stacks, pertama mari kita
pelejari bagaimana membuat linked representation. Dalam hal ini, kita akan
menggunakan linked lists.
Linked list merupakan struktur dinamis yang berlawanan dengan array, yang merupakan
struktur statis. Hal ini berarti linked list dapat tumbuh dan berkurang dalam size yang
bergantung pada kebutuhan user. Linked list digambarkan sebagai kumpulan dari nodes,
Yang masing-masing berisi data dan link atau pointer ke node berikutnya didalam list.
Gambar dibawah ini menunjukkan tampilan dari node.Gambar 2.6a: Sebuah node
Berikut ini merupakan contoh dari non-empty linked list dengan 3 node.
Gambar 3.6b: Non-empty linked list dengan tiga node
Berikut ini bagaimana class node diimplementasikan. Class ini dapat digunakan untuk
membuat linked list.
class Node {
int data; /* integer data contained in the node */
Node nextNode; /* the next node in the list */
}
class TestNode {
public static void main(String args[]) {
Node emptyList = null; /* create an empty list */
/* head points to 1st node in the list */
Node head = new Node();
/* initialize 1st node in the list */
head.data = 5;
head.nextNode = new Node();
head.nextNode.data = 10;
/* null marks the end of the list */
head.nextNode.nextNode = null;
/* print elements of the list */
Node currNode = head;
while (currNode != null) {
System.out.println(currNode.data);
currNode = currNode.nextNode;
}
}
}
Pengenalan Pemrograman 2 8
3.3.7 Linked Representation dari Integer Stack
Sekarang Anda telah mempelajari tentang linked list. Maka Anda telah siap untuk
menerapkan apa yang telah Anda pelajari untuk implementasi linked representation dari
stack.
class DynamicIntStack{
private IntStackNode top; /* head or top of the stack */
class IntStackNode { /* node class */
int data;
IntStackNode next;
IntStackNode(int n) {
data = n;
next = null;
}
}
void push(int n){
/* no need to check for overflow */
IntStackNode node = new IntStackNode(n);
node.next = top;
top = node;
}
int pop() {
if (isEmpty()) {
return -1;
/* may throw a user-defined exception */
} else {
int n = top.data;
top = top.next;
return n;
}
}
boolean isEmpty(){
return top == null;
}
public static void main(String args[]) {
DynamicIntStack myStack = new DynamicIntStack();
myStack.push(5);
myStack.push(10);
/* print elements of the stack */
IntStackNode currNode = myStack.top;
while (currNode!=null) {
System.out.println(currNode.data);
currNode = currNode.next;
}
System.out.println(myStack.pop());
System.out.println(myStack.pop());
}
}
Pengenalan Pemrograman 2 9
Gambar 1.2.7: Implementasi linked dari stack
3.3.8 Java Collections
Saat ini Anda telah diperkenalkan kepada dasar abstract data types. Pada intinya, Anda
telah mempelajari tentang dasar dari linked lists, stacks dan queue. Berita baik bahwa
abstract data types telah siap untuk diimplementasikan dan dimasukkan dalam Java.
Class Stack dan LinkedList diperbolehkan digunakan tanpa pengertian yang lengkap dari
konsep ini. Bagaimanapun juga, sebagai ilmuwan komputer, sangat penting untuk
mengerti konsep dari abstract data types. Oleh karena itu, penjelasan terperinci masih
disampaikan dalam bagian yang terdahulu. Dengan peluncuran dari J2SE5.0, queue
interface telah tersedia. Untuk detail pada class dan interface ini, dapat dilihat pada
dokumentasi Java API.
Kepada kita, Java telah menyajikan Collection classes dan interfaces yang lain, yang
semuanya dapat ditemukan di java.util package. Contoh dari Collection classes termasuk
LinkedList, ArrayList, HashSet dan TreeSet. Class tersebut benar-benar implementasi
dari collection interfaces yang berbeda. Induk hirarki dari collection interfaces adalah
collection interfaces itu sendiri. Sebuah collection hanya sebuah grup dari object yang
diketahui sebagai elemennya sendiri. Collection memperbolehkan penggandaan/salinan
dan tidak membutuhkan pemesanan elemen secara spesifik.
SDK tidak menyediakan implementasi built-in yang lain dari interface ini tetapi
mengarahkan subinterfaces, Set interfaces dan List interfaces diperbolehkan. Sekarang,
apa perbedaan dari kedua interface tersebut. Set merupakan collection yang tidak
dipesan dan tidak ada penggandaan didalamnya. Sementara itu, list merupakan
collection yang dipesan dari elemen-elemen dimana juga diperbolehkannya
penggandaan. HashSet, LinkedHashSet dan TreeSet suatu implementasi class dari Set
interfaces. ArrayList, LinkedList dan Vector suatu implementasi class dari List interfaces.
<root interface>
Collection
<interface>
Set
<interface>
List
<implementing classes> <implementing classes>
HashSet LinkedHashSet TreeSet ArrayList LinkedList Vector
Tabel 1.2.8a: Java collections
Berikut ini adalah daftar dari beberapa Collections methods yang disediakan dalam
Collection API dari Java 2 Platform SE v1.4.1. Pada Java 2 Platform SE v.1.5.0, methods
ini telah dimodifikasi untuk menampung generic types. Sejak generic types masih belum
selesai dibahas, sebaiknya mempertimbangkan method ini terlebih dahulu. Disarankan
bahwa Anda mengacu pada Collection methods yang terbaru dimana Anda lebih mudah
Pengenalan Pemrograman 2 10
mengerti generic types, yang akan didiskusikan pada chapter berikutnya.
Collection Methods
public boolean add(Object o)
Memasukkan Object o kedalam collection ini. Mengembalikan nilai true jika o telah
sukse ditambahkan kedalam collection.
public void clear()
Menghapus semua element dari collection ini.
public boolean remove(Object o)
Menghapus single instance dari Object o pada collection ini, jika hal tersebut telah
diinputkan. Mengembalikan nilai true jika o telah ditemukan dan dihapus dari
collection.
public boolean contains(Object o)
Mengembalikan nilai true jika collection ini berisi Object o.
public boolean isEmpty()
Mengembalikan nilai true jika collection ini tidak berisi object atau element apapun.
public int size()
Mengembalikan nomor dari elements pada collection ini.
public Iterator iterator()
Mengembalikan sebuah iterator yang menunjukkan kita pada isi collection ini.
public boolean equals(Object o)
Mengembalikan nilai jika Object o sama dengan yang ada pada collection.
public int hashCode()
Mengembalikan nilai hash code (i.e., the ID) untuk collection ini. Objects atau
collections yang sama memiliki nilai hash code atau ID yang sama.
Tabel 1.2.8b: Methods dari class Collection
Anda diharapkan mengacu pada dokumentasi API untuk mengetahui daftar lengkap dari
methods dalam Collection, List dan Set interface.
Saat ini kita akan melihat beberapa collection classes. Harap mengacu pada API untuk
daftar dari methods yang dimasukkan kedalam class ini.
Pada bagian sebelumnya, Anda telah melihat bagaimana mengimplementasikan linked
list dengan cara Anda sendiri. Java SDK juga telah menyediakan built-implementation
dari linked list untuk kita. LinkedList class berisi methods yang memperbolehkan linked
list digunakan seperti stacks, queue atau ADT yang lain. Listing program berikut ini
menunjukan bagaimana menggunakan class LinkedList.
Pengenalan Pemrograman 2 11

import java.util.*;
class LinkedListDemo {
public static void main(String args[]) {
LinkedList list = new LinkedList();
list.add(new Integer(1));
list.add(new Integer(2));
list.add(new Integer(3));
list.add(new Integer(1));
System.out.println(list + “, size = ” + list.size());
list.addFirst(new Integer(0));
list.addLast(new Integer(4));
System.out.println(list);
System.out.println(list.getFirst() + “, ” +
list.getLast());
System.out.println(list.get(2) + “, ” + list.get(3));
list.removeFirst();
list.removeLast();
System.out.println(list);
list.remove(new Integer(1));
System.out.println(list);
list.remove(3);
System.out.println(list);
list.set(2, “one”);
System.out.println(list);
}
}
ArrayList merupakan versi fleksibel dari array biasa. Yang mengimplementasikan List
interface. Telitilah kode berikut ini.
import java.util.*;
class ArrayListDemo {
public static void main(String args[]) {
ArrayList al = new ArrayList(2);
System.out.println(al + “, size = ” + al.size());
al.add(“R”);
al.add(“U”);
al.add(“O”);
System.out.println(al + “, size = ” + al.size());
al.remove(“U”);
System.out.println(al + “, size = ” + al.size());
ListIterator li = al.listIterator();
while (li.hasNext())
System.out.println(li.next());
Object a[] = al.toArray();
for (int i=0; i<a.length; i++)
System.out.println(a[i]);
}
}
Pengenalan Pemrograman 2 12

HashSet merupakan sebuah implementasi dari Set interface yang berguna pada hash
table. Penggunaan suatu hash table lebih mudah dan cepat untuk melihat lebih detail
elemen-elemen yang ada. Table menggunakan suatu rumusan untuk menentukan
dimana suatu objek disimpan. Teliti program ini, yang menggunakan class HashSet.
import java.util.*;
class HashSetDemo {
public static void main(String args[]) {
HashSet hs = new HashSet(5, 0.5f);
System.out.println(hs.add(“one”));
System.out.println(hs.add(“two”));
System.out.println(hs.add(“one”));
System.out.println(hs.add(“three”));
System.out.println(hs.add(“four”));
System.out.println(hs.add(“five”));
System.out.println(hs);
}
}
TreeSet merupakan sebuah implementasi dari Set interface yang menggunakan tree.
Class ini memastikan bahwa yang disortir akan diurutkan secara ascending.
Pertimbangkan, bagaimana class TreeSet telah digunakan dalam listing program berikut
ini.
import java.util.*;
class TreeSetDemo {
public static void main(String args[]) {
TreeSet ts = new TreeSet();
ts.add(“one”);
ts.add(“two”);
ts.add(“three”);
ts.add(“four”);
System.out.println(ts);
}
}
Gambar 1.2.8: Contoh TreeSet
Pengenalan Pemrograman 2 13

3.4 Latihan
3.4.1 Faktor Persekutuan Terbesar
Faktor persekutuan terbesar (FPB) dari dua angka adalah angka yang terbesar selalu
dibagi oleh angka yang satunya, kemudian modulus atau sisa pembagian membagi
angka kedua dan seterusnya hingga sisa pembagian dari kedua angka tersebut sama
dengan nol. Menggunakan Euclid’s method, buatlah dua kode untuk penghitungan dua
angka. Gunakan iterasi untuk kode program yang pertama dan rekursif untuk kode
program berikutnya.
Catatan pada algoritma Euclid :
1. Sebagai masukkan integers x dan y.
2. Ulangi step dibawah ini while y != 0
a. y = x % y;
b. x = Nilai lama y;
3. Return x.
Contoh, x = 14 dan y = 6.
y = x % y = 14 % 6 = 2
x = 6
y = x % y = 6 % 2 = 0
x = 2 (FPB)
3.4.2 Sequential Representation dari Integer Queue
Dengan menggunakan array, implementasikan sebuah integer queue seperti contoh
pada sequential stack.
3.4.3 Linked Representation dari Integer Queue
Dengan menggunakan ide dari linked list, implementasikan sebuah integer queue
dinamis seperti integer stack dinamis yang diperkenalkan seperti contoh berikut.
3.4.4 Address Book
Dengan menggunakan Java collection, buatlah sebuah program yang memperbolehkan
user untuk insert, delete dan view address. Setiap address berisi nama , alamat dan
nomor telepon dari orang yang mengisinya. Pengisian data dimasukkan dengan cara
queue tetapi penghapusan dilakukan dengan cara stack.
Dalam contoh ini, kita akan menggunakan text editor untuk mengedit program Java.
Juga membuka terminal window untuk meng-compile dan meng-execute program Java
anda.
Pengenalan Pemrograman 2 14

Bab 2
Exceptions dan Assertions
2.1 Tujuan
Dasar penanganan exception telah dikenalkan pada anda di kursus pemrograman
pertama. Bab ini membahas secara lebih dalam mengenai exception dan juga sedikit
menyinggung tentang assertion.
Setelah menyelesaikan pembahasan, anda diharapkan dapat :
1. Menangani exception dengan menggunakan try, catch dan finally
2. Membedakan penggunaan antara throw dengan throws
3. Menggunakan exception class yang berbeda – beda
4. Membedakan antara checked exceptions dan unchecked exceptions
5. Membuat exception class tersendiri
6. Menjelaskan keunggulan penggunaan assertions
7. Menggunakan assertions
2.2 Apa itu Exception?
2.2.1Pendahuluan
Bugs dan error dalam sebuah program sangat sering muncul meskipun program
tersebut dibuat oleh programmer berkemampuan tinggi. Untuk menghindari
pemborosan waktu pada proses error-checking, Java menyediakan mekanisme
penanganan exception.
Exception adalah singkatan dari Exceptional Events. Kesalahan (errors) yang terjadi
saat runtime, menyebabkan gangguan pada alur eksekusi program. Terdapat
beberapa tipe error yang dapat muncul. Sebagai contoh adalah error pembagian 0,
mengakses elemen di luar jangkauan sebuah array, input yang tidak benar dan
membuka file yang tidak ada.
2.2.2Error dan Exception Classes
Seluruh exceptions adalah subclasses, baik secara langsung maupun tidak langsung,
dari sebuah root class Throwable. Kemudian, dalam class ini terdapat dua kategori
umum : Error class dan Exception class.
Exception class menunjukkan kondisi yang dapat diterima oleh user program.
Umumnya hal tersebut disebabkan oleh beberapa kesalahan pada kode program.
Contoh dari exceptions adalah pembagian oleh 0 dan error di luar jangkauan array.
Pengenalan Pemrograman 2 1

Error class digunakan oleh Java run-time untuk menangani error yang muncul pada
saat dijalankan. Secara umum hal ini di luar control user karena kemunculannya
disebabkan oleh run-time environment. Sebagai contoh adalah out of memory dan
harddisk crash.
2.2.3Sebuah Contoh
Perhatikan contoh program berikut :
class DivByZero {
public static void main(String args[]) {
System.out.println(3/0);
System.out.println(“Cetak.”);
}
}
Jika kode tersebut dijalankan, akan didapatkan pesan kesalahan sebagai berikut :
Exception in thread “main” java.lang.ArithmeticException: / by
zero at DivByZero.main(DivByZero.java:3)
Pesan tersebut menginformasikan tipe exception yang terjadi pada baris dimana
exception itu berasal. Inilah aksi default yang terjadi bila terjadi exception yang tidak
tertangani. Jika tidak terdapat kode yang menangani exception yang terjadi, aksi
default akan bekerja otomatis. Aksi tersebut pertama-tama akan menampilkan
deskripsi exception yang terjadi. Kemudian akan ditampilkan stack trace yang
mengindentifikasi method dimana exception terjadi. Pada bagian akhir, aksi default
tersebut akan menghentikan program secara paksa.
Bagaimana jika anda ingin melakukan penanganan atas exception dengan cara yang
berbeda? Untungnya, bahasa pemrograman Java memiliki 3 keywords penting dalam
penanganan exception, yaitu try, catch dan finally.
Pengenalan Pemrograman 2 2
2.3 Menangkap Exception
2.3.1Try – Catch
Seperti yang telah dijelaskan sebelumnya, keyword try, catch dan finally digunakan
dalam menangani bermacam tipe exception. 3 Keyword tersebut digunakan
bersama, namun finally bersifat opsional. Akan lebih baik jika memfokuskan pada 2
keyword pertama, kemudian membahas finally pada bagian akhir.
Berikut ini adalah penulisan try-catch secara umum :
try {
<code to be monitored for exceptions>
} catch (<ExceptionType1> <ObjName>) {
<handler if ExceptionType1 occurs>
}

} catch (<ExceptionTypeN> <ObjName>) {
<handler if ExceptionTypeN occurs>
}
Petunjuk Penulisan Program :
Blok catch dimulai setelah kurung kurawal dari kode try atau catch terkait.
Penulisan kode dalam blok mengikuti identasi
Gunakan contoh kode tersebut pada program DivByZero yang telah dibuat
sebelumnya :
class DivByZero {
public static void main(String args[]) {
try {
System.out.println(3/0);
System.out.println(“Cetak.”);
} catch (ArithmeticException exc) {
//Reaksi atas kejadian
System.out.println(exc);
}
System.out.println(“Setelah Exception.”);
}
}
Kesalahan pembagian dengan bilangan 0 adalah salah satu contoh dari
ArithmethicException. Tipe exception kemudian mengindikasikan klausa catch pada
class ini. Program tersebut menangani kesalahan yang terjadi dengan menampilkan
deskripsi dari permasalahan.
Pengenalan Pemrograman 2 3

Output program saat eksekusi akan terlihat sebagai berikut :
java.lang.ArithmeticException: / by zero
After exception.
Bagian kode yang terdapat pada blok try dapat menyebabkan lebih dari satu tipe
exception. Dalam hal ini, terjadinya bermacam tipe kesalahan dapat ditangani
menggunakan beberapa blok catch. Perlu dicatat bahwa blok try dapat hanya
menyebabkan sebuah exception pada satu waktu, namun dapat pula menampikan
tipe exception yang berbeda di lain waktu.
Berikut adalah contoh kode yang menangani lebih dari satu exception :
class MultipleCatch {
public static void main(String args[]) {
try {
int den = Integer.parseInt(args[0]); //baris 4
System.out.println(3/den); //baris 5
} catch (ArithmeticException exc) {
System.out.println(“Nilai Pembagi 0.”);
} catch (ArrayIndexOutOfBoundsException exc2) {
System.out.println(“Missing argument.”);
}
System.out.println(“After exception.”);
}
}
Pada contoh ini, baris ke-4 akan menghasilkan kesalahan berupa
ArrayIndexOutOfBoundsException bilamana seorang user alpa dalam memasukkan
argument, sedang baris ke-5 akan menghasilkan kesalahan ArithmethicException
jika pengguna memasukkan nilai 0 sebagai sebuah argument.
Pelajari apakah yang akan terjadi terhadap program bila argumen – argumen berikut
dimasukkan oleh user :
a) Tidak ada argument
b) 1
c) 0
Penggunaan try bersarang diperbolehkan dalam pemrograman Java.
class NestedTryDemo {
public static void main(String args[]){
try {
int a = Integer.parseInt(args[0]);
try {
int b = Integer.parseInt(args[1]);
System.out.println(a/b);
} catch (ArithmeticException e) {
System.out.println(“Divide by zero error!”);
}
} catch (ArrayIndexOutOfBoundsException) {
System.out.println(“2 parameters are required!”);
}
}
Pengenalan Pemrograman 2 4

}
Pelajari apa yang akan terjadi pada program jika argument – argument berikut dimasukkan :
a) Tidak ada argumen
b) 15
c) 15 3
d) 15 0
Kode berikut menggunakan try bersarang tergabung dengan penggunaan method.
class NestedTryDemo2 {
static void nestedTry(String args[]) {
try {
int a = Integer.parseInt(args[0]);
int b = Integer.parseInt(args[1]);
System.out.println(a/b);
} catch (ArithmeticException e) {
System.out.println(“Divide by zero error!”);
}
}
public static void main(String args[]){
try {
nestedTry(args);
} catch (ArrayIndexOutOfBoundsException e) {
System.out.println(“2 parameters are required!”);
}
}
}
Bagaimana output program tersebut jika diimplementasikan terhadap argument –
argument berikut :
a) Tidak ada argumen
b) 15
c) 15 3
d) 15 0
2.3.2Keyword Finally
Saatnya anda mengimplementasikan finally dalam blok try-cacth. Berikut ini cara
penggunaan keyword tersebut :
try {
<kode monitor exception>
} catch (<ExceptionType1> <ObjName>) {
<penanganan jika ExceptionType1 terjadi>
} …
} finally {
<kode yang akan dieksekusi saat blok try berakhir>
}

 

Pengenalan Pemrograman 2 5
Petunjuk Penulisan Program :
Sekali lagi, coding convention juga mengatur penggunaan finally seperti halnya
pada blok catch. Penggunaan finally dimulai setelah kurung kurawal penutup blok
catch terkait. Penulisan dalam blok tersebut juga mengalami identasi.
Blok finally mengandung kode penanganan setelah penggunaan try dan catch. Blok
kode ini selalu tereksekusi walaupun sebuah exception terjadi atau tidak pada blok
try. Blok kode tersebut juga akan menghasilkan nilai true meskipun return, continue
ataupun break tereksekusi. Terdapat 4 kemungkinan skenario yang berbeda dalam
blok try-catch-finally. Pertama, pemaksaan keluar program terjadi bila control
program dipaksa untuk melewati blok try menggunakan return, continue ataupun
break. Kedua, sebuah penyelesaian normal terjadi jika try-catch-finally tereksekusi
secara normal tanpa terjadi error apapun. Ketiga, kode program memiliki spesifikasi
tersendiri dalam blok catch terhadap exception yang terjadi. Yang terakhir, kebalikan
skenario ketiga. Dalam hal ini, exception yang terjadi tidak terdefinisikan pada blok
catch manapun. Contoh dari skenario – skenario tersebut terlihat pada kode berikut
ini :
class FinallyDemo {
static void myMethod(int n) throws Exception{
try {
switch(n) {
case 1: System.out.println(“case pertama”);
return;
case 3: System.out.println(“case ketiga”);
throw new RuntimeException(“demo case
ketiga”);
case 4: System.out.println(“case keempat”);
throw new Exception(“demo case
keempat”);
case 2: System.out.println(“case Kedua”);
}
} catch (RuntimeException e) {
System.out.print(“RuntimeException terjadi: “);
System.out.println(e.getMessage());
} finally {
System.out.println(“try-block entered.”);
}
}
public static void main(String args[]){
for (int i=1; i<=4; i++) {
try {
FinallyDemo.myMethod(i);
} catch (Exception e){
System.out.print(“Exception terjadi: “);
System.out.println(e.getMessage());
}
System.out.println();
}
}
}
Pengenalan Pemrograman 2 6
2.4 Melempar Exception
2.4.1Keyword Throw
Disamping menangkap exception, Java juga mengijinkan seorang user untuk
melempar sebuah exception. Sintax pelemparan exception cukup sederhana.
throw <exception object>;
Perhatikan contoh berikut ini.
/* Melempar exception jika terjadi kesalahan input */
class ThrowDemo {
public static void main(String args[]){
String input = “invalid input”;
try {
if (input.equals(“invalid input”)) {
throw new RuntimeException(“throw demo”);
} else {
System.out.println(input);
}
System.out.println(“After throwing”);
} catch (RuntimeException e) {
System.out.println(“Exception caught here.”);
System.out.println(e);
}
}
}
2.4.2Keyword Throws
Jika sebuah method dapat menyebabkan sebuah exception namun tidak
menangkapnya, maka digunakan keyword throws. Aturan ini hanya berlaku pada
checked exception. Anda akan mempelajari lebih lanjut tentang checked exception
dan unchecked exception pada bagian selanjutnya, “Kategori Exception”.
Berikut ini penulisan syntax menggunakan keyword throws :
<type> <methodName> (<parameterList>) throws <exceptionList> {
<methodBody>
}
Sebuah method perlu untuk menangkap ataupun mendaftar seluruh exceptions yang
mungkin terjadi, namun hal itu dapat menghilangkan tipe Error, RuntimeException,
ataupun subclass-nya.
Pengenalan Pemrograman 2 7
Contoh berikut ini menunjukkan bahwa method myMethod tidak menangani
ClassNotFoundException.
class ThrowingClass {
static void myMethod() throws ClassNotFoundException {
throw new ClassNotFoundException (“just a demo”);
}
}
class ThrowsDemo {
public static void main(String args[]) {
try {
ThrowingClass.myMethod();
} catch (ClassNotFoundException e) {
System.out.println(e);
}
}
}
2.5 Kategori Exception
2.5.1Exception Classes dan Hierarchy
Seperti yang disebutkan sebelumnya, root class dari seluruh exception classes
adalah Throwable class. Yang disebutkan dibawah ini adalah exception class
hierarchy. Seluruh exceptions ini terdefinisi pada package java.lang.
Tabel 1.4. Exception Class Hierarchy
Pengenalan Pemrograman 2 8
Sekarang anda sudah cukup familiar dengan beberapa exception classes, saatnya
untuk mengenalkan aturan : catch lebih dari satu harus berurutan dari subclass ke
superclass.
class MultipleCatchError {
public static void main(String args[]){
try {
int a = Integer.parseInt(args [0]);
int b = Integer.parseInt(args [1]);
System.out.println(a/b);
} catch (Exception e) {
System.out.println(e);
} catch (ArrayIndexOutOfBoundsException e2) {
System.out.println(e2);
}
System.out.println(“After try-catch-catch.”);
}
}
Setelah mengkompilasi kode tersebut akan menghasilkan pesan error jika Exception
class adalah superclass dari ArrayIndexOutOfBoundsException class.
MultipleCatchError.java:9: exception
java.lang.ArrayIndexOutOfBoundsException has already been
caught } catch (ArrayIndexOutOfBoundsException e2) {
2.5.2Checked dan Unchecked Exceptions
Exception terdiri atas checked dan unchecked exceptions.
Checked exceptions adalah exception yang diperiksa oleh Java compiler. Compiler
memeriksa keseluruhan program apakah menangkap atau mendaftar exception yang
terjadi dalam sintax throws. Apabila checked exception tidak didaftar ataupun
ditangkap, maka compiler error akan ditampilkan.
Tidak seperti checked exceptions, unchecked exceptions tidak berupa compile-time
checking dalam penanganan exceptions. Fondasi dasar dari unchecked exception
classes adalah Error, RuntimeException dan subclass-nya.
2.5.3User Defined Exceptions
Meskipun beberapa exception classes terdapat pada package java.lang namun tidak
mencukupi untuk menampung seluruh kemungkinan tipe exception yang mungkin
terjadi. Sehingga sangat mungkin bahwa anda perlu untuk membuat tipe exception
tersendiri.
Dalam pembuatan tipe exception anda sendiri, anda hanya perlu untuk membuat
sebuah extended class terhadap RuntimeException class, maupun Exception class
lain. Selanjutnya tergantung pada anda dalam memodifikasi class sesuai
Pengenalan Pemrograman 2 9

permasalahan yang akan diselesaikan. Members dan constructors dapat dimasukkan
pada exception class milik anda.
Berikut ini contohnya :
class HateStringException extends RuntimeException{
/* Tidak perlu memasukkan member ataupun construktor */
}
class TestHateString {
public static void main(String args[]) {
String input = “invalid input”;
try {
if (input.equals(“invalid input”)) {
throw new HateStringException();
}
System.out.println(“String accepted.”);
} catch (HateStringException e) {
System.out.println(“I hate this string: ” + input +
“.”);
}
}
}
2.6 Assertions
2.6.1User Defined Exceptions
Assertions mengijinkan programmer untuk menentukan asumsi yang dihadapi.
Sebagai contoh, sebuah tanggal dengan area bulan tidak berada antara 1 hingga 12
dapat diputuskan bahwa data tersebut tidak valid. Programmer dapat menentukan
bulan harus berada diantara area tersebut. Meskipun hal itu dimungkinkan untuk
menggunakan contructor lain untuk mensimulasikan fungsi dari assertions, namun
sulit untuk dilakukan karena fitur assertion dapat tidak digunakan. Hal yang menarik
dari assertions adalah seorang user memiliki pilihan untuk digunakan atau tidak pada
saat runtime.
Assertion dapat diartikan sebagai extensi atas komentar yang menginformasikan
pembaca kode bahwa sebagian kondisi harus terpenuhi. Dengan menggunakan
assertions, maka tidak perlu untuk membaca keseluruhan kode melalui setiap
komentar untuk mencari asumsi yang dibuat dalam kode. Namun, menjalankan
program tersebut akan memberitahu anda tentang assertion yang dibuat benar atau
salah. Jika assertion tersebut salah, maka AssertionError akan terjadi.
2.6.2Mengaktifkan dan Menonaktifkan Exceptions
Penggunaan assertions tidak perlu melakukan import package java.util.assert.
Menggunakan assertions lebih tepat ditujukan untuk memeriksa parameter dari nonpublic
methods jika public methods dapat diakses oleh class lain. Hal itu mungkin
terjadi bila penulis dari class lain tidak menyadari bahwa mereka dapat
menonaktifkan assertions. Dalam hal ini program tidak dapat bekerja dengan baik.
Pada non-public methods, hal tersebut tergunakan secara langsung oleh kode yang

 

Pengenalan Pemrograman 2 10

ditulis oleh programmer yang memiliki akses terhadap methods tersebut. Sehingga
mereka menyadari bahwa saat menjalankannya, assertion harus dalam keadaan
aktif.
Untuk mengkompilasi file yang menggunakan assertions, sebuah tambahan
parameter perintah diperlukan seperti yang terlihat dibawah ini :
javac –source 1.4 MyProgram.java
Jika anda ingin untuk menjalankan program tanpa menggunakan fitur assertions,
cukup jalankan program secara normal.
java MyProgram
Namun, jika anda ingin mengaktifkan assertions, anda perlu menggunakan
parameter –enableassertions atau –ea.
java –enableassertions MyProgram
2.6.3Sintax Assertions
Penulisan assertions memiliki dua bentuk.
Bentuk yang paling sederhana terlihat sebagai berikut :
assert <expression1>;
dimana <expression1> adalah kondisi dimana assertion bernilai true.
Bentuk yang lain menggunakan dua ekspresi, berikut ini cara penulisannya :
assert <expression1> : <expression2>;
dimana <expression1> adalah kondisi assertion bernilai true dan <expression2> adalah
informasi yang membantu pemeriksaan mengapa program mengalami kesalahan.
class AgeAssert {
public static void main(String args[]) {
int age = Integer.parseInt(args[0]);
assert(age>0);
/* jika masukan umur benar (misal, age>0) */
if (age >= 18) {
System.out.println(“Congrats! You’re an adult! =)”);
}
}
}
Pengenalan Pemrograman 2 11

 

2.7 Latihan
2.7.1 Heksadesimal ke Desimal
Tentukan sebuah angka heksadesimal sebagai input. Konversi angka tersebut
menjadi bilangan decimal. Tentukan exception class anda sendiri dan lakukan
penanganan jika input dari user bukan berupa bilangan heksadesimal.
2.7.2 Menampilkan Sebuah Berlian
Tentukan nilai integer positif sebagai input. Tampilkan sebuah berlian
menggunaakan karakter asterisk (*) sesuai angka yang diinput oleh user. Jika user
memasukkan bilangan integer negatif, gunakan assertions untuk menanganinya.
Sebagai contoh, jika user memasukkan integer bernilai 3, program anda harus
menampilkan sebuah berlian sesuai bentuk berikut :
*
***
*****
***
*
Pengenalan Pemrograman 2 12

Bab 1
Review Konsep Dasar dalam Java
1.1 Tujuan
Sebelum melangkah pada fitur-fitur menarik yang ada pada Java, mari kita meninjau beberapa
hal yang telah Anda pelajari pada pelajaran pemograman pertama Anda. Pelajaran ini menyajikan
diskusi tentang perbedaan konsep-konsep berorientasi object dalam Java.
Sebelum melengkapi pelajaran ini, Anda sebaiknya mampu untuk:
1. Mengetahui dan menggunakan konsep dasar beorientasi object.
· class
· object
· atribut
· method
· konstruktor
2. Mengetahui dengan jelas tentang konsep lanjutan berorientasi object dan menggunakannya
dengan baik
· package
· enkapsulasi
· abstraksi
· pewarisan
· polimorfisme
· interface
3. Mengetahui dengan jelas penggunaan kata kunci this, super, final dan static
4. Membedakan antara method overloading dan method overridding
1.2 Konsep Berorientasi object
1.2.1 Desain Berorientasi object
Desain berorientasi object adalah sebuah teknik yang memfokuskan desain pada object dan class
berdasarkan pada skenario dunia nyata. Hal ini menegaskan keadaan(state), behaviour dan
interaksi dari object. Selain itu juga menyediakan manfaat akan kebebasan pengembangan,
meningkatkan kualitas, mempermudah pemeliharaan, mempertinggi kemampuan dalam
modifikasi dan meningkatkan penggunaan kembali software.
Pengenalan Pemrograman 2 1
1.2.2 Class
Class mengizinkan Anda dalam mendeklarasikan tipe data baru. Ia dijalankan sebagai blueprint,
dimana model dari object yang Anda buat berdasarkan pada tipe data baru ini.
1.2.3 Object
Sebuah object adalah sebuah entiti yang memiliki keadaan, behaviour dan identitas yang yang
tugasnya dirumuskan dalam suatu lingkup masalah dengan baik. Inilah instance sebenarnya dari
sebuah class. Ini juga dikenal sebagai instance. Instance dibuat sewaktu Anda meng-instantiate
class menggunakan kata kunci new. Dalam sistem registrasi siswa, contoh dari sebuah object
yaitu entiti Student.
1.2.4 Atribut
Atribut menunjuk pada elemen data dari sebuah object. Atribut menyimpan informasi tentang
object. Dikenal juga sebagai member data, variabel instance, properti atau sebuah field data.
Kembali lagi ke contoh sistem registrasi siswa, atribut dari sebuah siswa adalah nomor siswa.
1.2.5 Method
Sebuah method menjelaskan behaviour dari sebuah object. Method juga dikenal sebagai fungsi
atau prosedur. Sebagai contoh, method yang mungkin tersedia untuk entiti siswa adalah method
register.
1.2.6 Konstruktor
Konstruktor adalah sebuah tipe khusus dari method yang digunakan untuk membuat dan
menginisialisasi sebuah object baru. Ingat bahwa konstruktor bukan member(yaitu atribut,
method atau inner class dari sebuah object).
1.2.7 Package
Package menunjuk pada pengelompokkan class dan/atau subpackages. Strukturnya dapat
disamakan dengan direktorinya.
1.2.8 Enkapsulasi
Enkapsulasi menunjuk pada prinsip dari menyembunyikan desain atau mengimplementasikan
informasi yang tidak sesuai pada object yang ada.
1.2.9 Abstraksi
Sementara enkapsulasi menyembunyikan detail, abstraksi mengabaikan aspek dari subyek yang
tidak sesuai dengan tujuan yang ada supaya lebih banyak mengkonsentrasikan yang ada.
1.2.10 Pewarisan
Pewarisan adalah hubungan antara class dimana dalam satu class ada superclass atau class induk
dari class yang lain. Pewarisan menunjuk pada properti dan behaviour yang diterima dari nenek
Pengenalan Pemrograman 2 2
moyang dari class. Ini dikenal juga sebagai hubungan “is-a”. Perhatikan pada hirarki berikut.
Gambar 1.1: Contoh Pewarisan
SuperHero adalah superclass dari class FlyingSuperHero dan UnderwaterSuperHero. Catatan
bahwa FlyingSuperHero “is-a” SuperHero. Sebagaimana juga UnderwaterSuperHero “is-a”
SuperHero
1.2.11 Polimorfisme
Polimorfisme adalah kemampuan dari sebuah object untuk membolehkan mengambil beberapa
bentuk yang berbeda. Secara harfiah, “poli” berarti banyak sementara “morph” berarti bentuk.
Menunjuk pada contoh sebelumnya pada pewarisan, kita lihat bahwa object SuperHero dapat juga
menjadi object FlyingSuperHero atau object UnderwaterSuperHero.
1.2.12 Interface
Sebuah interface adalah sebuah contract dalam bentuk kumpulan method dan deklarasi
konstanta. Ketika sebuah class implements sebuah interface, ini mengimplementasikan semua
method yang dideklarasikan dalam interface.
1.3 Struktur Program Java
Pada bagian ini meringkaskan syntax dasar yang digunakan dalam pembuatan aplikasi Java.
1.3.1 Mendeklarasikan class Java
<classDeclaration> ::=
<modifier> class <name> {
<attributeDeclaration>*
<constructorDeclaration>*
<methodDeclaration>*
}
dimana <modifier> adalah sebuah access modifier, yang mana boleh dikombinasikan dengan tipe
yang laen dari modifier.
Pengenalan Pemrograman 2 3
SuperHero
FlyingSuperHero UnderwaterSuperHero
Petunjuk Penulisan Program:
* = berarti bahwa boleh ada 0 atau lebih kejadian dari deret tersebut yang menggunakannya
juga.
<description> = menunjukkan bahwa Anda harus mengganti nilai sebenarnya untuk bagian ini
daripada menguranginya penulisannya.
Ingat bahwa untuk class teratas, acces modifier yang valid hanyalah public dan package(yakni
jika tidak ada acces modifier mengawali kata kunci class).
Contoh berikut ini mendeklarasikan blueprint SuperHero.
Class SuperHero {
String superPowers[];
void setSuperPowers(String superPowers[]) {
this.superPowers = superPowers;
}
void printSuperPowers() {
for (int i = 0; i < superPowers.length; i++) {
System.out.println(superPowers[i]);
}
}
}
1.3.2 Mendeklarasikan Atribut
<attributeDeclaration> ::=
<modifier> <type> <name> [= <default_value>];
<type> ::=
byte | short | int | long | char | float | double | boolean
| <class>
Petunjuk Penulisan Program:
[] = Menunjukkan bahwa bagian ini hanya pilihan.
Inilah contohnya.
public class AttributeDemo {
private String studNum;
public boolean graduating = false;
protected float unitsTaken = 0.0f;
String college;
}
1.3.3 Mendeklarasikan Method
<methodDeclaration> ::=
<modifier> <returnType> <name>(<parameter>*) {
<statement>*
}
<parameter> ::=
<parameter_type> <parameter_name>[,]
Pengenalan Pemrograman 2 4
Sebagai contoh:
class MethodDemo {
int data;
int getData() {
return data;
}
void setData(int data) {
this.data = data;
}
void setMaxData(int data1, int data2) {
data = (data1>data2)? data1 : data2;
}
}
1.3.4 Mendeklarasikan sebuah Konstruktor
<constructorDeclaration> ::=
<modifier> <className> (<parameter>*) {
<statement>*
}
Jika tidak ada konstruktor yang disediakan secara jelas, konstruktor default secara otomatis
membuatkannya untuk Anda. Konstruktor default tidak membawa argumen dan tidak berisi
pernyataan pada tubuh class.
Petunjuk Penulisan Program:
Nama konstruktor harus sama dengan nama class.
<modifier> yang valid untuk konstruktor adalah public, protected, dan private.
Konstruktor tidak memiliki nilai return.
Perhatikan contoh berikut.
class ConstructorDemo {
private int data;
public ConstructorDemo() {
data = 100;
}
ConstructorDemo(int data) {
this.data = data;
}
}
1.3.5 Meng-instansiasi sebuah class
Untuk meng-instantiate sebuah class, dengan sederhana kita gunakan kata kunci new diikuti
dengan pemanggilan sebuah konstruktor. Mari lihat langsung ke contohnya.
class ConstructObj {
int data;
ConstructObj() {
/* menginisialisasi data */
Pengenalan Pemrograman 2 5
}
public static void main(String args[]) {
ConstructObj obj = new ConstructObj(); //di-instantiate
}
}
1.3.6 Mengakses Anggota object
Untuk mengakses anggota dari sebuah object, kita gunakan notasi “dot”. Penggunaanya seperti
berikut:
<object>.<member>
Contoh selanjutnya berdasar pada sebelumnya dengan pernyataan tambahan untuk mengakses
anggota dan method tambahan.
class ConstructObj {
int data;
ConstructObj() {
/* inisialisasi data */
}
void setData(int data) {
this.data = data;
}
public static void main(String args[]) {
ConstructObj obj = new ConstructObj(); //instantiation
obj.setData = 10; //access setData()
System.out.println(obj.data); //access data
}
}
1.3.7 Package
Untuk menunjukkan bahwa file asal termasuk package khusus, kita gunakan syntax berikut:
<packageDeclaration> ::=
package <packageName>;
Untuk mengimpor package lain, kita gunakan syntax berikut:
<importDeclaration> ::=
import <packageName.elementAccessed>;
Dengan ini, source code Anda harus memiliki format berikut:
[<packageDeclaration>]
<importDeclaration>*
<classDeclaration>+
Pengenalan Pemrograman 2 6
Petunjuk Penulisan Program:
+ menunjukkan bahwa boleh ada 1 atau lebih kejadian pada baris ini dalam pengaplikasiannya.
Sebagai contoh.
package registration.reports;
import registration.processing.*;
import java.util.List;
import java.lang.*; //imported by default
class MyClass {
/* rincian dari MyClass */
1.3.8 Acces Modifier
Table berikut meringkas acces modifier dalam Java.
private default/package protected public
class yang sama Yes Yes Yes Yes
package yang sama Yes Yes Yes
package yang
berbeda (subclass)
Yes Yes
package yang
berbeda (nonsubclass)
Yes
Tabel 1.2: Acces Modifier
1.3.9 Enkapsulasi
Menyembunyikan elemen dari penggunaan sebuah class dapat dilakukan dengan pembuatan
anggota yang ingin Anda sembunyikan secara private.
Contoh berikut menyembunyikan field secret. Catatan bahwa field ini tidak langsung diakses oleh
program lain menggunakan method getter dan setter.
class Encapsulation {
private int secret; //field tersembunyi
public boolean setSecret(int secret) {
if (secret < 1 || secret > 100) {
return false;
}
this.secret = secret;
return true;
}
public getSecret() {
return secret;
}
}
Pengenalan Pemrograman 2 7
1.3.10 Pewarisan
Untuk membuat class anak atau subclass berdasarkan class yang telah ada, kita gunakan kata
kunci extend dalam mendeklarasikan class. Sebuah class hanya dapat meng-extend satu class
induk.
Sebagai contoh, class Point di bawah ini adalah superclass dari class ColoredPoint.
import java.awt.*;
class Point {
int x;
int y;
}
class ColoredPoint extends Point {
Color color;
}
1.3.11 Method Overriding
Method subclass override terhadap method superclass ketika subclass mendeklarasikan method
yang signaturenya serupa ke method dalam superclass. Signature dari method hanyalah informasi
yang ditemukan dalam definisi method bagian atas. Signature mengikutkan tipe return, nama dan
daftar parameter method tetapi itu tidak termasuk acces modifier dan tipe yang lain dari kata
kunci seperti final dan static.
Inilah perbedaan dari method overloading. Method overloading secara singkat didiskusikan dalam
sub bagian pada kata kunci this.
class Superclass {
void display(int n) {
System.out.println(“super: ” + n);
}
}
class Subclass extends Superclass {
void display(int k) { //method overriding
System.out.println(“sub: ” + k);
}
}
class OverrideDemo {
public static void main(String args[]) {
Subclass SubObj = new Subclass();
Superclass SuperObj = SubObj;
SubObj.display(3);
((Superclass)SubObj).display(4);
}
}
Ini akan menghasilkan keluaran sebagai berikut.
sub: 3
sub: 4
Pemanggilan method ditentukan oleh tipe data sebenarnya dari object yang diminta method.
Pengenalan Pemrograman 2 8
Acces modifier untuk method yang dibutuhkan tidak harus sama. Bagaimanapun, acces modifier
dari method overridding mengharuskan salah satunya punya acces modifier yang sama seperti itu
dari method overridden atau acces modifier yang kurang dibatasi.
Perhatikan contoh selanjutnya. Periksa yang mana dari method overridding berikut akan
menyebabkan waktu meng-compile akan menyebabkan error.
class Superclass {
void overriddenMethod() {
}
}
class Subclass1 extends Superclass {
public void overriddenMethod() {
}
}
class Subclass2 extends Superclass {
void overriddenMethod() {
}
}
class Subclass3 extends Superclass {
protected void overriddenMethod() {
}
}
class Subclass4 extends Superclass {
private void overriddenMethod() {
}
}
1.3.12 Class Abstract dan Method
Bentuk umum dari sebuah method abstract adalah sebagai berikut:
abstract <modifier> <returnType> <name>(<parameter>*);
Sebuah class yang berisi method abstract harus dideklarasikan sebagai sebuah class abstract.
abstract <modifier> <returnType> <name>(<parameter>*);abstract class
<name> {
/* constructors, fields and methods */
}
Kata kunci tidak dapat digunakan pada konstruktor atau method static. Ini juga penting untuk
diingat bahwa class abstract tidak dapat di-instantiate.
Class yang meng-extends sebuah class abstract harus mengimplementasikan semua method
abstract. Jika tidak subclass sendiri dapat dideklarasikan sebagai abstract.
Petunjuk Penulisan Program:
catatan bahwa mendeklarasikan sebuah method abstract hampir mirip dalam mendeklarasikan
class normal kecuali itu suatu method abstract yang tidak memiliki tubuh dan kepala sehingga
dengan segera diakhiri dengan semicolon(;).
Pengenalan Pemrograman 2 9
Sebagai contoh:
abstract class SuperHero {
String superPowers[];
void setSuperPowers(String superPowers[]) {
this.superPowers = superPowers;
}
void printSuperPowers() {
for (int i = 0; i < superPowers.length; i++) {
System.out.println(superPowers[i]);
}
}
abstract void displayPower();
}
class UnderwaterSuperHero extends SuperHero {
void displayPower() {
System.out.println(“Communicate with sea creatures…”);
System.out.println(“Fast swimming ability…”);
}
}
class FlyingSuperHero extends SuperHero {
void displayPower() {
System.out.println(“Fly…”);
}
}
1.3.13 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.
Pengenalan Pemrograman 2 10
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();
}
}
1.3.14 Kata kunci this
Kata kunci this dapat digunakan untuk beberapa alasan berikut:
1. Adanya ambigu pada atribut lokal dari variabel lokal
2. Menunjuk pada object yang meminta method non-static
3. Menunjuk pada konstruktor lain.
Sebagai contoh pada maksud pertama, perhatikan kode berikut dimana variabel data disediakan
sebagai sebuah atribut dan parameter lokal pada saat yang sama.
class ThisDemo1 {
int data;
void method(int data) {
this.data = data;
/* this.data menunjuk ke atribut
sementara data menunjuk ke variabel lokal */
}
}
Pengenalan Pemrograman 2 11
Contoh berikut menunjukkan bagaimana object this secara mutlak menunjuk ketika anggota nonstatic
dipanggil.
class ThisDemo2 {
int data;
void method() {
System.out.println(data); //this.data
}
void method2() {
method(); //this.method();
}
Sebelum melihat ke contoh yang lain, mari pertama meninjau pengertian method overloading.
Konstruktor seperti juga method dapat juga menjadi overload. Method yang berbeda dalam class
dapat memberi nama yang sama asalkan list parameter juga berbeda. Method overloaded harus
berbeda dalam nomor dan/atau tipe dari parameternya. Contoh selanjutnya memiliki konstruktor
overloaded dan referensi this yang dapat digunakan untuk menunjuk versi lain dari konstruktor.
class ThisDemo3 {
int data;
ThisDemo3() {
this(100);
}
ThisDemo3(int data) {
this.data = data;
}
}
Petunjuk Penulisan Program:
Memanggil this() harus ada pernyataan pertama dalam konstruktor.
1.3.15 Kata kunci super
Penggunaan kata kunci super berhubungan dengan pewarisan. Super digunakan untuk meminta
konstruktor superclass. Super juga dapat digunakan seperti kata kunci this untuk menunjuk pada
anggota dari superclass.
Program berikut mendemonstrasikan bagaimana referensi super digunakan untuk memanggil
konstruktor superclass.
class Person {
String firstName;
String lastName;
Person(String fname, String lname) {
firstName = fname;
lastName = lname;
}
}
class Student extends Person {
String studNum;
Student(String fname, String lname, String sNum) {
Pengenalan Pemrograman 2 12
super(fname, lname);
studNum = sNum;
}
}
Petunjuk Penulisan Program:
super() menunjuk pada superclass dengan segera. Ini harus berada pada pernyataan pertama
dalam konstruktor superclass.
Kata kunci dapat juga digunakan untuk menunjuk anggota superclass seperti yang ditunjukkan
pada contoh berikut.
class Superclass{
int a;
void display_a(){
System.out.println(“a = ” + a);
}
}
class Subclass extends Superclass {
int a;
void display_a(){
System.out.println(“a = ” + a);
}
void set_super_a(int n){
super.a = n;
}
void display_super_a(){
super.display_a();
}
}
class SuperDemo {
public static void main(String args[]){
Superclass SuperObj = new Superclass();
Subclass SubObj = new Subclass();
SuperObj.a = 1;
SubObj.a = 2;
SubObj.set_super_a(3);
SuperObj.display_a();
SubObj.display_a();
SubObj.display_super_a();
System.out.println(SubObj.a);
}
}
Program tersebut akan menampilkan hasil berikut.
a = 1
a = 2
a = 3
2
Pengenalan Pemrograman 2 13
1.3.16 Kata Kunci static
Kata kunci static dapat digunakan untuk anggota dari sebuah class. Kata kunci ini menyediakan
static atau anggota class untuk diakses sama sebelum beberapa instance dari class dibuat.
Variabel class bersifat seperti variabel umum. Ini artinya bahwa variabel dapat diakses oleh
semua instance dari class.
Method class mungkin dapat diambil tanpa membuat sebuah object dari class tersebut.
Bagaimanapun, mereka hanya dapat mengakses anggota static dari class. Ditambahkan juga,
mereka tidak dapat menunjuk this dan super.
Kata kunci static dapat juga diaplikasikan pada blok. Ini dinamakan dengan blok static. Blok ini
dieksekusi hanya sekali, ketika class diisi. Hal ini biasanya digunakan untuk menginisialisasi
variabel class.
class Demo {
static int a = 0;
static void staticMethod(int i) {
System.out.println(i);
}
static { //blok static
System.out.println(“This is a static block.”);
a += 1;
}
}
class StaticDemo {
public static void main(String args[]) {
System.out.println(Demo.a);
Demo.staticMethod(5);
Demo d = new Demo();
System.out.println(d.a);
d.staticMethod(0);
Demo e = new Demo();
System.out.println(e.a);
d.a += 3;
System.out.println(Demo.a+”, ” +d.a +”, ” +e.a);
}
}
Keluaran dari source kode ditunjukkan di bawah ini.
This is a static block.
15
10
1
4, 4, 4
1.3.17 Kata Kunci final
Kata kunci final dapat diaplikasikan pada variabel, method dan class. Untuk mengingat fungsi dari
kata kunci, ingat bahwa itu secara mudah dibatasi apa yang kita dapat lakukan dengan variabel,
method dan class.
Nilai dari variabel final dapat tidak lama diubah sesudah nilainya telah diatur. Sebagai contoh,
Pengenalan Pemrograman 2 14
final int data = 10;
Pernyataan berikut akan menyebabkan terjadi compilation error:
data++;
Method final tidak dapat di-override dalam class anak.
final void myMethod() { //in a parent class
}
myMethod tidak dapat lama di-override dalam class anak.
class final tidak dapat diwariskan tidak seperti class yang biasanya.
final public class MyClass {
}
Petunjuk Penulisan Program:
Perintah penulisan kata kunci final dan public memungkinkan bertukar tempat.
Pernyataan ini akan menyebabkan kesalahan compilation terjadi karena MyClass dapat tidak lama
di-extended.
public WrongClass extends MyClass {
}
1.3.18 Inner Classes
Sebuah inner class secara mudah dideklarasikan dalam class lain.
class OuterClass {
int data = 5;
class InnerClass {
int data2 = 10;
void method() {
System.out.println(data);
System.out.println(data2);
}
}
public static void main(String args[]) {
OuterClass oc = new OuterClass();
InnerClass ic = oc.new InnerClass();
System.out.println(oc.data);
System.out.println(ic.data2);
ic.method();
}
}
Untuk mampu mengakses anggota dari inner class, kita butuh sebuah instance dari inner class.
Method-method dari inner class dapat secara langsung mengakses anggota dari outer class.
Pengenalan Pemrograman 2 15

1.4 Latihan
1.4.1 Tabel Perkalian
Tulis program yang mempunyai masukkan size dari user dan mencetak tabel perkalian dengan
size yang ditetapkan.
Size untuk tabel perkalian : 5
Tabel perkalian dari size 5:
1 2 3 4 5
1 1
2 2 4
3 3 6 9
4 4 8 12 16
5 5 10 15 20 25
1.4.2 Greatest Common Factor(GCF)
Tulis sebuah program yang mempunyai tiga integer dan menghitung nilai GCF dari tiga angka.
GCF adalah angka terbesar yang secara rata dibagi ke semua angka yang diberikan.
Input 1: 25 Input 1: 1 Input 1: 9
Input 2: 15 Input 2: 2 Input 2: 27
Input 3: 35 Input 3: 3 Input 3: 12
GCF: 5 GCF: 1 GCF: 3
1.4.3 Shape
Buatlah class Shape. class memiliki dua field String: name dan size. class mempunyai method
printShapeInfo, dimana hanya mengeluarkan nilai name dan field size dari object Shape. Juga
memiliki method printShapeName dan printShapeSize, dimana mencetak nama dan size dari
object, berturut-turut.
Menggunakan pewarisan, buat class Square dengan field yang sama dan method seperti itu dari
class Shape. Class ini mempunyai dua tambahan field integer: length dan width. Method
printShapeLength dan printShapeWidth yang mencetak panjang dan lebar object yang juga
termasuk dalam class ini. Anda juga harus meng-override printShapeInfo untuk mencetak
keluaran field tambahan dalam subclass juga.
1.4.4 Binatang
Buatlah interface Animal yang mempunyai tiga method:eat dan move. Semua method ini tidak
punya argumen atau nilai return. Method ini hanya mengeluarkan bagaimana object Animal
makan dan bergerak. Sebagai contoh, seekor kelinci memakan wortel dan bergerak dengan
melompat. Buat class Fish dan Bear yang menggunakan interface Animal. Terserah kepada Anda
bagaimana menggunakan method eat dan move.
Pengenalan Pemrograman 2 16

BAB 12
Dasar Exception Handling
12.1 Tujuan
Dalam bagian ini, kita akan mempelajari teknik yang dipakai dalam Java dalam menangani kondisi
yang tidak biasa dalam menjalankan operasi normal dalam program. Teknik ini dinamakan
exception handling.
Pada akhir pembelajaran, siswa mampu untuk:
· Mendefinisikan exception
· Menangani exception menggunakan blok try-catch-finally
12.2 Apa itu Exception?
Exception adalah sebuah peristiwa yang menjalankan alur proses normal pada program. Peristiwa
ini biasanya berupa kesalahan(error) dari beberapa bentuk. Ini disebabkan program kita berakhir
tidak normal.
Beberapa contoh dari exception yang Anda mungkin jumpai pada latihan-latihan sebelumnya
adalah: exception ArrayIndexOutOfBounds, yang terjadi jika kita mencoba mengakses elemen
array yang tidak ada, atau NumberFormatException, yang terjadi ketika kita mencoba melalui
parameter bukan angka dalam method Integer.parseInt.
12.3 Menangani Exception
Untuk menangani exception dalam Java, kita gunakan blok try-catch-finally. Apa yang kita
lakukan dalam program kita adalah kita menempatkan pernyataan yang mungkin menghasilkan
exception dalam blok ini.
Bentuk umum dari blok try-catch-finally adalah,
try{
//tulis pernyataan yang dapat mengakibatkan exception
//dalam blok ini
}
catch( <exceptionType1> <varName1> ){
//tulis aksi apa dari program Anda yang dijalankan jika ada
//exception tipe tertentu terjadi
}
. . .
Pengenalan Pemrograman 1 1
catch( <exceptionTypen> <varNamen> ){
//tulis aksi apa dari program Anda yang dijalankan jika ada
//exception tipe tertentu terjadi
}
finally{
//tambahkan kode terakhir di sini
}
Exception dilemparkan selama eksekusi dari blok try dapat ditangkap dan ditangani dalam blok
catch. Kode dalam blok finally selalu di-eksekusi.
Berikut ini adalah aspek kunci tentang sintak dari konstruksi try-catch-finally:
· Notasi blok bersifat perintah
· Setiap blok try, terdapat satu atau lebih blok catch, tetapi hanya satu blok finally.
· Blok catch dan blok finally harus selalu muncul dalam konjungsi dengan blok try, dan
diatas urutan
· Blok try harus diikuti oleh paling sedikit satu blok catch ATAU satu blok finally, atau
keduanya.
· Setiap blok catch mendefinisikan sebuah penanganan exception. Header dari blok catch
harus membawa satu argumen, dimana exception pada blok tersebut akan ditangani.
Exception harus menjadi class pelempar atau satu dari subclassesnya.
Pengenalan Pemrograman 1 2
Gambar 1: Alur kejadian blok try-catch-finally

Marilah mengambil contoh kode yang mencetak argumen kedua ketika kita mencoba menjalankan
kode menggunakan argumen command-line. Perkirakan, tidak ada pengecekan dalam kode Anda
untuk angka dari argumen dan kita hanya mengakses argumen kedua args[1] segera, kita akan
mendapatkan exception berikut.
Exception in thread “main”
java.lang.ArrayIndexOutOfBoundsException: 1
at ExceptionExample.main(ExceptionExample.java:5)
Untuk mencegah kejadian ini, kita dapat menempatkan kode ke dalam blok try-catch. Blok finally
hanya sebagai pilihan lain saja. Sebagai contoh, kita tidak akan menggunakan blok finally.
public class ExceptionExample
{
public static void main( String[] args ){
try{
System.out.println( args[1] );
}catch( ArrayIndexOutOfBoundsException exp ){
System.out.println(“Exception caught!”);
}
}
}
Jadi kita akan menjalankan program lagi tanpa argumen, keluarannya akan menjadi,
Exception caught!
Pengenalan Pemrograman 1 3
12.4 Latihan
12.4.1 Menangkap Exception 1
Diberikan kode berikut:
public class TestExceptions{
public static void main( String[] args ){
for( int i=0; true; i++ ){
System.out.println(“args[“+i+”]=”+
args[i]);
}
}
}
Compile dan jalankan program TestExceptions. Keluarannya akan tampak seperti ini:
javac TestExceptions one two three
args[0]=one
args[1]=two
args[2]=three
Exception in thread “main”
java.lang.ArrayIndexOutOfBoundsException: 3
at TestExceptions.main(1.java:4)
Ubah program TestExceptions untuk menangani exception, keluaran program setelah ditangkap
exception-nya akan seperti ini:
javac TestExceptions one two three
args[0]=one
args[1]=two
args[2]=three
Exception caught:
java.lang.ArrayIndexOutOfBoundsException: 3
Quiting…
12.4.2 Menangkap Exception 2
Melakukan percobaan pada beberapa program yang telah Anda tulis adalah hal yang baik sebelum
menghadapi exception. Karena pada program di atas Anda tidak menangkap exception, maka
eksekusi dengan mudahnya berhenti mengeksekusi program Anda. Kembali kepada program
diatas dan gunakan penanganan exception.
Pengenalan Pemrograman 1 4

Pengenalan Pemrograman 1 1
BAB 11
Pewarisan, Polimorfisme, dan Interface
11.1 Tujuan
Dalam bagian ini, kita akan membicarakan bagaimana suatu class dapat mewariskan sifat dari class yang sudah ada. Class ini dinamakan subclass dan induk class dinamakan superclass. Kita juga akan membicarakan sifat khusus dari Java dimana kita dapat secara otomatis memakai method yand tepat untuk setiap object tanpa memperhatikan asal dari subclass object. Sifat ini dinamakan polimorfisme. Pada akhirnya, kita akan mendiskusikan tentang interface yang membantu mengurangi penulisan program.
Pada akhir pembelajaran ini, siswa harus mampu untuk:
• Mendefinisikan superclasses dan subclasses
• Override method dari superclasses
• Membuat method final dan class final
11.2 Pewarisan
Dalam Java, semua class, termasuk class yang membangun Java API, adalah subclasses dari superclass Object. Contoh hirarki class diperlihatkan di bawah ini.
Beberapa class di atas class utama dalam hirarki class dikenal sebagai superclass. Sementara beberapa class di bawah class pokok dalam hirarki class dikenal sebagai subclass dari class tersebut.
Gambar 1: Hirarki class
Pewarisan adalah keuntungan besar dalam pemrograman berbasis object karena suatu sifat atau method didefinisikan dalam superclass, sifat ini secara otomatis diwariskan dari semua subclasses. Jadi, Anda dapat menuliskan kode method hanya sekali dan mereka
Pengenalan Pemrograman 1 2
dapat digunakan oleh semua subclass. Subclass hanya butuh mengimplementasikan perbedaannya sendiri dan induknya.
11.2.1 Mendefinisikan Superclass dan Subclass
Untuk memperoleh suatu class, kita menggunakan kata kunci extend. Untuk mengilustrasikan ini, kita akan membuat contoh class induk. Dimisalkan kita mempunyai class induk yang dinamakan Person.
public class Person
{
protected String name;
protected String address;
/**
* Default constructor
*/
public Person(){
System.out.println(“Inside Person:Constructor”);
name = “”;
address = “”;
}
/**
* Constructor dengan dua parameter
*/
public Person( String name, String address ){
this.name = name;
this.address = address;
}
/**
* Method accessor
*/
public String getName(){
return name;
}
public String getAddress(){
return address;
}
public void setName( String name ){
this.name = name;
}
public void setAddress( String add ){
this.address = add;
}
}
Pengenalan Pemrograman 1 3
Perhatikan bahwa atribut name dan address dideklarasikan sebagai protected. Alasannya kita melakukan ini yaitu, kita inginkan atribut-atribut ini untuk bisa diakses oleh subclasses dari superclassess. Jika kita mendeklarasikan sebagai private, subclasses tidak dapat menggunakannya. Catatan bahwa semua properti dari superclass yang dideklarasikan sebagai public, protected dan default dapat diakses oleh subclasses-nya.
Sekarang, kita ingin membuat class lain bernama Student. Karena Student juga sebagai Person, kita putuskan hanya meng-extend class Person, sehingga kita dapat mewariskan semua properti dan method dari setiap class Person yang ada. Untuk melakukan ini, kita tulis,
public class Student extends Person
{
public Student(){
System.out.println(“Inside Student:Constructor”);
//beberapa kode di sini
}
// beberapa kode di sini
}
Ketika object Student di-instantiate, default constructor dari superclass secara mutlak meminta untuk melakukan inisialisasi yang seharusnya. Setelah itu, pernyataan di dalam subclass dieksekusi. Untuk mengilustrasikannya, perhatikan kode berikut,
public static void main( String[] args ){
Student anna = new Student();
}
Dalam kode ini, kita membuat sebuah object dari class Student. Keluaran dari program adalah,
Inside Person:Constructor
Inside Student:Constructor
Gambar 2: Alur Program
Pengenalan Pemrograman 1 4
Alur program ditunjukkan sebagai berikut.
11.2.2 Kata Kunci Super
Subclass juga dapat memanggil constructor secara explicit dari superclass terdekat. Hal ini dilakukan dengan pemanggil construktor super. Pemanggil constructor super dalam constructor dari subclass akan menghasilkan eksekusi dari superclass constructor yang bersangkutan, berdasar dari argumen sebelumnya.
Sebagai contoh, pada contoh class sebelumnya. Person dan Student, kita tunjukkan contoh dari pemanggil constructor super. Diberikan kode berikut untuk Student,
public Student(){
super( “SomeName”, “SomeAddress” );
System.out.println(“Inside Student:Constructor”);
}
Kode ini memanggil constructor kedua dari superclass terdekat(yaitu adalah Person) dan mengeksekusinya. Contoh kode lain ditunjukkan sebagai berikut,
public Student(){
super();
System.out.println(“Inside Student:Constructor”);
}
Pengenalan Pemrograman 1 5
Kode ini memanggil default constructor dari superclass terdekat(yaitu Person) dan mengeksekusinya.
Ada beberapa hal yang harus diingat ketika menggunakan pemanggil konstuktor super:
1. Pemanggil super() HARUS DIJADIKAN PERNYATAAN PERTAMA DALAM constructor.
2. Pemanggil super() hanya dapat digunakan dalam definisi constructor.
3. Termasuk constructor this() dan pemanggil super() TIDAK BOLEH TERJADI DALAM constructor YANG SAMA.
Pemakaian lain dari super adalah untuk menunjuk anggota dari superclass(seperti referensi this). Sebagai contoh,
public Student()
{
super.name = “somename”;
super.address = “some address”;
}
11.2.3 Overriding Method
Untuk beberapa pertimbangan, kadang-kadang class asal perlu mempunyai implementasi berbeda dari method yang khusus dari superclass tersebut. Oleh karena itulah, method overriding digunakan. Subclass dapat mengesampingkan method yang didefinisikan dalam superclass dengan menyediakan implementasi baru dari method tersebut.
Misalnya kita mempunyai implementasi berikut untuk method getName dalam superclass Person,
public class Person
{
:
:
public String getName(){
System.out.println(“Parent: getName”);
return name;
}
:
}
Untuk override, method getName dalam subclass Student, kita tulis,
public class Student extends Person
{
:
:
public String getName(){
System.out.println(“Student: getName”);
return name;
}
Pengenalan Pemrograman 1 6
:
}
Jadi, ketika kita meminta method getName dari object class Student, method overridde akan dipanggil, keluarannya akan menjadi,
Student: getName
11.2.4 Method final dan class final
Dalam Java, juga memungkinkan untuk mendeklarasikan class-class yang tidak lama menjadi subclass. Class ini dinamakan class final. Untuk mendeklarasikan class untuk menjadi final kita hanya menambahkan kata kunci final dalam deklarasi class. Untuk contohnya, jika kita ingin class Person untuk dideklarasikan final, kita tulis,
public final class Person
{
//area kode
}
Beberapa class dalam Java API dideklarasikan secara final untuk memastikan sifatnya tidak dapat di-override. Contoh-contoh dari class ini adalah Integer, Double, dan String.
Ini memungkinkan dalam Java membuat method yang tidak dapat di-override. Method ini dapat kita panggil method final. Untuk mendeklarasikan method untuk menjadi final, kita tambahkan kata kunci final ke dalam deklarasi method. Contohnya, jika kita ingin method getName dalam class Person untuk dideklarasikan final, kita tulis,
public final String getName(){
return name;
}
Method static juga secara otomatis final. Ini artinya Anda tidak dapat membuatnya override.
Pengenalan Pemrograman 1 7
11.3 Polimorfisme
Sekarang, class induk Person dan subclass Student dari contoh sebelumnya, kita tambahkan subclass lain dari Person yaitu Employee. Di bawah ini adalah hierarkinya, PersonStudentEmployee
Dalam Java, kita dapat membuat referensi yang merupakan tipe dari superclass ke sebuah object dari subclass tersebut. Sebagai contohnya,
public static main( String[] args )
{
Person ref;
Student studentObject = new Student();
Employee employeeObject = new Employee();
ref = studentObject; //Person menunjuk kepada
// object Student
//beberapa kode di sini
}
Sekarang dimisalkan kita punya method getName dalam superclass Person kita, dan kita override method ini dalam kedua subclasses Student dan Employee,
public class Person
{
public String getName(){
System.out.println(“Person Name:” + name);
return name; }
}
public class Student extends Person
{
public String getName(){
System.out.println(“Student Name:” + name);
return name; }
}
Gambar 3: Hirarki dari class induk Person
Pengenalan Pemrograman 1 8
public class Employee extends Person
{
public String getName(){
System.out.println(“Employee Name:” + name);
return name;
}
Kembali ke method utama kita, ketika kita mencoba memanggil method getName dari referensi Person ref, method getName dari object Student akan dipanggil. Sekarang, jika kita berikan ref ke object Employee, method getName dari Employee akan dipanggil.
public static main( String[] args )
{
Person ref;
Student studentObject = new Student();
Employee employeeObject = new Employee();
ref = studentObject; //Person menunjuk kepada
// object Student
String temp = ref.getName(); //getName dari Student
//class dipanggil
System.out.println( temp );
ref = employeeObject; //Person menunjuk kepada
// object Employee
String temp = ref.getName(); //getName dari Employee
//class dipanggil
System.out.println( temp );
}
Kemampuan dari referensi untuk mengubah sifat menurut object apa yang dijadikan acuan dinamakan polimorfisme. Polimorfisme menyediakan multiobject dari subclasses yang berbeda untuk diperlakukan sebagai object dari superclass tunggal, secara otomatis menunjuk method yang tepat untuk menggunakannya ke particular object berdasar subclass yang termasuk di dalamnya.
Contoh lain yang menunjukkan properti polimorfisme adalah ketika kita mencoba melalui referensi ke method. Misalkan kita punya method statis printInformation yang mengakibatkan object Person sebagai referensi, kita dapat me-referensi dari tipe Employee dan tipe Student ke method ini selama itu masih subclass dari class Person.
public static main( String[] args )
{
Student studentObject = new Student();
Employee employeeObject = new Employee();
printInformation( studentObject );
printInformation( employeeObject );
}
Pengenalan Pemrograman 1 9
public static printInformation( Person p ){
. . . .
}
11.4 Abstract Class
Misalnya kita ingin membuat superclass yang mempunyai method tertentu yang berisi implementasi, dan juga beberapa method yang akan di-overridden oleh subclasses nya.
Sebagai contoh, kita akan membuat superclass bernama LivingThing. class ini mempunyai method tertentu seperti breath, eat, sleep, dan walk. Akan tetapi, ada beberapa method di dalam superclass yang sifatnya tidak dapat digeneralisasi. Kita ambil contoh, method walk. Tidak semua kehidupan berjalan(walk) dalam cara yang sama. Ambil manusia sebagai misal, kita manusia berjalan dengan dua kaki, dimana kehidupan lainnya seperti anjing berjalan dengan empat kaki. Akan tetapi, beberapa ciri umum dalam kehidupan sudah biasa, itulah kenapa kita inginkan membuat superclass umum dalam hal ini.
Kita dapat membuat superclass yang mempunyai beberapa method dengan implementasi sedangkan yang lain tidak. Class jenis ini yang disebut dengan class abstract.
Sebuah class abstract adalah class yang tidak dapat di-instantiate. Seringkali muncul di atas hirarki class pemrograman berbasis object, dan mendefinisikan keseluruhan aksi yang mungkin pada object dari seluruh subclasses dalam class.
Method ini dalam class abstract yang tidak mempunyai implementasi dinamakan method abstract. Untuk membuat method abstract, tinggal menulis deklarasi method tanpa tubuh class dan digunakan menggunakan kata kunci abstract. Contohnya,
public abstract void someMethod();
Gambar 4: class abstract

 

Pengenalan Pemrograman 1 10
Sekarang mari membuat contoh class abstract.
public abstract class LivingThing
{
public void breath(){
System.out.println(“Living Thing breathing…”);
}
public void eat(){
System.out.println(“Living Thing eating…”);
}
/**
* abstract method walk
* Kita ingin method ini di-overridden oleh subclasses
*/
public abstract void walk();
}
Ketika class meng-extend class abstract LivingThing, dibutuhkan untuk override method abstract walk(), atau lainnya, juga subclass akan menjadi class abstract, oleh karena itu tidak dapat di-instantiate. Contohnya,
public class Human extends LivingThing
{
System.out.println(“Human walks…”);
public void walk(){
}
}
Jika class Human tidak dapat overridde method walk, kita akan menemui pesan error berikut ini,
Human.java:1: Human is not abstract and does not override abstract method walk() in LivingThing
public class Human extends LivingThing
^
1 error
Petunjuk penulisan program:
Gunakan class abstract untuk mendefinisikan secara luas sifat-sifat dari class tertinggi pada hirarki pemrograman berbasis object, dan gunakan subclassesnya untuk menyediakan rincian dari class abstract.
Pengenalan Pemrograman 1 11
11.5 Interface
Interface adalah jenis khusus dari blok yang hanya berisi method signature(atau constant ). Interface mendefinisikan sebuah(signature) dari sebuah kumpulan method tanpa tubuh.
Interface mendefinisikan sebuah cara standar dan umum dalam menetapkan sifat-sifat dari class-class. Mereka menyediakan class-class, tanpa memperhatikan lokasinya dalam hirarki class, untuk mengimplementasikan sifat-sifat yang umum. Dengan catatan bahwa interface-interface juga menunjukkan polimorfisme, dikarenakan program dapat memanggil method interface dan versi yang tepat dari method yang akan dieksekusi tergantung dari tipe object yang melewati pemanggil method interface.
11.5.1 Kenapa Kita Memakai Interface?
Kita akan menggunakan interface jika kita ingin class yang tidak berhubungan mengimplementasikan method yang sama. Melalui interface-interface, kita dapat menangkap kemiripan diantara class yang tidak berhubungan tanpa membuatnya seolah-olah class yang berhubungan.
Mari kita ambil contoh class Line dimana berisi method yang menghitung panjang dari garis dan membandingkan object Line ke object dari class yang sama. Sekarang, misalkan kita punya class yang lain yaitu MyInteger dimana berisi method yang membandingkan object MyInteger ke object dari class yang sama. Seperti yang kita lihat disini, kedua class-class mempunyai method yang mirip dimana membandingkan mereka dari object lain dalam tipe yang sama, tetapi mereka tidak berhubungan sama sekali. Supaya dapat menjalankan cara untuk memastikan bahwa dua class-class ini mengimplementasikan beberapa method dengan tanda yang sama, kita dapat menggunakan sebuah interface untuk hal ini. Kita dapat membuat sebuah class interface, katakanlah interface Relation dimana mempunyai deklarasi method pembanding. Relasi interface dapat dideklarasikan sebagai,
public interface Relation
{
public boolean isGreater( Object a, Object b);
public boolean isLess( Object a, Object b);
public boolean isEqual( Object a, Object b);
}
Alasan lain dalam menggunakan interface pemrograman object adalah untuk menyatakan sebuah interface pemrograman object tanpa menyatakan classnya. Seperti yang dapat kita lihat nanti dalam bagian Interface vs class, kita dapat benar-benar menggunakan interface sebagai tipe data.
Pada akhirnya, kita perlu menggunakan interface untuk pewarisan model jamak dimana menyediakan class untuk mempunyai lebih dari satu superclass. Pewarisan jamak tidak ditunjukkan di Java, tetapi ditunjukkan di bahasa berorientasi object lain seperti C++.
Pengenalan Pemrograman 1 12
11.5.2 Interface vs. Class Abstract
Berikut ini adalah perbedaan utama antara sebuah interface dan sebuah class abstract: method interface tidak punya tubuh, sebuah interface hanya dapat mendefinisikan konstanta dan interface tidak langsung mewariskan hubungan dengan class istimewa lainnya, mereka didefinisikan secara independent.
11.5.3 Interface vs. Class
Satu ciri umum dari sebuah interface dan class adalah pada tipe mereka berdua. Ini artinya bahwa sebuah interface dapat digunakan dalam tempat-tempat dimana sebuah class dapat digunakan. Sebagai contoh, diberikan class Person dan interface PersonInterface, berikut deklarasi yang benar:
PersonInterface pi = new Person();
Person pc = new Person();
Bagaimanapun, Anda tidak dapat membuat instance dari sebuah interface.
Contohnya:
PersonInterface pi = new PersonInterface(); //COMPILE
//ERROR!!!
Ciri umum lain adalah baik interface maupun class dapat mendefinisikan method. Bagaimanapun, sebuah interface tidak punya sebuah kode implementasi sedangkan class memiliki salah satunya.
11.5.4 Membuat Interface
Untuk membuat interface, kita tulis,
public interface [InterfaceName]
{
//beberapa method tanpa isi
}
Sebagai contoh, mari kita membuat sebuah interface yang mendefinisikan hubungan antara dua object menurut urutan asli dari object.
public interface Relation
{
public boolean isGreater( Object a, Object b);
public boolean isLess( Object a, Object b);
public boolean isEqual( Object a, Object b);
}
Pengenalan Pemrograman 1 13
Sekarang, penggunaan interface, kita gunakan kata kunci implements. Contohnya,
/**
* Class ini mendefinisikan segmen garis
*/
public class Line implements Relation
{
private double x1;
private double x2;
private double y1;
private double y2;
public Line(double x1, double x2, double y1, double y2){
this.x1 = x1;
this.x2 = x2;
this.y1 = y1;
this.y2 = y2;
}
public double getLength(){
double length = Math.sqrt((x2-x1)*(x2-x1) +
(y2-y1)* (y2-y1));
return length;
}
public boolean isGreater( Object a, Object b){
double aLen = ((Line)a).getLength();
double bLen = ((Line)b).getLength();
return (aLen > bLen);
}
public boolean isLess( Object a, Object b){
double aLen = ((Line)a).getLength();
double bLen = ((Line)b).getLength();
return (aLen < bLen);
}
public boolean isEqual( Object a, Object b){
double aLen = ((Line)a).getLength();
double bLen = ((Line)b).getLength();
return (aLen == bLen);
}
}
Pengenalan Pemrograman 1 14
Ketika class Anda mencoba mengimplementasikan sebuah interface, selalu pastikan bahwa Anda mengimplementasikan semua method dari interface, jika tidak, Anda akan menemukan kesalahan ini,
Line.java:4: Line is not abstract and does not override abstract method isGreater(java.lang.Object,java.lang.Object) in Relation
public class Line implements Relation
^
1 error
11.5.5 Hubungan dari Interface ke Class
Seperti yang telah kita lihat dalam bagian sebelumnya, class dapat mengimplementasikan sebuah interface selama kode implementasi untuk semua method yang didefinisikan dalam interface tersedia.
Hal lain yang perlu dicatat tentang hubungan antara interface ke class-class yaitu, class hanya dapat mengEXTEND SATU superclass, tetapi dapat mengIMPLEMENTASIkan BANYAK interface. Sebuah contoh dari sebuah class yang mengimplementasikan interface adalah,
public class Person implements PersonInterface,
LivingThing,
WhateverInterface {
//beberapa kode di sini
}
Contoh lain dari class yang meng-extend satu superclass dan mengimplementasikan sebuah interface adalah,
public class ComputerScienceStudent extends Student
implements PersonInterface,
LivingThing {
//beberapa kode di sini
}
Catatan bahwa sebuah interface bukan bagian dari hirarki pewarisan class. Class yang tidak berhubungan dapat mengimplementasikan interface yang sama.
Petunjuk penulisan program:
Gunakan interface untuk mendefinisikan method standar yang sama dalam class-class berbeda yang memungkinkan. Sekali Anda telah membuat kumpulan definisi method standar, Anda dapat menulis method tunggal untuk memanipulasi semua class-class yang mengimplementasikan interface.
Pengenalan Pemrograman 1 15
11.5.6 Pewarisan Antar Interface
Interface bukan bagian dari hirarki class. Bagaimanapun, interface dapat mempunyai hubungan pewarisan antara mereka sendiri. Contohnya, misal kita punya dua interface StudentInterface dan PersonInterface. Jika StudentInterface meng-extend PersonInterface, maka ia akan mewariskan semua deklarasi method dalam PersonInterface.
public interface PersonInterface {
. . .
}
public interface StudentInterface extends PersonInterface {
. . .
}

 
Pengenalan Pemrograman 1 16
11.6 Latihan
11.6.1 Extend StudentRecord
Dalam latihan ini, kita ingin untuk membuat catatan siswa yang lebih khusus yang berisi informasi tambahan tentang pengetahuan komputer siswa. Tugasnya adalah meng-extend class StudentRecord yang mengimplementasikan pelajaran sebelumnya. Cobalah untuk meng-override beberapa method yang ada dalam superclass StudentRecord, jika Anda benar-benar membutuhkannya.
11.6.2 Bentuk Abstract Class
Cobalah untuk membuat class abstract yang dinamai Shape dengan method abstract getArea() dan getName(). Tulis dua subclasses-nya yaitu Circle dan Square. Anda dapat menambahkan method tambahan ke dalam subclasses jika diinginkan.

BAB 10
Membuat Class Sendiri
10.1 Tujuan
Setelah kita mempelajari penggunaan class dari Java Class Library, kita akan mempelajari bagaimana menuliskan sebuah class sendiri. Pada bagian ini, untuk mempermudah pemahaman pembuatan class, kita akan membuat contoh class dimana akan ditambahkan beberapa data dan fungsi – fungsi lain.
Kita akan membuat class yang mengandung informasi dari Siswa dan operasi – operasi yang dibutuhkan pada record siswa.
Beberapa hal yang perlu diperhatikan pada syntax yang digunakan pada bab ini dan bagian lainnya :
*

Menandakan bahwa terjadi lebih dari satu kejadian dimana elemen tersebutdiimplementasikan
<description>

Menandakan bahwa Anda harus memberikan nilai pasti pada bagian ini
[]

Indikasi bagian optional
Pada akhir pembahasan, diharapkan siswa dapat :
• Membuat kelas mereka sendiri
• Mendeklarasikan atribut dan method pada class
• Menggunakan referensi this untuk mengakses instance data
• Membuat dan memanggil overloaded method
• Mengimport dan membuat package
• Menggunakan access modifiers untuk mengendalikan akses terhadap class member

Pengenalan Pemrograman 1 1

10.2 Mendefinisikan Class Anda
Sebelum menulis class Anda, pertama pertimbangkan dimana Anda akan menggunakan class dan bagaimana class tersebut akan digunakan. Pertimbangkan pula nama yang tepat dan tuliskan seluruh informasi atau properti yang ingin Anda isi pada class. Jangan sampai terlupa untuk menuliskan secara urut method yang akan Anda gunakan dalam class.
Dalam pendefinisian class, dituliskan :
<modifier> class <name> {
<attributeDeclaration>*
<constructorDeclaration>*
<methodDeclaration>*
}
dimana :
<modifier> adalah sebuah access modifier, yang dapat dikombinasikan dengan tipe modifier lain.
Petunjuk Penulisan Program :
Perhatikan bahwa pada class teratas, access modifier yang diperbolehkan adalah public dan package (bila tidak terdapat penulisan keyword access modifier pada kelas)
Pada bagian ini, kita akan membuat sebuah class yang berisi record dari siswa. Jika kita telah mengidentifikasikan tujuan dari pembuatan kelas, maka dapat dilakukan pemberian nama yang sesuai. Nama yang tepat pada class ini adalah StudentRecord.
Untuk mendefinisikan class, kita tuliskan :
public class StudentRecord
{
//area penulisan kode selanjutnya
}
dimana,
Public

Class ini dapat diakses dari luar package
Class

Keyword yang digunakan di pembuatan class Java
StudentRecord

Identifier yang menjelaskan class
Pengenalan Pemrograman 1 2

Petunjuk Penulisan Program :
1. Pertimbangkan nama yang tepat untuk class. Jangan gunakan nama acak dan
singkat seperti XYZ.
2. Nama class harus dimulai dengan huruf kapital
3. Nama file dari class harus sama dengan nama public class
10.3 Deklarasi Atribut
Dalam pendeklarasian atribut, kita tuliskan :
<modifier> <type> <name> [= <default_value>];
Langkah selanjutnya adalah mengurutkan atribut yang akan diisikan pada class. Untuk setiap informasi, urutkan juga tipe data yang yang tepat untuk digunakan. Contohnya, Anda tidak mungkin menginginkan untuk menggunakan tipe data integer untuk nama siswa, atau tipe data string pada nilai siswa.
Berikut ini adalah contoh informasi yang akan diisikan pada class StudentRecord :
name

String
address

String
age

Int
math grade

double
english grade

double
science grade

double
average grade

double
Anda dapat menambahkan informasi lain jika diperlukan.

Pengenalan Pemrograman 1 3

10.3.1 Instance Variable
Jika kita telah menuliskan seluruh atribut yang akan diisikan pada class, selanjutnya kita akan menuliskannya pada kode. Jika kita menginginkan bahwa atribut – atribut tersebut adalah unik untuk setiap object (dalam hal ini untuk setiap siswa), maka kita harus mendeklarasikannya sebagai instance variable :
Sebagai contoh :
public class StudentRecord
{
private String name;
private String address;
private int age;
private double mathGrade;
private double englishGrade;
private double scienceGrade;
private double average;
//area penulisan kode selanjutnya
}
dimana,
private disini menjelaskan bahwa variabel tersebut hanya dapat diakses oleh class itu sendiri. Object lain tidak dapat menggunakan variabel tersebut secara langsung. Kita akan membahas tentang kemampuan akses pada pembahasan selanjutnya.
Petunjuk Penulisan Program :
1. Deklarasikan seluruh instance variable pada awal penulisan class
2. Deklarasikan variable per baris
3. Penulisan instance variable, termasuk juga variabel lain harus dimulai dengan
huruf kecil
4. Gunakan tipe data yang tepat pada setiap variabel
5. Deklarasikan instance variable sebagai private supaya hanya method pada
class itu sendiri yang dapat mengaksesnya.
Pengenalan Pemrograman 1 4

10.3.2 Class Variable atau Static Variables
Disamping instance variable, kita juga dapat mendeklarasikan class variable atau variabel yang dimiliki class sepenuhnya. Nilai pada variabel ini sama pada semua object di class yang sama. Anggaplah kita menginginkan jumlah dari siswa yang dimiliki dari seluruh kelas, kita dapat mendeklarasiakan satu static variable yang akan menampung nilai tersebut. Kita beri nama variabel tersebut dengan nama studentCount.
Berikut penulisan static variable :
public class StudentRecord
{
//area deklarasi instance variables
private static int studentCount;
//area penulisan kode selanjutnya
}
Kita gunakan keyword : ’static’ untuk mendeklarasikan bahwa variabel tersebut adalah static.
Maka keseluruhan kode yang dibuat terlihat sebagai berikut :
public class StudentRecord
{
private String name;
private String address;
private int age;
private double mathGrade;
private double englishGrade;
private double scienceGrade;
private double average;
private static int studentCount;
//area penulisan kode selanjutnya
}
Pengenalan Pemrograman 1 5

10.4. Deklarasi Methods
Sebelum kita membahas method apa yang akan dipakai pada class, mari kita perhatikan penulisan method secara umum.
Dalam pendeklarasian method, kita tuliskan :
<modifier> <returnType> <name>(<parameter>*) {
<statement>*
}
dimana,
<modifier> dapat menggunakan beberapa modifier yang berbeda
<returnType> dapat berupa seluruh tipe data, termasuk void
<name> identifier atas class
<parameter> ::= <tipe_parameter> <nama_parameter>[,]
10.4.1 Accessor Methods
Untuk mengimplementasikan enkapsulasi, kita tidak menginginkan sembarang object dapat mengakses data kapan saja. Untuk itu, kita deklarasikan atribut dari class sebagai private. Namun, ada kalanya dimana kita menginginkan object lain untuk dapat mengakses data private. Dalam hal ini kita gunakan accessor methods.
Accessor Methods digunakan untuk membaca nilai variabel pada class, baik berupa instance maupun static. Sebuah accessor method umumnya dimulai dengan penulisan get<namaInstanceVariable>. Method ini juga mempunyai sebuah return value.
Sebagai contoh, kita ingin menggunakan accessor method untuk dapat membaca nama, alamat, nilai bahasa Inggris, Matematika, dan ilmu pasti dari siswa.
Mari kita perhatikan salah satu contoh implementasi accessor method.
public class StudentRecord
{
private String name;
:
: public String getName(){
return name;
}
}
Pengenalan Pemrograman 1 6

dimana,
public
– Menjelaskan bahwa method tersebut dapat diakses object luar kelas
String
– Tipe data return value dari method tersebut
getName
– Nama dari method
()
– Menjelaskan bahwa method tidak memiliki parameter apapun
Pernyataan berikut,
return name;
dalam program kita menandakan akan ada pengembalian nilai dari instance variable name pada pemanggilan method. Perhatikan bahwa return type dari method harus sama dengan tipe data terhadap data pada pernyataan return. Anda akan mendapatkan pesan kesalahan sebagai berikut bila tipe data yang digunakan tidak sama :
StudentRecord.java:14: incompatible types
found : int
required: java.lang.String
return age;
^
1 error
Contoh lain dari penggunaan accessor method adalah getAverage,
public class StudentRecord
{
private String name;
:
:
public double getAverage(){
double result = 0;
result = ( mathGrade+englishGrade+scienceGrade )/3;
return result;
}
}
Method getAverage() menghitung rata – rata dari 3 nilai siswa dan menghasilkan nilai return value dengan nama result.
Pengenalan Pemrograman 1 7

10.4.2 Mutator Methods
Bagaimana jika kita menghendaki object lain untuk mengubah data? Yang dapat kita lakukan adalah membuat method yang dapat memberi atau mengubah nilai variable dalam class, baik itu berupa instance maupun static. Method semacam ini disebut dengan mutator methods. Sebuah mutator method umumnya tertulis set<namaInstanceVariabel>.
Mari kita perhatikan salah satu dari implementasi mutator method :
public class StudentRecord
{
private String name;
:
: public void setName( String temp ){
name = temp;
}
}
dimana,
public

Menjelaskan bahwa method ini dapat dipanggil object luar kelas
void

Method ini tidak menghasilkan return value
setName

Nama dari method
(String temp)

Parameter yang akan digunakan pada method
Pernyataan berikut :
name = temp;
mengidentifikasi nilai dari temp sama dengan name dan mengubah data pada instance variable name.
Perlu diingat bahwa mutator methods tidak menghasilkan return value. Namun berisi beberapa argumen dari program yang akan digunakan oleh method.
Pengenalan Pemrograman 1 8

10.4.3 Multiple Return Statements
Anda dapat mempunyai banyak return values pada sebuah method selama mereka tidak pada blok program yang sama. Anda juga dapat menggunakan konstanta disamping variabel sebagai return value.
Sebagai contoh, perhatikan method berikut ini :
public String getNumberInWords( int num ){
String defaultNum = “zero”;
if( num == 1 ){
return “one”; //mengembalikan sebuah konstanta
}
else if
( num == 2){ return “two”; //mengembalikan sebuah konstanta
}
// mengembalikan sebuah variabel
return defaultNum;
}
10.4.4 Static Methods
Kita menggunakan static method untuk mengakses static variable studentCount.
public class StudentRecord
{
private static int studentCount;
public static int getStudentCount(){
return studentCount;
}
}
dimana,
public
– Menjelaskan bahwa method ini dapat diakses object luar kelas
static

Method ini adalah static dan pemanggilannya menggunakan [namaKelas].[namaMethod]. Sebagai contoh : studentRecord.getStudentCount
Int
– Tipe return dari method. Mengindikasikan method tersebut harus mempunyai return value berupa integer
getStudentCount
– Nama dari method
Pengenalan Pemrograman 1 9

public – Menjelaskan bahwa method ini dapat diakses object luar kelas
()
– Method ini tidak memiliki parameter apapun
Pada deklarasi di atas, method getStudentCount() akan selalu menghasilkan return value 0 jika kita tidak mengubah apapun pada kode program untuk mengatur nilainya. Kita akan membahas pengubahan nilai dari studentCount pada pembahasan constructor.
Petunjuk Penulisan Program :
1. Nama method harus dimulai dengan huruf kecil
2. Nama method harus berupa kata kerja
3. Gunakan dokumentasi sebelum mendeklarasikan sebuah method. Anda dapat
Menggunakan JavaDoc.

Pengenalan Pemrograman 1 10

10.4.5 Contoh Kode Program dari class StudentRecord
Berikut ini adalah kode untuk class StudentRecord :
public class StudentRecord
{
private String name;
private String address;
private int age;
private double mathGrade;
private double englishGrade;
private double scienceGrade;
private double average;
private static int studentCount;
/**
* Menghasilkan nama dari Siswa
*/
public String getName(){
return name;
}
/**
* Mengubah nama siswa
*/
public void setName( String temp ){
name = temp;
}
// area penulisan kode lain
/**
* Menghitung rata – rata nilai Matematik, Bahasa Inggris, * * Ilmu Pasti
*/
public double getAverage(){
double result = 0;
result = ( mathGrade+englishGrade+scienceGrade )/3;
return result;
}
/**
* Menghasilkan jumlah instance StudentRecord
*/
public static int getStudentCount(){
return studentCount;
}
}
Pengenalan Pemrograman 1 11

Berikut ini contoh kode dari class yang mengimplementasikan class StudentRecord :
public class StudentRecordExample
{
public static void main( String[] args ){
//membuat 3 object StudentRecord
StudentRecord annaRecord = new StudentRecord();
StudentRecord beahRecord = new StudentRecord();
StudentRecord crisRecord = new StudentRecord();
//Memberi nama siswa
annaRecord.setName(“Anna”);
beahRecord.setName(“Beah”);
crisRecord.setName(“Cris”);
//Menampilkan nama siswa “Anna”
System.out.println( annaRecord.getName() );
//Menampilkan jumlah siswa
System.out.println(“Count=”+StudentRecord.getStudentCount());
}
}
Output dari program adalah sebagai berikut :
Anna
Student Count = 0
10.5. Referensi this
Referensi this digunakan untuk mengakses instance variable yang dibiaskan oleh parameter. Untuk pemahaman lebih lanjut, mari kita perhatikan contoh pada method setAge. Asumsikan kita mempunyai kode deklarasi berikut pada method setAge.
public void setAge( int age ){
age = age; //SALAH!!!
}
Pengenalan Pemrograman 1 12

Nama parameter pada deklarasi ini adalah age, yang memiliki penamaan yang sama dengan instance variable age. Parameter age adalah deklarasi terdekat dari method, sehingga nilai dari parameter tersebut akan digunakan. Maka pada pernyataan :
age = age;
kita telah mengidentifikasi nilai dari parameter age kepada parameter itu sendiri. Hal ini sangat tidak kita hendaki pada kode program kita. Untuk menghindari kesalahan semacam ini, kita gunakan metode referensi this. Untuk menggunakan tipe referensi ini, kita tuliskan :
this.<namaInstanceVariable>
Sebagai contoh, kita dapat menulis ulang kode hingga tampak sebagai berikut :
public void setAge( int age ){
this.age = age;
}
Method ini akan mereferensikan nilai dari parameter age kepada instance variable dari object StudentRecord.
CATATAN : Anda hanya dapat menggunakan referensi tipe ini terhadap instance variable dan BUKAN static ataupun class variabel.
10.6. Overloading Methods
Dalam class yang kita buat, kadangkala kita menginginkan untuk membuat method dengan nama yang sama namun mempunyai fungsi yang berbeda menurut parameter yang digunakan. Kemampuan ini dimungkinkan dalam pemrograman Java, dan dikenal sebagai overloading method.
Overloading method mengijinkan sebuah method dengan nama yang sama namun memiliki parameter yang berbeda sehingga mempunyai implementasi dan return value yang berbeda pula. Daripada memberikan nama yang berbeda pada setiap pembuatan method, overloading method dapat digunakan pada operasi yang sama namun berbeda dalam implementasinya.
Pengenalan Pemrograman 1 13

Sebagai contoh, pada class StudentRecord kita menginginkan sebuah method yang akan menampilkan informasi tentang siswa. Namun kita juga menginginkan operasi penampilan data tersebut menghasilkan output yang berbeda menurut parameter yang digunakan. Jika pada saat kita memberikan sebuah parameter berupa string, hasil yang ditampilkan adalah nama, alamat dan umur dari siswa, sedang pada saat kita memberikan 3 nilai dengan tipe double, kita menginginkan method tersebut untuk menampilkan nama dan nilai dari siswa.
Untuk mendapatkan hasil yang sesuai, kita gunakan overloading method di dalam deklarasi class StudentRecord.
public void print( String temp ){
System.out.println(“Name:” + name);
System.out.println(“Address:” + address);
System.out.println(“Age:” + age);
}
public void print(double eGrade, double mGrade, double sGrade)
System.out.println(“Name:” + name);
System.out.println(“Math Grade:” + mGrade);
System.out.println(“English Grade:” + eGrade);
System.out.println(“Science Grade:” + sGrade);
}
Jika kita panggil pada method utama (main) :
public static void main( String[] args )
{
StudentRecord annaRecord = new StudentRecord();
annaRecord.setName(“Anna”);
annaRecord.setAddress(“Philippines”);
annaRecord.setAge(15);
annaRecord.setMathGrade(80);
annaRecord.setEnglishGrade(95.5);
annaRecord.setScienceGrade(100);
//overloaded methods
annaRecord.print( annaRecord.getName() );
annaRecord.print( annaRecord.getEnglishGrade(),
annaRecord.getMathGrade(),
annaRecord.getScienceGrade());
}
Pengenalan Pemrograman 1 14

Kita akan mendapatkan output pada panggilan pertama sebagai berikut :
Name:Anna
Address:Philippines
Age:15
Kemudian akan dihasilkan output sebagai berikut pada panggilan kedua :
Name:Anna
Math Grade:80.0
English Grade:95.5
Science Grade:100.0
Jangan dilupakan bahwa overloaded method memiliki property sebagai berikut :
1. Nama yang sama
2. Parameter yang berbeda
3. Nilai kembalian (return) bisa sama ataupun berbeda
10.7. Deklarasi Constructor
Telah tersirat pada pembahasan sebelumnya, Constructor sangatlah penting pada pembentukan sebuah object. Constructor adalah method dimana seluruh inisialisasi object ditempatkan.
Berikut ini adalah property dari Constructor :
1. Constructor memiliki nama yang sama dengan class
2. Sebuah Constructor mirip dengan method pada umumnya, namun hanya informasi – informasi berikut yang dapat ditempatkan pada header sebuah constructor, scope atau identifikasi pengaksesan (misal: public), nama dari konstuktor dan parameter.
3. Constructor tidak memiliki return value
4. Constructor tidak dapat dipanggil secara langsung, namun harus dipanggil dengan menggunakan operator new pada pembentukan sebuah class.
Untuk mendeklarasikan constructor, kita tulis,
<modifier> <className> (<parameter>*) {
<statement>*
}
Pengenalan Pemrograman 1 15

10.7.1 Default Constructor
Setiap kelas memiliki default constructor. Sebuah default constructor adalah constructor yang tidak memiliki parameter apapun. Jika sebuah class tidak memiliki constructor apapun, maka sebuah default constructor akan terbuat secara implisit :
Sebagai contoh, pada class StudentRecord, bentuk default constructor akan terlihat seperti dibawah ini :
public StudentRecord()
{
//area penulisan kode
}
10.7.2 Overloading Constructor
Seperti telah kita bahas sebelumnya, sebuah constructor juga dapat dibentuk menjadi overloaded. Dapat dilihat pada 4 contoh sebagai berikut :
public StudentRecord(){
//area inisialisasi kode;
}
public StudentRecord(String temp){
this.name = temp;
}
public StudentRecord(String name, String address){
this.name = name;
this.address = address;
}
public StudentRecord(double mGrade, double eGrade, double sGrade){
mathGrade = mGrade;
englishGrade = eGrade;
scienceGrade = sGrade;
}
Pengenalan Pemrograman 1 16

10.7.3 Menggunakan Constructor
Untuk menggunakan constructor, kita gunakan kode – kode sebagai berikut :
public static void main( String[] args )
{
//membuat 3 objek
StudentRecord annaRecord=new StudentRecord(“Anna”);
StudentRecord beahRecord=new StudentRecord(“Beah”,”Philippines”);
StudentRecord crisRecord=new StudentRecord(80,90,100);
//area penulisan kode selanjtunya
}
Sebelum kita lanjutkan, mari kita perhatikan kembali deklarasi static variable studentCount yang telah dibuat sebelumnya. Tujuan deklarasi studentCount adalah untuk menghitung jumlah object yang dibentuk pada class StudentRecord. Jadi, apa yang akan kita lakukan selanjutnya adalah menambahkan nilai dari studentCount setiap kali setiap pembentukan object pada class StudentRecord. Lokasi yang tepat untuk memodifikasi dan menambahkan nilai studentCount terletak pada constructor-nya, karena selalu dipanggil setiap kali objek terbentuk. Sebagai contoh :
public StudentRecord(){
//letak kode inisialisasi
studentCount++; //menambah student
}
public StudentRecord(String temp){
this.name = temp;
studentCount++; //menambah student
}
public StudentRecord(String name, String address){
this.name = name;
this.address = address;
studentCount++; //menambah student
}
public StudentRecord(double mGrade, double eGrade, double sGrade){
mathGrade = mGrade;
englishGrade = eGrade;
scienceGrade = sGrade; studentCount++; //menambah student
}
Pengenalan Pemrograman 1 17

10.7.4 Pemanggilan Constructor Dengan this()
Pemanggilan constructor dapat dilakukan secara berangkai, dalam arti Anda dapat memanggil constructor di dalam constructor lain. Pemanggilan dapat dilakukan dengan referensi this(). Perhatikan contoh kode sebagai berikut :
1: public StudentRecord(){
2: this(“some string”);
3:
4: }
5:
6: public StudentRecord(String temp){
7: this.name = temp;
8: }
9:
10: public static void main( String[] args )
11: {
12:
13: StudentRecord annaRecord = new StudentRecord();
14: }
Dari contoh kode diatas, pada saat baris ke 13 dipanggil akan memanggil constructor dasar pada baris pertama. Pada saat baris kedua dijalankan, baris tersebut akan menjalankan constructor yang memiliki parameter String pada baris ke-6.
Beberapa hal yang patut diperhatikan pada penggunaan this() :
1. Harus dituliskan pada baris pertama pada sebuah constructor
2. Hanya dapat digunakan pada satu definisi constructor. Kemudian metode ini dapat diikuti dengan kode – kode berikutnya yang relevan
Pengenalan Pemrograman 1 18

10.8. 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.
10.8.1 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;
10.8.2 Membuat Package
Untuk membuat package, dapat dilakukan dengan menuliskan :
package <packageName>;
Anggaplah kita ingin membuat package dimana class StudentRecord akan ditempatkan bersama dengan class – class yang lain dengan nama package schoolClasses.
Pengenalan Pemrograman 1 19

Langkah pertama yang harus dilakukan adalah membuat folder dengan nama schoolClasses. Salin seluruh class yang ingin diletakkan pada package dalam folder ini. Kemudian tambahkan kode deklarasi package pada awal file. Sebagai contoh :
package schoolClasses;
public class StudentRecord
{
private String name;
private String address;
private int age;
}
Package juga dapat dibuat secara bersarang. Dalam hal ini Java Interpreter menghendaki struktur direktori yang mengandung class eksekusi untuk disesuaikan dengan struktur package.
10.8.3 Pengaturan CLASSPATH
Diasumsikan package schoolClasses terdapat pada direktori C:\. Langkah selanjutnya adalah mengatur classpath untuk menunjuk direktori tersebut sehingga pada saat akan dijalankan, JVM dapat mengetahui dimana class tersebut tersimpan.
Sebelum membahas cara mengatur classpath, perhatikan contoh dibawah yang menAndakan kejadian bila kita tidak mengatur classpath.
Asumsikan kita mengkompilasi dan menjalankan class StudentRecord :
C:\schoolClasses>javac StudentRecord.java
C:\schoolClasses>java StudentRecord
Exception in thread “main” java.lang.NoClassDefFoundError: StudentRecord (wrong name: schoolClasses/StudentRecord)
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(Unknown Source)
at java.security.SecureClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.access$100(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClassInternal(Unknown Source)
Kita akan mendapatkan pesan kesalahan berupa NoClassDefFoundError yang berarti JAVA tidak mengetahui dimana posisi class. Hal tersebut disebabkan oleh karena class
Pengenalan Pemrograman 1 20

StudentRecord berada pada package dengan nama studentClasses. Jika kita ingin menjalankan kelas tersebut, kita harus memberi informasi pada JAVA bahwa nama lengkap dari class tersebut adalah schoolClasses.StudentRecord. Kita juga harus menginformasikan kepada JVM dimana posisi pencarian package, yang dalam hal ini berada pada direktori C:\. Untuk melakukan langkah – langkah tersebut, kita harus mengatur classpath.
Pengaturan classpath pada Windows dilakukan pada command prompt :
C:\schoolClasses> set classpath=C:\
dimana C:\ adalah direktori dimana kita menempatkan package. Setelah mengatur classpath, kita dapat menjalankan program di mana saja dengan mengetikkan :
C:\schoolClasses> java schoolClasses.StudentRecord
Pada UNIX, asumsikan bahwa kita memiliki class – class yang terdapat dalam direktori /usr/local/myClasses, ketikkan :
export classpath=/usr/local/myClasses
Perhatikan bahwa Anda dapat mengatur classpath dimana saja. Anda juga dapat mengatur lebih dari satu classpath, kita hanya perlu memisahkannya dengan menggunakan ; (Windows), dan : (UNIX). Sebagai contoh :
set classpath=C:\myClasses;D:\;E:\MyPrograms\Java
dan untuk sistem UNIX :
export classpath=/usr/local/java:/usr/myClasses
Pengenalan Pemrograman 1 21

10.9. Access Modifiers
Pada saat membuat, mengatur properties dan class methods, kita ingin untuk mengimplementasikan beberapa macam larangan untuk mengakses data. Sebagai contoh, jika Anda ingin beberapa atribut hanya dapat diubah hanya dengan method tertentu, tentu Anda ingin menyembunyikannya dari object lain pada class. Di JAVA, implementasi tersebut disebut dengan access modifiers.
Terdapat 4 macam access modifiers di JAVA, yaitu : public, private, protected dan default. 3 tipe akses pertama tertulis secara ekplisit pada kode untuk mengindikasikan tipe akses, sedangkan yang keempat yang merupakan tipe default, tidak diperlukan penulisan keyword atas tipe.
10.9.1 Akses Default (Package Accessibility)
Tipe ini mempersyaratkan bahwa hanya class dalam package yang sama yang memiliki hak akses terhadap variabel dan methods dalam class. Tidak terdapat keyword pada tipe ini. Sebagai contoh :
public class StudentRecord
{
//akses dasar terhadap variabel
int name;
//akses dasar terhadap metode
String getName(){
return name;
}
}
Pada contoh diatas, variabel nama dan method getName() dapat diakses dari object lain selama object tersebut berada pada package yang sama dengan letak dari file StudentRecord.
Pengenalan Pemrograman 1 22

10.9.2 Akses Public
Tipe ini mengijinkan seluruh class member untuk diakses baik dari dalam dan luar class. Object apapun yang memiliki interaksi pada class memiliki akses penuh terhadap member dari tipe ini. Sebagai contoh :
public class StudentRecord
{
//akses dasar terhadap variabel
public int name;
//akses dasar terhadap metode
public String getName(){
return name;
}
}
Dalam contoh ini, variabel name dan method getName() dapat diakses dari object lain.
10.9.3 Akses Protected
Tipe ini hanya mengijinkan class member untuk diakses oleh method dalam class tersebut dan elemen – elemen subclass. Sebagai contoh :
public class StudentRecord
{
//akses pada variabel
protected int name;
//akses pada metode
protected String getName(){
return name;
}
}
Pada contoh diatas, variabel name dan method getName() hanya dapat diakses oleh method internal class dan subclass dari class StudentRecord. Definisi subclass akan dibahas pada bab selanjutnya.
Pengenalan Pemrograman 1 23

10.9.4 Akses Private
Tipe ini mengijinkan pengaksesan class hanya dapat diakses oleh class dimana tipe ini dibuat. Sebagai contoh :
public class StudentRecord
{
//akses dasar terhadap variabel
private int name;
//akses dasar terhadap metode
private String getName(){
return name;
}
}
Pada contoh diatas, variabel name dan method getName() hanya dapat diakses oleh method internal class tersebut.
Petunjuk Penulisan Program :
Instance variable dari class secara default akan bertipe private sehingga class tersebut hanya akan menyediakan accessor dan mutator methods terhadap variabel ini.
Pengenalan Pemrograman 1 24

10.10. Latihan
10.10.1 Entry Buku Alamat
Tugas Anda adalah membuat sebuah class yang memuat data-data pada buku alamat. Tabel berikut mendefinisikan informasi yang dimiliki oleh buku alamat.
Attribut
Deskripsi
Nama
Nama Lengkap perseorangan
Alamat
Alamat Lengkap
Nomor Telepon
Nomor telepon personal
Alamat E-Mail
Alamat E-Mail personal
Tabel 1: Atribut dan Deskripsi Atribut
Buat implementasi dari method sebagai berikut :
1. Menyediakan accessor dan mutator method terhadap seluruh atribut
2. Constructor
10.10.2 Buku Alamat
Buat sebuah class buku alamat yang dapat menampung 100 data. Gunakan class yang telah dibuat pada nomor pertama. Anda harus mengimplementasikan method berikut pada buku alamat :
1. Memasukkan data
2. Menghapus data
3. Menampilkan seluruh data
4. Update data
Pengenalan Pemrograman 1 25

Pengenalan Pemrograman 1 1
BAB 9 Read the rest of this entry »

BAB 8
Argumen dari Command-line
8.1 Tujuan
Pada bagian ini, kita akan mempelajari bagaimana untuk memproses sebuah input dari command-line dengan menggunakan argumen yang diberikan kepada program Java.
Pada akhir pelajaran, siswa diharapkan dapat:
• Mengetahui dan menjelaskan mengenai argumen command-line
• Mendapatkan input dari user dengan menggunakan argumen command-line
• Mempelajari bagaimana memberikan argumen kedalam program pada NetBeans
8.2 Argumen Command-line
Sebuah aplikasi Java dapat menerima berbagai argumen dari command-line. Argumen dari command line memberikan kesempatan bagi user untuk mempengaruhi operasi dari sebuah aplikasi dalam sekali invokasi. User memasukkan argumen command line pada saat meng-invoke aplikasi dan memberikan spesifikasi kepada aplikasi tersebut setelah nama kelas untuk dijalankan.
Sebagai contoh, apabila Anda memiliki sebuah aplikasi Java dengan nama Sort, yang akan mengurutkan lima nomor, Anda dapat menjalankannya seperti berikut ini:
Pengenalan Pemrograman 1 1

Gambar 1:Menjalankan argument dari Command-Line
Perhatikan bahwa sebuah argumen akan dipisahkan oleh spasi. Di bahasa Java, apabila Anda akan memanggil sebuah aplikasi, sebuah runtime system akan memberikan argumen command-line ke main method lewat array dari String, dimana tiap String dalam array terdiri dari sebuah argumen commmand-line. Perhatikan deklarasi dari main method,
public static void main( String[] args )
Argumen yang diberikan kepada program Anda akan disimpan kedalam sebuah array String dengan identifier args.
Pada contoh sebelumnya, argumen dari command-line yang akan diberikan kepada aplikasi sort command adalah lima buah String yaitu “5”,”4”,”3”,”2”, dan “1”. Anda dapat mengetahaui berapa banyak argumen dari command-line dengan cara melihat panjang dari attribute array.
Sebagai contoh,
int numberOfArgs = args.length;
Jika program Anda membutuhkan support sebuah argumen command-line yang numeric. Anda harus mengkonversi String argumen tersebut untuk merepresantasikan sebuah nomor, misalnya “34” menjadi sebuah nomor. Kode dibawah ini adalah sebuah potongan untuk mengkonversi sebuah argumen command-line menjadi integer.
int firstArg = 0;
if (args.length > 0){
Pengenalan Pemrograman 1 2

firstArg = Integer.parseInt(args[0]);
}
parseInt akan mendapatkan NumberFormatException (ERROR) jika format args[0] tidak valid (bukan sebuah nomor).
Petunjuk penulisan program:
Sebelum menggunakan argumen command line, selalu telitilah terlebih dahulu berapa banyak argumen yang diperlukan untuk mengakses sebuah array, sehingga tidak ada exception yang akan muncul. Pengenalan Pemrograman 1 3
8.3 Argument Command-line di NetBeans
Untuk menggambarkan bagaimana sebuah argumen diberikan pada program di NetBeans, marilah kita membuat sebuah program Java yang akan mencetak jumlah argumen dimana argumen pertama yang telah diberikan pada program tersebut.
public class CommandLineExample
{
public static void main( String[] args ){
System.out.println(“Number of arguments=” +
args.length);
System.out.println(“First Argument=”+ args[0]);
}
}
Sekarang, jalankan NetBeans, buat sebuah project yang baru, dan beri nama project ini CommanLineExample. Copy kode yang telah dituliskan diatas, kemudian compile. Setelah itu, ikutilah langkah-langkan berikut ini untuk memberikan argumen kepada program Anda dengan menggunakan NetBeans.
Klik di Projects (dilingkari dibawah)
Gambar 2: Membuka file project
Pengenalan Pemrograman 1 4

Klik kanan icon CommanLineExample dan akan keluar sebuah pop-up menu.
Klik pada properties-nya.
Gambar 3: Membuka Properties
Dialog mengenai project properties akan tampil
Figure 4: Properties Dialog
Pengenalan Pemrograman 1 5

Kemudian, klik Run -> Running Project
Gambar 5: Klik untuk menjalankan project
Pada argument textbox, tuliskan tipe argumen yang Anda ingin masukkan kedalam program. Dalam kasus ini kita akan mengetikkan 5 4 3 2 1. Kemudian, klik pada tombol OK
Pengenalan Pemrograman 1 6

Gambar 6: Set argument pada Command-Line
Gambar 7: Jalankan program dengan tombol shortcut
Kemudian, cobalah untuk menjalankan (RUN) progam Anda
Pengenalan Pemrograman 1 7

Seperti yang dapat Anda lihat, keluaran dari program Anda adalah jumlah dari argumen yaitu 5, dimana argumen pertama juga memiliki value 5.
Gambar 8: Program Keluaran

Pengenalan Pemrograman 1 8
8.4 Latihan
8.4.1 Mencetak Argument
Dapatkan input dari user dengan menggunakan argument command line dan cetak semua argumen ke layar. Sebagai contoh, jika user memasukkan
java Hello world that is all
program Anda haruslah mencetak
Hello
world
that
is
all
8.4.2 Operasi Aritmatik
Dapatkan dua buah bilangan yang diinputkan user dari command line dengan argumen command line,kemudian cetak hasil penjumlahannya, hasil pengurangannya, hasil perkalian, dan juga hasil pembagiannya.
java ArithmeticOperation 20 4
program anda akan mencetak
sum = 24
difference = 16
product = 80
quotient = 5
Pengenalan Pemrograman 1 9

Pengenalan Pemrograman 1 1
BAB 7
Java Array
7.1 Tujuan
Dalam bagian ini, kita akan mendiskusikan mengenai array dalam Java. Pertama, kita akan mendefinisikan apa yang dimaksud dengan array, kemudian kita juga akan mendefinisikan bagaimana mendeklarasikannya dan menggunakannya dalam Java.
Pada akhir pelajaran, siswa haruslah mampu untuk :
– Mendeklarasikan dan membuat array
– Mengakses elemen-elemen didalam array
– Menentukan jumlah element didalam sebuah array
– Mendeklarasikan dan membuat array multidimensi
7.2 Pengenalan Array
Dibagian sebelumnya, kita telah mendiskusikan bagaimana cara pendeklarasian berbagai macam variabel dengan menggunakan tipe data primitif. Dalam pendeklarasian variabel, kita sering menggunakan sebuah tipe data beserta nama variabel atau identifier yang unik, dimana untuk menggunakan variabel tersebut, kita akan memanggil dengan nama identifier-nya.
Sebagai contoh, kita memiliki tiga variabel dengan tipe data int yang memiliki identifier yang berbeda untuk tiap variabel.
int number1;
int number2;
int number3;
number1 = 1;
number2 = 2;
number3 = 3;
Seperti yang dapat Anda perhatikan pada contoh diatas, hanya untuk menginisialisasi dan menggunakan variabel terutama pada saat variabel-variabel tersebut memiliki tujuan yang sama, dirasa sangat membingungkan. Di Java maupun di bahasa pemrograman yang lain, mereka memiliki kemampuan untuk menggunakan satu variabel yang dapat menyimpan sebuah data list dan kemudian memanipulasinya dengan lebih efektif. Tipe variabel inilah yang disebut sebagai array.

Pengenalan Pemrograman 1 2
Gambar 1: Contoh dari Integer Array
Sebuah array akan menyimpan beberapa item data yang memiliki tipe data sama didalam sebuah blok memori yang berdekatan yang kemudian dibagai menjadi beberapa slot. Bayangkanlah array adalah sebuah variabel – sebuah lokasi memori tertentu yang memiliki satu nama sebagai identifier, akan tetapi ia dapat menyimpan lebih dari sebuah value.
7.3 Pendeklarasian Array
Array harus dideklarasikan seperti layaknya sebuah variabel. Apabila Anda mendeklarasikan array, Anda harus membuat sebuah list dari tipe data, yang diikuti oleh tanda kurung buka dan kurung tutup, yang diikuti oleh nama identifier. Sebagai contoh,
int []ages;
atau Anda dapat menempatkan kurung buka dan kurung tutupnya setelah identifier. Sebagai contoh,
int ages[];
Pengenalan Pemrograman 1 3
Setelah pendeklarasian, kita harus membuat array dan menentukan berapa panjangnya dengan sebuah konstruktor. Proses ini di Java disebut sebagai instantiation ( Kata dalam Java yang berarti membuat ). Untuk meng-instantiate sebuah obyek, kita membutuhkan sebuah konstruktor. Kita akan membicarakan lagi mengenai instantiate obyek dan pembuatan konstruktor pada bagian selanjutnya. Perlu dicatat, bahwa ukuran dari array tidak dapat diubah setelah Anda menginisialisasinya. Sebagai contoh,
//deklarasi
int ages[];
Gambar 2: Inisialisasi Arrays
//instantiate obyek
ages = new int[100];
atau bisa juga ditulis dengan,
//deklarasi dan instantiate obyek
int ages[] = new int[100];
Pada contoh diatas, deklarasi akan memberitahukan kepada compiler Java, bahwa identifier ages akan digunakan sebagai nama array yang berisi data-data integer, dan kemudian untuk membuat atau meng-instantiate sebuah array baru yang terdiri dari 100 elemen.
Selain menggunakan sebuah keyword baru untuk meng-instantiate array, Anda juga dapat secara otomatis mendeklarasikan array, membangunnya, kemudian memberikan sebuah value.
Sebagai contoh,
//membuat sebuah array yang berisi variabel-variabel //boolean pada sebuah identifier. Array ini terdiri dari 4 //elemen yang diinisilisasikan sebagai value //{true,false,true,false}
boolean results[] ={ true, false, true, false };
//Membuat sebuah array yang terdiri dari penginisialisasian //4 variabel double bagi value {100,90,80,75}
double []grades = {100, 90, 80, 75};
//Membuat sebuah array String dengan identifier days. Array //ini terdiri dari 7 elemen.
String days[] = { “Mon”, “Tue”, “Wed”, “Thu”, “Fri”, “Sat”, “Sun”};

Pengenalan Pemrograman 1 4
7.4 Pengaksesan sebuah elemen array
Untuk mengakses sebuah elemen dalam array, atau mengakses sebagian dari array, Anda harus menggunakan sebuah nomor atau yang disebut sebagai index atau subscript.
Sebuah nomor index atau subscript telah diberikan kepada tiap anggota array, sehingga program dan programmer dapat mengakses setiap value apabila dibutuhkan. Index selalu dalam integer. Dimulai dari nol, kemudian akan terus bertambah sampai list value dari array tersebut berakhir. Perlu dicatat, bahwa elemen-elemen didalam array dimulai dari 0 sampai dengan (ukuranArray-1).
Sebagai contoh, pada array yang kita deklarasikan tadi, kita mempunyai,
//memberikan nilai 10 kepada elemen pertama array
ages[0] = 10;
//mencetak elemen array yang terakhir System.out.print(ages[99]);
Perlu diperhatikan bahwa sekali array dideklarasikan dan dikonstruksi, nilai yang disimpan dalam setiap anggota array akan diinisialisasi sebagai nol. Oleh karena itu, apabila Anda menggunakan tipe data reference seperti String, ia tidak akan diinisalisasi ke string kosong “”, sehingga Anda tetap harus membuat String array secara eksplisit.
Berikut ini adalah contoh, bagaimana untuk mencetak seluruh elemen didalam array. Dalam contoh ini digunakanlah loop, sehingga kode kita menjadi lebih pendek.
public class ArraySample{
public static void main( String[] args ){
int[] ages = new int[100];
for( int i=0; i<100; i++ ){
System.out.print( ages[i] );
}
}
}
Petunjuk penulisan program:
1. Biasanya, lebih baik menginisialisasi atau meng-instantiate array setelah Anda mendeklarasikannya. Sebagai contoh pendeklarasiannya
int []arr = new int[100];
lebih disarankan daripada,
int []arr;
arr = new int[100];
2. Elemen-elemen dalam n-elemen array memiliki index dari 0 sampai n-1. Perhatikan disini bahwa tidak ada elemen array arr[n]. Hal ini akan menyebabkan array-index out-of-bounds exception.
3. Anda tidak dapat mengubah ukuran dari sebuah array

Pengenalan Pemrograman 1 5
7.5 Panjang Array
Untuk mengetahui berapa banyak element didalam sebuah array, Anda dapat menggunakan length (panjang) field dalam array. Panjang field dalam array akan mengembalikan ukuran dari array itu sendiri. Sebagai contoh,
arrayName.length
Pada contoh sebelumnya, kita dapat menuliskannya kembali seperti berikut ini,
public class ArraySample
{
public static void main( String[] args ){
int[] ages = new int[100];
for( int i=0; i<ages.length; i++ ){
System.out.print( ages[i] );
}
}
}
Petunjuk penulisan program:
1. Pada saat pembuatan loop untuk memproses elemen-elemen dalam array, gunakanlah length field didalam pernyataan pengkondisian dalam loop. Hal ini akan menyebabkan loop secara otomatis menyesuaikan diri terhada ukuran array yang berbeda-beda.
2. Pendeklarasian ukuran array di Java, biasanya digunakan constant untuk mempermudah. Sebagai contoh,
final int ARRAY_SIZE = 1000; //pendeklarasian constant
. . .
int[] ages = new int[ARRAY_SIZE];

Pengenalan Pemrograman 1 6
7.6 Array Multidimensi
Array multidimensi diimplementasikan sebagai array didalam array. Array multidimensi dideklarasikan dengan menambahkan jumlah tanda kurung setelah nama array. Sebagai contoh,
// Elemen 512 x 128 dari integer array
int[][] twoD = new int[512][128];
// karakter array 8 x 16 x 24
char[][][] threeD = new char[8][16][24];
// String array 4 baris x 2 kolom
String[][] dogs = {{ “terry”, “brown” },
{ “Kristin”, “white” },
{ “toby”, “gray”},
{ “fido”, “black”}
};
Untuk mengakses sebuah elemen didalam array multidimensi, sama saja dengan mengakses array satu dimensi. Misalnya saja, untuk mengakses element pertama dari baris pertama didalam array dogs, kita akan menulis,
System.out.print( dogs[0][0] );
Kode diatas akan mencetak String “terry” di layar.

Pengenalan Pemrograman 1 7
7.7 Latihan
7.7.1 Hari dalam seminggu
Buatlah sebuah String array yang akan menginisialisasi 7 hari dalam seminggu. Sebagai contoh,
String days[] = {“Monday”, “Tuesday”….};
Gunakan while-loop, kemudian print semua nilai dari array (Gunakan juga untuk do-while dan for-loop)Using a while-loop.
7.7.2 Nomor terbesar
Gunakanlah BufferedReader dan JoptionPane, tanyakan kepada user untuk 10 nomor. Kemudian gunakan array untuk menyimpan 10 nomor tersebut. Tampilkan kepada user, input terbesar yang telah diberikan user.
7.7.3 Buku Alamat
Berikut ini adalah array multidimensi yang menyatakan isi dari sebuah buku alamat:
String entry = {{“Florence”, “735-1234”, “Manila”},
{“Joyce”, “983-3333”, “Quezon City”},
{“Becca”, “456-3322”, “Manila”}};
Cetak buku alamat tersebut dalam format berikut ini:
Name : Florence
Tel. # : 735-1234
Address : Manila
Name : Joyce
Tel. # : 983-3333
Address : Quezon City
Name : Becca
Tel. # : 456-3322
Address : Manila

BAB 6
Struktur Kontrol
6.1 Tujuan
Pada bab sebelumnya, kita sudah mendapatkan contah dari program sequential, dimana statement dieksekusi setelah statement sebelumnya dengan urutan tertentu. Pada bagian ini, kita mempelajari tentang struktur kontrol yang bertujuan agar kita dapat menentukan urutan statement yang akan dieksekusi.
Pada akhir bab, siswa diharapkan mampu:
• Menggunakan struktur kontrol keputusan (if, else, switch) yang digunakan untuk memilih blok kode yang akan dieksekusi
• Menggunakan struktur kontrol pengulangan (while, do-while, for) yang digunakan untuk melakukan pengulangan pada blok kode yang akan dieksekusi
• Menggunakan statement percabangan (break, continue, return) yang digunakan untuk mengatur redirection dari program
6.2 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.
6.2.1Statement 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;
. . .
}
Pengenalan Pemrograman 1 1

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!”);
}
Petunjuk Penulisan Program :
1. Boolean_expression pada statement harus merupakan nilai boolean.Hal ini berarti persyaratan harus bernilai true atau false.
2. Masukkan statement di dalam blok if. Contohnya,
if( boolean_expression ){
//statement1;
//statement2;
}
Pengenalan Pemrograman 1 2

6.2.2Statement 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;
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”);
}
Pengenalan Pemrograman 1 3

Gambar 2: Flowchart Statement If-Else
Petunjuk Penulisan Program :
1. Untuk menghindari kebingungan, selalu letakkan statement di dalam blok if-else di dalam tanda {},
2. Anda dapat memiliki blok if-else yang bersarang. Ini berarti anda dapat memiliki blok if-else yang lain di dalam blok if-else. Contohnya,
if( boolean_expression ){
if( boolean_expression ){
. . .
}
}
else{
. . .
}
Pengenalan Pemrograman 1 4

6.2.3 Statement if-else-if
Statement pada bagian else dari blok if-else dapat menjadi struktur if-else yang lain. Struktur seperti ini mengijinkan kita untuk membuat seleksi persyaratan yang lebih kompleks.
Bentuk statement if-else if,
if( boolean_expression1 )
statement1;
else if( boolean_expression2 )
statement2;
else
statement3;
Bisa anda catat anda dapat memiliki banyak blok else-if sesudah statement if. Blok else bersifat optional dan dapat dihilangkan. Pada contoh di bawah atas, jika boolean_expression1 bernilai true, maka program akan mengeksekusi statement1 dan melewati statement yang lain. Jika boolean_expression2 bernilai true, maka program akan mengeksekusi statement2 dan melewati statement3.
Gambar 3: Flowchart Statement If-Else-If
Pengenalan Pemrograman 1 5

Berikut ini contoh code statement if-else-if
int grade = 68;
if( grade > 90 ){
System.out.println(“Very good!”);
}
else if( grade > 60 ){
System.out.println(“Very good!”);
}
else{
System.out.println(“Sorry you failed”);
}
6.2.4Kesalahan umum ketika menggunakan statement if-else:
1. Kondisi pada statement if bukan merupakan nilai boolean. Contohnya,
//BENAR
int number = 0;
if( number ){
//some statements here
}
Variabel number tidak memiliki nilai Boolean.
2. Using = instead of == for comparison. For example,
3. Menggunakan = daripada == untuk operator perbandingan. Contohnya,
//SALAH
int number = 0;
if( number = 0 ){
//Statement Selanjutnya
}
Seharusnya code tersebut ditulis,
//BENAR
int number = 0;
if( number == 0 ){
//Statement Selanjutnya
}
3. Menulis elseif daripada else if.
Pengenalan Pemrograman 1 6

6.2.5Contoh statement if-else-else if
public class Grade
{
public static void main( String[] args )
{
double grade = 92.0;
if( grade >= 90 ){
System.out.println( “Excellent!” );
}
else if( (grade < 90) && (grade >= 80)){
System.out.println(“Good job!” );
}
else if( (grade < 80) && (grade >= 60)){
System.out.println(“Study harder!” );
}
else{
System.out.println(“Sorry, you failed.”);
}
}
}
Pengenalan Pemrograman 1 7
6.2.6Statement 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
. . . //
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.
Pengenalan Pemrograman 1 8

Gambar 4: Flowchart Statement Switch
Petunjuk Penulisan Program :
1. Menentukan penggunaan statement if atau statement switch adalah sebuah keputusan. Anda dapat menentukan yang mana yang akan dipakai berdasarkan kemudahan membaca program dan faktor-faktor yang lain.
2. Statement if dapat digunakan untuk membuat keputusan berdasarkan rentang nilai tertentu atau kondisi tertentu, sedangkan statement switch membuat keputusan hanya berdasarkan nilai unique (unik) dari integer atau character.
Pengenalan Pemrograman 1 9

6.2.7Contoh 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.”);
}
}
}
Pengenalan Pemrograman 1 10

6.3 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.
6.3.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.
Pengenalan Pemrograman 1 11

Berikut ini adalah beberapa contoh while loop,
Contoh 1:
int x = 0;
while (x<10)
{
System.out.println(x);
x++;
}
Contoh 2:
//infinite loop
while(true)
System.out.println(“hello”);
Contoh 3:
//no loops
// statement is not even executed
while (false)
System.out.println(“hello”);
Pengenalan Pemrograman 1 12

6.3.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.

Pengenalan Pemrograman 1 13

Panduan pemrograman:
1. Kesalahan pemrograman ketika menggunakan do-while loop adalah lupa untuk menulis titik koma (;) setelah ekspresi while.
do{

}while(boolean_expression)//-􀃆 salah>tidak ada titik koma(;)
2. Seperti pada while loop, pastikan do-while loop anda berhenti pada suatu titik.
6.3.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;
. . .
}
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++;
}
Pengenalan Pemrograman 1 14

6.4 Branching Statements
Branching statements mengijinkan kita untuk mengatur jalannya eksekusi program. Java memberikan tiga bentuk branching statements: break, continue dan return.
6.4.1break statement
Statement break memiliki dua bentuk: unlabeled dan labeled.
6.4.1.1 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.
Pengenalan Pemrograman 1 15

6.4.1.2 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.
Pengenalan Pemrograman 1 16
6.4.2Continue 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.
6.4.2.1 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”);
6.4.2.2 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.
Pengenalan Pemrograman 1 17

6.4.3 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;
Kita akan membahas lebih lanjut tentang statement return ketika mempelajari tentang fungsi.
Pengenalan Pemrograman 1 18

6.5 Latihan
6.5.1 Nilai
Ambil tiga nilai ujian dari user dan hitung nilai rata-rata dari nilai tersebut. Berikan output rata-rata dari tiga ujian. Berikan juga smiley face pada output jika nilai rata-rata lebih besar atau sama dengan 60, selain itu beri output :-(.
1. Gunakan BufferedReader untuk mendapat input dari user, dan System.out untuk output hasilnya.
2. Gunakan JOptionPane untuk mendapat input dari user dan output hasilnya.
6.5.2Membaca Bilangan
Ambil sebuah angka sebagai input dari user, dan outputnya berupa kata yang sesuai dengan angka. Angka yang dimasukkan antara 1-10. Jika user memasukkan nilai yang tidak sesuai berikan output “Invalid number”.
1. Gunakan statement if-else untuk menyelesaikan
2. Gunakan statement switch untuk menyelesaikan
6.5.3 Cetak Seratus Kali
Buat sebuah program yang mencetak nama Anda selama seratus kali. Buat tiga versi program ini menggunakan while loop, do while dan for-loop.
6.5.4Perpangkatan
Hitung pangkat sebuah nilai berdasarkan angka dan nilai pangkatnya. Buat tiga versi dari program ini menggunakan while loop, do-while dan for-loop.

Pengenalan Pemrograman 1 19

Tag Cloud