JAVA Training Module October 2010 For the latest information, please see bluejack.binus.ac.id
Information in this document, including URL and other Internet Web site references, is subject to change without notice. This document supports a preliminary release of software that may be changed substantially prior to final commercial release, and is the proprietary information of Binus University. This document is for informational purposes only. BINUS UNIVERSITY MAKES NO WARRANTIES, EITHER EXPRESS OR IMPLIED, AS TO THE INFORMATION IN THIS DOCUMENT. The entire risk of the use or the results from the use of this document remains with the user. Complying with all applicable copyright laws is the responsibility of the user. Without limiting the rights under copyright, no part of this document may be reproduced, stored in or introduced into a retrieval system, or transmitted in any form or by any means (electronic, mechanical, photocopying, recording, or otherwise), or for any purpose, without the express written permission of Binus University. Binus University may have patents, patent applications, trademarks, copyrights, or other intellectual property rights covering subject matter in this document. Except as expressly provided in any written license agreement from Binus University, the furnishing of this document does not give you any license to these patents, trademarks, copyrights, or other intellectual property. Unless otherwise noted, the example companies, organizations, products, domain names, email addresses, logos, people, places and events depicted herein are fictitious, and no association with any real company, organization, product, domain name, email address, logo, person, place or event is intended or should be inferred. © 2010 Binus University. All rights reserved. The names of actual companies and products mentioned herein may be the trademarks of their respective owners.
TABLE OF CONTENT Contents TABLE OF CONTENT ................................................................................................... 3 OVERVIEW ................................................................................................................ 5 OBJECTIVE ................................................................................................................ 8 SYSTEM REQUIREMENT ............................................................................................... 9 Java Console ........................................................................................................... 14 Module 01 - Java Introduction ................................................................................. 14 Java Console ........................................................................................................... 34 Module 02 - Tipe Data & Input Output Operation ....................................................... 34 Java Console ........................................................................................................... 42 Module 03 – Arithmetic Operation............................................................................ 42 Java Console ........................................................................................................... 45 Module 04 - Selection Controlling Structure .............................................................. 45 Java Console ........................................................................................................... 50 Module 05 - Loop Controlling Structure and Jump Operation ....................................... 50 Java Console ........................................................................................................... 59 Module 06 - Array.................................................................................................. 59 Java Console ........................................................................................................... 65 Module 07 - Method ............................................................................................... 65 Java Console ........................................................................................................... 68 Module 08 - Sorting ............................................................................................... 68 Java Console ........................................................................................................... 71 Module 09 – Java Utilization.................................................................................... 71 Java Console ........................................................................................................... 76 Module 10 – Class and Object ................................................................................. 76 Java Console ........................................................................................................... 84 Module 11 - String ................................................................................................. 84 Java Console ........................................................................................................... 89 Module 12 - Wrapper & Math Class .......................................................................... 89 Java Console ........................................................................................................... 93 Module 13 – Inheritance ......................................................................................... 93 Java Console ........................................................................................................... 97 Module 14 - Polymorphism ..................................................................................... 97 Java Console ........................................................................................................... 99 Module 15 – Abstract and Interface ......................................................................... 99
Java Console ......................................................................................................... 107 Module 16 – ArrayList dan Vector .......................................................................... 107 Java Console ......................................................................................................... 112 Module 17 – File Access ....................................................................................... 112 Java Console ......................................................................................................... 114 Module 18 – Operating File ................................................................................... 114 Java Console ......................................................................................................... 117 Module 19 - Package ............................................................................................ 117 Java Console ......................................................................................................... 121 Module 20 - Thread ............................................................................................. 121
OVERVIEW Modul ini membahas tentang bahasa Java, dimulai dari dasar sampai dengan materi Threading. Materi yang diajarkan meliputi : 1.
Java Introduction Mengenal IDE Eclipse Mengenal IDE NetBeans Mengenal Java Memperbaiki kesalahan sintaks dasar pada source code Meng-compile, run, dan debug program
2.
Tipe Data & Input Output Operation Mengenal tipe data primitf: boolean, byte, char, int, long, float, dan double Mengenal tipe data abstract: String Penyimpanan data ke dalam variabel Type casting Membuat program dengan sintaks dasar I/O Format output
3.
Aritmethic Operation Operator penambahan Operator pengurangan Operator perkalian Operator pembagian Operator sisa hasil bagi Shorthand operator
4.
Selection Controlling Structure Konstruksi if dan if-else Konstruksi nested if-else dan switch-case Perbandingan String
5.
Loop Controlling Structure and Jump Operation Konstruksi while Konstruksi do-while Try and catch For Break, label dan continue
6.
Array Definisi dan karakteristik array Inisialisasi array Array dua dimensi
7.
Method Definisi fungsi Prototipe fungsi Jangkauan identifier Pengiriman parameter berupa tipe data primitif dan abstract (Array dan String) Return value tipe data primitif dan abstract (Array dan String) Overloading terhadap Fungsi
8.
Sorting Bubble sort Selection sort Insertion sort
9.
Java Utilization Pembangkit Bilangan Acak Menunda dan menghentikan program Calendar Input/Output Dialog Locale dan Formatter Exception Handling
10. Class and Object Kelas untuk sebuah Objek Constructor Access Modifier Method Static Variables Constants 11. String String Class - Constructor Method (length, charAt, concat, substring, toLowerCase, toUpperCase, trim, split) 12. Wrapper & Math Class Wrapper Class (Integer, Long, Boolean, Character, Byte, Float, Double, Short) Wrapper Method Konversi dengan Wrapper Class Math Class Math Method (round, random, ceil, floor, min, max, abs, exp, pow, sqrt) 13. Inheritance Superclass Subclass Keyword super Final Class 14. Polymorphism Polymorphism Overloading Overriding 15. Abstract and Interface Abstract Class and Method Interface 16. Array List and Vector ArrayList Class and Method Vector Class and Method 17. File Access Declaration and Constructor File Class
File Separator File Method ( exist, getName, getPath, getParent, isFile, lastModified, length, renameTo )
18. Operating File Tulis file ( PrintWriter ) Baca file ( Scanner ) FileWriter BufferedWriter 19. Package Creating and Naming Package Using Package 20. Thread Thread Why Multithreading? Create and Start a Thread Sleeping Thread Runnable vs. Thread Class Pada modul ini semua bahan diambil dari bahan materi yang akan diajarkan dalam Training tahap I, disertai dengan teori dan contoh program agar pembaca dapat mencoba sendiri code yang ada. Pada Modul ini pembahasan sudah diurutkan dari materi yang paling dasar sehingga pembaca akan semakin mudah mempelajari materi-materi yang ada.
OBJECTIVE
Diharapkan trainee dapat mengerti tentang dasar-dasar dalam java dan dapat mengimplementasikannya dalam suatu program sederhana. Diharapkan trainee dapat mengerti tentang penggunaan tipe data & input output pada Java. Diharapkan trainee dapat mengerti tentang penggunaan operasi matematika pada Java. Trainee dapat menerapkan penggunaan seleksi dalam bahasa pemrograman Java Trainee dapat menggunakan perulangan dalam bahasa pemrograman java. Diharapkan trainee dapat mengerti tentang penggunaan dan cara pemakaian array dan dapat mengimplementasikannya dalam suatu program sederhana. Diharapkan trainee dapat mengimplementasikan cara penggunaan method di bahasa pemrograman java. Diharapkan trainee dapat mengerti tentang sorting dalam Java. Diharapkan trainee dapat mengerti dan dapat menggunakan class – class Utilisasi dalam package java.util. Diharapkan trainee dapat mengimplementasikan cara penggunaan class dan object di bahasa pemrograman java. Trainee dapat membuktikan kegunaan kelas String di Java Diharapkan trainee dapat mengerti dan dapat menggunakan Wrapper dan Math Class dalam Java. Diharapkan trainee dapat mengerti dan dapat menggunakan konsep Inheritance pada Java. Diharapkan trainee dapat mengerti dan dapat menggunakan konsep Polymorphism pada Java. Trainee dapat menemukan kegunaan dari kelas abstrak dan interface dalam bahasa pemograman Trainee dapat menerapkan konsep penggunaan ArrayList dan Vector dalam bahasa pemograman
Diharapkan trainee dapat mengerti tentang cara akses ke file melalui Java. Diharapkan trainee dapat mengerti dan memanipulasi data dalam file menggunakan Java. Diharapkan trainee dapat mengimplementasikan cara penggunaan package di bahasa pemrograman java. Diharapkan trainee dapat mengerti dan menggunakan Threading dalam Java.
SYSTEM REQUIREMENT Software yang digunakan untuk editor, compiler, run, debug :
jdk-6u20-windows-i586.exe / jre-6u20-windows-i586-s.exe Textpad Notepad++ Eclipse Netbeans
Sistem Operasi dan spec-nya :
Platform
Version Memory Browsers
Diskspace
Solaris SPARC 32-bit and 64-bit SPARC 32bit
SPARC 64bit
Solaris 10
64mb
Solaris 9
64mb
Solaris 8
64mb
Solaris 10
64mb
Solaris 9
64mb
Solaris 8
64mb
Mozilla 1.4+, 1.7+
32-bit Install 65 MB 64-bit Install 29 MB
Mozilla 1.4+, 1.7+
64-bit Install (no Java Plug-in, Java WebStart support) 53 MB
Solaris x86 32 bit and 64 bit Solaris x86 32-bit
Solaris x86 64-bit
Solaris 10
64mb
Solaris 9
64mb
Solaris 8
64mb
Solaris 10
64mb
Mozilla 1.4+, 1.7+
32-bit Install 53 MB
Mozilla 1.4+, 1.7+
64-bit Install (no Java Plug-in, Java WebStart support) 53 MB
Windows system requirements
Platform
Version
Memory
Browsers
Diskspace
Windows (32-bit) Windows x86 Windows 7
Windows Vista
Windows Server 2008
128mb
IE 7 or IE 8 Firefox 2, Firefox 3.0.x, Firefox 3.5.x, or Firefox 3.6
128mb
IE 7 or IE 8 Firefox 2, Firefox 3.0.x, Firefox 3.5.x, or Firefox 3.6
Windows XP
64mb
IE 6 SP1, IE 7 or IE 8 Firefox 2, Firefox 3.0.x, Firefox 3.5.x, or Firefox 3.6
Windows 2000
64mb
IE 5.5 or IE 6 Mozilla 1.4, Mozilla 1.7, Firefox 2
128mb
IE 7 or IE 8 Firefox 2, Firefox 3.0.x, Firefox 3.5.x, or Firefox 3.6
128mb
IE 8 Firefox 2, Firefox 3.0.x, Firefox 3.5.x, or Firefox 3.6
128mb
IE 8 Firefox 2, Firefox 3.0.x, Firefox 3.5.x, or Firefox 3.6
Windows Vista
128mb
IE 7 or IE 8 Firefox 2, Firefox 3.0.x, Firefox 3.5.x, or Firefox 3.6
Windows XP
128mb
IE 6 SP1, IE 7 or IE 8
Windows Server 2003 Windows x64 32-bit mode
128mb
IE 8 Firefox 2, Firefox 3.0.x, Firefox 3.5.x, or Firefox 3.6
Windows 7
Windows Server 2008
98 MB
98 MB
Firefox 2, Firefox 3.0.x, Firefox 3.5.x, or Firefox 3.6 Windows Server 2003
128mb
IE 7 or IE 8 Firefox 2, Firefox 3.0.x, Firefox 3.5.x, or Firefox 3.6 Windows 64-bit
Windows x64 64-bit mode
Windows 7
128mb
Windows Server 2008
128mb
64-bit OS, 32-bit Browsers: Firefox 2, Firefox 3.0.x, Firefox 3.5.x, or Firefox 3.6 64-bit OS, 64-bit Browsers: IE 8 64-bit OS, 32-bit Browsers: Firefox 2, Firefox 3.0.x, Firefox 3.5.x, or Firefox 3.6 64-bit OS, 64-bit Browsers: IE 8 98 MB
Windows Vista
128mb
Windows XP
128mb
64-bit OS, 32-bit Browsers: IE 6 SP1, IE 7, or IE 8, Mozilla 1.4.X or 1.7, Netscape 7.x, Firefox 1.06 - 3.0.x, Firefox 3.5.x, or Firefox 3.6 64-bit OS, 64-bit Browsers: IE 7 or IE 8 64-bit OS, 32-bit Browsers: IE 6 SP1, IE 7, or IE 8, Mozilla 1.4.X or 1.7, Netscape 7.x,
Windows 2003
128mb
Firefox 1.06 - 3.0.x, Firefox 3.5.x, or Firefox 3.6 64-bit OS, 64-bit Browsers: IE 7 or IE 8 64-bit OS, 32-bit Browsers: IE 6 SP1, IE 7, or IE 8, Mozilla 1.4.X or 1.7, Netscape 7.x, Firefox 1.06 - 3.0.x, Firefox 3.5.x, or Firefox 3.6 64-bit OS, 64-bit Browsers: IE 7 or IE 8
Linux system requirements
Platform
Version
Memory
Browsers
Diskspace
LINUX 32-bit Intel IA32 Red Hat 9.0
64mb
Red Hat 2.1, Red Hat Enterprise 64mb Linux 3.0, 4.0 Suse Enterprise Linux Server 8, Suse Enterprise Linux Server 9, 64mb Suse Enterprise Linux Server 10, Suse Enterprise Linux Desktop Turbo Linux 10 64mb (ONLY Chinese
Mozilla 1.4+
58 MB
and Japanese Locale. No english.) LINUX 64-bit Linux 64- Suse Enterprise Linux Server 8, bit Suse Enterprise Linux Server 9, 64mb Suse Enterprise Linux Server 10, Suse Enterprise Linux Desktop Red Hat Enterprise Linux 3.0, 4.0
64bit OS, 32bit JRE: Mozilla 1.4.x or 1.7+, Firefox 1.06+ 64bit OS, 64bit JRE: N/A
56 MB
Java Console Module 01 - Java Introduction
Last Update 09/10/2010
Revision 0
1. Module Description Pada pembahasan ini, akan dibahas tentang pengenalan IDE Eclipse dan Netbeans, pengenalan java, sintaks dasar pada source code, dan meng-compile, run, serta debug program. 2. Learning Outcomes Diharapkan trainee dapat mengerti tentang dasar-dasar dalam java dan dapat mengimplementasikannya dalam suatu program sederhana. 3. Material a. IDE Eclipse Eclipse dibuat oleh sebuah komunitas open source dan digunakan sebagai IDE untuk java atau android sebagai sebuah platform untuk mengembangkan aplikasi Eclipse RCP, dll. Installation and start Eclipse Untuk memulai Eclipse, double click pada file eclipse.exe. Sistem akan mengingatkan untuk tempat workspace. Workspace adalah tempat penyimpanan project Java yang dibuat.
Eclipse akan berjalan dan menunjukkan halaman welcome. Tutup halaman welcome dengan menekan tanda ―X‖ di sebelah welcome.
Create Project File → New → JPA Project. Masukkan nama untuk project yang ingin dibuat.
Tekan finish untuk membuat project.
Create Package Dari folder src, klik kanan lalu pilih New → Package.
Create Java Class Klik kanan pada package yang dibuat dan pilih New → Class. Masukkan nama Class yang ingin dibuat lalu di-Finish.
Run Project in Eclipse Klik kanan pada Java Class yang ingin dijalankan. Pilih Run As → Java Application (Alt + Shift + X, J). Create Jar File Pilih Project yang ada, klik kanan dan pilih Export.
Beri nama pada JAR file, kemudian klik Finish.
b. IDE Netbeans Netbeans IDE adalah sebuah open source yang terintegrasi dengan pengembangan environment. Netbeans IDE mendukung pengembangan semua tipe aplikasi Java (Java SE, JavaFX, Java ME, web, EJB, dan aplikasi mobile). Semua fungsi IDE disediakan oleh modul. Sebuah modul adalah suatu arsip Java (Java archive) yang memuat kelas-kelas Java untuk
berinteraksi
dengan
NetBeans
Open
API
dan
file
manifestasi
yang
mengidentifikasinya sebagai modul. Pengembangan NetBeans diawali dari Xelfi, sebuah proyek trainee tahun 1997 di bawah bimbingan Fakultas Matematika dan Fisika Universitas Charles, Praha. Sebuah perusahaan kemudian dibentuk untuk proyek tersebut dan menghasilkan versi komersial NetBeans IDE hingga kemudian dibeli oleh Sun Microsystem pada tahun 1999. Sun kemudian menjadikan NetBeans open source pada bulan Juni tahun 2000. Sejak itu komunitas NetBeans terus berkembang.
Create New Project File → New Project.
Beri nama untuk project. Klik Finish.
Contoh penggalan kodingan :
Klik F6 untuk menjalankan project
c. Pengenalan Java Sejarah singkat java Java mulanya diciptakan sebagai programming tool untuk GreenProject oleh Patrick Naughton, Mike Sheridan, dan
James Gosling dari Sun pada tahun 1991. Green
Project terdiri dari 13 orang yang merupakan tim dari sun untuk mengantisipasi dan merencanakan ―next wave‖ dalam dunia komputer. Fokusnya adalah pada digitally controlled consumer devices dan komputer. Setelah 18 bulan bekerja, pada tahun 1992, mereka mengeluarkan suatu Set-Top TV interaktif dengan touchscreen yang disebut *7 (star seven). Pada *7 ini juga pertama kali dikenalan duke (maskot java). *7 memiliki cangkupan platform dan device lebih luas dibandingkan product serupa dikarenakan *7 dikerjakan menggunakan suatu processor-independent language yang diciptakan oleh James Gosling. Gosling menamakan bahasa ini dengan Oak, yang berasal dari pohon Oak yang berada di luar jendela kantornya. Karena nama Oak telah digunakan sebagai nama product lain, maka Oak pun berganti nama menjadi Java. Nama java sendiri tidak terlalu jelas berasal darimana. Beberapa sumber mengatakan Java berasal dari kopi jawa tetapi versi cerita
yang berkaitan juga beragam. Ada yang mengatakan kopi tumbuk jawa adalah kopi kesukaan James Gosling. Ada jg mengatakan nama Java didapat pada saat mereka sedang ngopi di suatu cafe. Versi hancurnya, diceritakan para pengembangan Java bertualang di pulau Jawa dan di akhir petualangannya mereka minum kopi (beneran nih??). Sumber lain mengatakan nama Java didapat dari daftar nama-nama random, dan nama Java dipilih karena kedengaran keren. Spekulasi lain mengatakan bahwa nama java didapat dari inisial beberapa individu yang berperan dalam project yaitu
James gosling, Arthur Van hoff, Andy
bechtolsheim. Pada perkembangan selanjutnya GreenProject berubah menjadi FirstPerson dan personilnya pun bertambah menjadi 70 orang. FirstPerson mulai memasarkan produk sejenis dengan *7 tetapi mereka mengalami kegagalan. Pada saat itu internet mulai berkembang, melihat adanya kecocokan dengan visi java, kemudian mereka melanjutkan project dengan membuat browser berdasarkan browser mosaic (web browser pertama) yang mereka namakan WebRunner. WebRunner sendiri merupakan web browser pertama yang dapat menampilkan animasi (applet). Kemudian WebRunner berubah nama menjadi HotJava Setelah
kesuksesan
HotJava
TM
,
pada
pertengahan
tahun
TM
1995,
. Netscape
mengumumkan akan menggunakan Java di dalam browser mereka. Java menjadi semacam standar di internet dan terus berkembangan sampai sekarang. Java Virtual Machine (JVM) dan ByteCode Kebanyakan programming language meng-compile source code menjadi bahasa mesin yang dieksekusi diatas arsitektur microprosesor atau sistem operasi tertentu. Java mengubah source code menjadi bytecode dan Physical Machine Java Virtual Machine
bytecode
dieksekusi
diatas
suatu
arsitektur
microprocessor khusus. Dan Java Virtual Machine (JVM)
berguna untuk menyediakan arsitektur ini
dalam processor di CPU kita (a machine within a machine).
Bytecode yang tercipta ini nantinya akan
berbentuk sebuah file yang berekstensi .class. Ini sebabnya java dapat dijalankan di berbagai platform tanpa harus memperhatikan spesifikasi hardware tertentu. Jika ada JVM maka bytecode dapat dijalankan dan dieksekusi layaknya program biasa. Jadi Java Virtual Machine bertanggung jawab untuk menginterpretasikan bytecode, dan menerjemahkannya menjadi action atau system call.
Java Runtime Environment (JRE) JAVA API CLASESS JAVA VIRTUAL MACHINE
OPERATING SYSTEM
HARDWARE
Simple Program
Beberapa hal yang perlu diperhatikan adalah: 1.
Nama file source code yang dibuat harus memiliki nama yang smaa dengan nama kelas di source code it. Bila dalam satu source code terdapat banyak class maka, yang diutamakan adalah class yang memiliki access public, dan di tiap source code hanya bisa terdapat satu buah public class. Jadi dalam kasus ini, simpan file dengan nama Simple.java sesuai dengan nama public class-nya. (Karena java case-sensitive jadi kita harus memperhatikan huruf kapital pada penamaan file).
2.
Sama seperti pada C/C++, eksekusi program pertama kali dimulai di fungsi main(), tetapi fungsi main() di java harus ditambah modifier public, modifier static dan mempunyai passing parameter berupa array of String. Akan dijelaskan lebih lanjut.
3.
System.out.println() adalah standar output di java. Akan dijelaskan lebih lanjut.
Compile dan Running Java Untuk dapat membuat program berbasis java, kita harus sudah menginstall Java Development Kit (JDK) di komputer kita. Di dalam JDK inilah terdapat berbagai tools yang berhubungan dengan pembuatan program berbasis java. Selain itu bila kita menginstall JDK ini, maka secara otomatis Java Runtime Environment juga akan terinstall, sehingga kita bisa menjalankan berbagai program berbasis java. Untuk mengcompile source code yang telah kita buat, kita dapat menggunakan tool yang telah disediakan oleh JDK yaitu javac. Perintahnya untuk menjalankannya adalah javac [namaFile] Contoh : javac Simple.java
Setelah dicompile akan tercipta file baru berekstensi .class (bytecode).
Sedang untuk menjalankannya kita menggunakan java [namaFile]. Contoh : java Simple
Bila kita menggunakan textpad sebagai editor, kita dapat mengatur konfigurasi textpad sehingga kita dapat mengompile dan running java melalui textpad.
Caranya, dari menu Configure, pilih Preferences. Lalu di kolom sebelah kiri, pilih menu Tools. Setelah itu, bila JDK telah terinstall dengan baik di komputer anda maka anda dapat menambahkan menu Java SDK Commands di komputer anda.
Selanjutnya kita cukup menggunakan Ctrl + 1 untuk compile dan Ctrl + 2 untuk running. CLASSPATH Classpath adalah path dimana JRE (Java runtime environment) akan mencari class dan file lainnya. Berikut adalah beberapa cara untuk menambahkan classpath: 1.
Dengan menggunakan option –classpath atau –cp C:> sdkTool -classpath classpath1;classpath2...
2.
Dengan mengupdate variable CLASSPATH C:> set CLASSPATH=classpath1;classpath2..
JDK Tool Berikut ini adalah daftar beberapa daftar JDK tool yang sering dipakai: Tool
Deskripsi
javac
Java Compiler
Java
Java Launcher
javadoc
API documentation generator.
appletviewer
Run and debug applets without a web browser.
javap
Class file disassembler
Jar
Create and manage Java Archive (JAR) files.
Comment di java Yang dimasksud dengan comment di sini adalah
codingan atau tulisan dalam file
source code yang nantinya akan diabaikan dan tidak dijalankan. Java mengenali 3 jenis comment: 1.
Single Line comment Diawali dengan //
2.
Multi Line comment Diawali dengan /* dan diakhir oleh */
3.
Documentation comment Diawali dengan /** dan diakhir oleh */ Comment ini digunakan untuk membuat API dengan menggunakan javadoc.
Variable Sama seperti C/C++, java adalah
strongly typed language, jadi semua variable
harus dideklarasi terlebih dahulu sebelum digunakan. int n = 1; Tipe data di Java dikategorikan menjadi 2 kategori yaitu: 1. Primitive Types. boolean, byte, char, short, int, long, float, double 2. References Types Objek atau instance dari suatu kelas.
Berikut adalah tipe data primitif yang bisa kita digunakan di Java: Data
bi
type
t
Value
boolean
by default
true / false
false
-128 to +127
0
byte
8
short
16
-32,769 to 32,767
0
int
32
-2,147,483,648 to +2,147,483,647
0
long
64
char
16
float
32
0.0f
double
64
0.0d
-9,223,372,036,854,775,808 to +9,223,372,036,854,770,000 '\u0000' to '\uFFFF'
keterangan
0L '\u0000'
ISO Unicode Character Set
Aturan Penamaan Variable: 1. Case sensitive 2. Diawali oleh huruf, $ (dollar sign), atau _ (underscore), tapi variable yang diawali dengan $ dan _ jarang digunakan. 3. Berikutnya dapat menggunakan huruf, angka, $, atau _ (underscore). 4. Tidak boleh ada white space (spasi, tab, dll). 5. Tidak boleh menggunakan keyword sebagai nama variable. Berikut adalah daftar keyword di java: abstract
continue
for
New
Switch
assert
default
goto
Package
Synchronized
boolean
do
if
private
This
break
double
implements
protected
Throw
byte
else
import
public
Throws
case
enum
instanceof
return
Transient
catch
extends
int
short
Try
char
final
interface
static
Void
class
finally
long
strictfp
Volatile
const
float
native
super
While
6. Aturan di bawah ini tidak akan menyebabkan error atau warning, tetapi lebih merupakan kebiasaan yang banyak dipakai:
-
Jika nama variable mengandung 1 kata, gunakan huruf kecil. Cth: jumlah, dll.
-
Jika mengandung 2 kata, maka huruf pertama dari kata kedua dan berikutnya huruf kapital. Cth: jumlahDicut, jumlahAsistenDiterima, dll.
-
Jika variable tersebut konstanta, gunakan huruf kapital. Cth: THRESHOLD, SPEED, dll. Literal Literal adalah bagian dari code yang merepresentasikan suatu nilai (fixed value). Literal yang digunakan pada Java kurang lebih hampir sama pada C++. Cth: boolean result = true; char capitalC = 'C'; byte b = 100; short s = 10000; int i = 100000; Untuk tipe data byte, short, int, dan long dapat berupa decimal, octal dan hexadecimal:
Prefix 0 menandakan octal.
Prifix 0x menandakan hexadecimal.
Contoh: int decVal = 26;
// The number 26, in decimal
int octVal = 032;
// The number 26, in octal
int hexVal = 0x1a;
// The number 26, in hexadecimal
Untuk tipe data float dan double dapat menggunakan E atau e (untuk scientific notation), F atau f (untuk float) dan D atau d (untuk double). Contoh: double d1 = 123.4; double d2 = 1.234e2; /* same value as d1, but in scientific notation */ float f1 = 123.4f;
Gunakan 'single quotes' untuk char dan "double quotes" untuk String. Berikutnya, ada beberapa karakter di java yang dalam penggunaannya di dalam String harus menggunakan tambahan karakter escape sequence (‗\‘) Escape sequence di java: \b
backspace
\t
tab
\n
line feed
\f
form feed
\r
carriage return
\"
double quote
\'
single quote
\\
backslash
Untuk references data type, dapat menggunakan null biasanya untuk menandakan bahwa object belum digunakan.
Java Console Module 02 - Tipe Data & Input Output Operation
Last Update 09/10/2010
Revision 0
1. Module Description Pada pembahasan ini, akan dibahas tentang Tipe data & input output operation pada Java. 2. Learning Outcomes Diharapkan trainee dapat mengerti tentang penggunaan tipe data & input output pada Java. 3. Material a. Tipe data primitif: boolean, byte, char, int, long, float, dan double Variabel adalah suatu nama yang digunakan untuk menyimpan suatu nilai dari tipe data tertentu. Nilai dari suatu variabel disebut literal. Sebelum digunakan variabel harus dideklarasikan. Deklarasi disesuaikan dengan tipe data yang ingin direpresentasikan. Deklarasi variabel dan konstanta membutuhkan tipe data tertentu. Java memiliki delapan tipe data primitif, sedangkan untuk tipe data kelas jumlahnya tak terhingga (karena bisa kita definisikan sendiri). Delapan tipe data primitif ini sangat fundamental karena ia sebagai dasar untuk membangun tipe data kelas. Kedelapan tipe data primitif tersebut bisa digolongkan kedalam tipe data numerik (untuk mengolah nilai-nilai yang berupa angka), tipe data boolean (berisi nilai benar dan salah – 0 dan 1), dan tipe data karakter huruf. Tipe data numerik dibagi menjadi dua, yakni tipe data untuk menyimpan bilangan bulat dan tipe data untuk menyimpan bilangan pecahan. Berikut tipe data primitif (dasar) dalam java :
Numerik Bilangan Bulat : byte (panjangnya 1 byte = 8 bit), menampung nilai dari -128 sd 127. Memiliki nilai default 0 –> artinya jika tidak diinisialisasi (diberi nilai awal) variabel yang menggunakan tipe data ini bernilai 0. short (panjangnya 2 byte = 16 bit), menampung nilai dari -32,768 sd 32,767. Nilai default juga 0.
int (panjangnya 4 byte = 32 bit), menampung nilai dari -2,147,483,648 sd 2,147,483,647. Nilai default 0. long (panjangnya 8 byte = 64 bit), menampung nilai dari 9,223,372,036,854,775,808 sd 9,223,372,036,854,775,807. Nilai default 0.
Numerik Bilangan pecahan : float (panjangnya 4 byte), menampung nilai dari -3.4E38 (-3.4 * 10 pangkat 38) sd +3.4E38. Memiliki presisi angka sampai 7 digit (0.xxxxxxx) double (panjangnya 8 byte), menampung nilai dari -1.7E308 (-1.7 * 10 pangkat 308) sd +1.7E308. Memiliki presisi angka sampai 17 digit (0.xxxxxxxxxxxxxxxxx) char : tipe data untuk menampung nilai dari satu karakter (bisa berupa huruf atau angka). boolean : tipe data untuk menampung nilai benar (true) atau salah (false). Data type
bit
boolean
Value
by default
true / false
false
-128 to +127
0
-32,769 to 32,767
0
byte
8
short
16
int
32
long
64
char
16
float
32
0.0f
double
64
0.0d
-2,147,483,648 to
keterangan
0
+2,147,483,647 -9,223,372,036,854,775,808 to +9,223,372,036,854,770,000 '\u0000' to '\uFFFF'
0L '\u0000'
ISO Unicode Character Set
b. Tipe data abstract : String String merupakan untaian huruf dan angka yang tersusun menjadi satu kalimat. Dalam bahasa java, string bukan merupakan tipe primitif, tetapi merupakan kelas. String pada java tidak disimpan dalam bentuk array seperti pada C. Java menyediakan beberapa metoda untuk melakukan penggabungan, modifikasi, atau perbandingan. String ditulis di antara dua tanda petik ganda seperti contoh berikut. String text = ―Adidas x Nike ‖; Untuk
mengkonversi
string
menjadi
angka
dapat
menggunakan
Integer.parseInt(s) untuk int dan Double.parseDouble(s) untuk double.
String a = "13"; int angka = Integer.parseInt(a);
c. Aturan Penamaan Variabel 7. Case sensitive 8. Diawali oleh huruf, $ (dollar sign), atau _ (underscore), tapi variable yang diawali dengan $ dan _ jarang digunakan. 9. Berikutnya dapat menggunakan huruf, angka, $, atau _ (underscore). 10. Tidak boleh ada white space (spasi, tab, dll). 11. Tidak boleh menggunakan keyword sebagai nama variable. Berikut adalah daftar keyword di java: abstract
continue
for
New
Switch
assert
default
goto
Package
Synchronized
boolean
do
if
private
This
break
double
implements
protected
Throw
byte
else
import
public
Throws
case
enum
instanceof
return
Transient
catch
extends
int
short
Try
char
final
interface
static
Void
class
finally
long
strictfp
Volatile
const
float
native
super
While
12. Aturan di bawah ini tidak akan menyebabkan error atau warning, tetapi lebih merupakan kebiasaan yang banyak dipakai: -
Jika nama variable mengandung 1 kata, gunakan huruf kecil. Cth: jumlah, dll.
-
Jika mengandung 2 kata, maka huruf pertama dari kata kedua dan berikutnya huruf kapital. Cth: jumlahDicut, jumlahAsistenDiterima, dll.
-
Jika variable tersebut konstanta, gunakan huruf kapital. Cth: THRESHOLD, SPEED, dll.
d. Literal Literal adalah bagian dari code yang merepresentasikan suatu nilai (fixed value). Literal yang digunakan pada Java kurang lebih hampir sama pada C++.
Cth: boolean result = true; char capitalC = 'C'; byte b = 100; short s = 10000; int i = 100000;
Untuk tipe data byte, short, int, dan long dapat berupa decimal, octal dan hexadecimal:
Prefix 0 menandakan octal.
Prifix 0x menandakan hexadecimal.
Contoh: int decVal = 26;
// The number 26, in decimal
int octVal = 032;
// The number 26, in octal
int hexVal = 0x1a;
// The number 26, in hexadecimal
Untuk tipe data float dan double dapat menggunakan E atau e (untuk scientific notation), F atau f (untuk float) dan D atau d (untuk double). Contoh: double d1 = 123.4; double d2 = 1.234e2; /* same value as d1, but in scientific notation */ float f1
= 123.4f;
Gunakan 'single quotes' untuk char dan "double quotes" untuk String.
Escape sequence di java: \b
backspace
\t
tab
\n
line feed
\f
form feed
\r
carriage return
\"
double quote
\'
single quote
\\
backslash
Untuk references data type, dapat menggunakan null biasanya untuk menandakan bahwa object belum digunakan. e. Standart I/O Java Untuk program yang berjalan di command line, input output dapat dilakukan dengan 2 cara yaitu dengan menggunakan Standard Stream yang sudah ada atau dengan menggunakan Console.
Standart Stream Standard stream sudah didefinisi secara otomatis dan tidak perlu dibuka. Ada 3 standard I/O di java: 1. System.out
(standard output stream)
Berkorespodensi dengan display atau output device lainnya yang telah ditentukan oleh host environment. 2. System.in
(standard input stream)
Berkorespodensi dengan keyboard atau input device lainnya yang telah ditentukan oleh host environment. 3. System.err
(standard error stream)
Secara umum ini adalah output stream untuk menampilkan error atau informasi lain. System.out dan System.err merupakan objek dari PrintStream. System.out.print("text"); System.out.println("text");
Untuk hasil output yang lebih komplek, kita bisa menggunakan printf atau format. System.out.format("integer %d float %f string %s", varInt,varFloat,varString); Karakter khusus seperti
%d yang digunakan untuk format variable, kita
menyebutnya sebagai format specifier. Format specifier dimulai dengan persen (%) dan diakhir oleh converter.
Berikut adalah daftar converter yang sering digunakan. 'b',
boolean
'B' 's',
string
'S' 'c',
unicode character
'C' 'd'
decimal
'o'
octal
'x',
hexadecimal
'X' 'e',
scientific notation
'E' 'f'
floating-point
'%'
%
'n'
new line
Converter juga dapat ditambah flag atau specifier tambahan. 08
panjang 8 karakter, dan sisanya diisi dengan 0
+
menampilkan
-
rata kiri
.3
3 angka dibelakang koma
10.3
10 karakter, rata kanan, dan 3 angka dibelakang koma
Contoh: long n = 461012;
System.out.format("%d%n", n); // --> "461012" System.out.format("%08d%n", n); // --> "00461012" System.out.format("%+8d%n", n); // --> " +461012" System.out.format("%,8d%n", n); // --> " 461,012" System.out.format("%+,8d%n%n", n); // --> "+461,012" double pi = Math.PI; System.out.format("%f%n", pi); // --> "3.141593" System.out.format("%.3f%n", pi); // --> "3.142" System.out.format("%10.3f%n", pi); // --> " 3.142" System.out.format("%-10.3f%n", pi); // --> "3.142" Untuk help bisa dilihat java API doc di java.util.Formatter.
System.in merupakan objek dari InputStream. InputStream tidak menyediakan fitur untuk mengelola karakter sehingga kita harus menggunakan kelas lain seperti Scanner atau InputStreamReader untuk dapat menggunakan System.in. Scanner scan = new Scanner(System.in); int input = scan.nextInt();
Karena
keterbatasan
method
dari
InputStreamReader, kita
menggunakan
BufferedReader untuk memudahkan kita dalam coding. InputStreamReader reader = new InputStreamReader(System.in); BufferedReader br = new BufferedReader(reader); String input = br.readLine();
Jangan
lupa
untuk
mengimport
java.io.InputStreamReader,
java.io.BufferedReader, atau java.util.Scanner. (package akan dijelaskan dilanjut).
Console Selain menggunakan standard stream, kita dapat menggunakan console untuk output input. Console console = System.console(); Kelas console berada di package java.io.
console menyediakan fungsi format dan printf untuk output sama seperti pada System.out. Console console = System.console();
console.format("kucing punya %d nyawa",9);
Untuk input dapat menggunakan readline(). Console console = System.console(); String input = console.readLine();
Pada console terdapat fungsi readPassword untuk menerima inputan seperti password. readPassword sama seperti println pada System.out tetapi tidak menampilkan apa yang kita ketik di layar dan mengembalikan array karakter sehingga tidak dapat di overwrite. Console console = System.console(); String password = console.readPassword();
f.
Type Casting Guna dari type casting adalah dimana kita ingin mengubah suatu tipe data menjadi tipe data lainnya. public class Test{ public static void main(String args[]) { float number1 = 3.33f; int number2 = (int)number1; System.out.println(number1); System.out.println(number2); } }
Dari code diatas disimpulkan tipe data float number1 ditype cast menjadi tipe data primitif int. Type cast tidak hanya berlaku untuk tipe data primitif. Kita juga bisa melakukan type cast pada object.
Java Console Module 03 – Arithmetic Operation
Last Update 09/10/2010
Revision 0
1. Module Description Pada pembahasan ini, akan dibahas tentang Operasi matematika dalam Java. 2. Learning Outcomes Diharapkan trainee dapat mengerti tentang penggunaan operasi matematika pada Java. 3. Material a. Arithmetic Operation Arithmetic Operation digunakan untuk melakukan operasi matematika, seperti penambahan, pengurangan, pembagian, dan modulus (atau sisa pembagian), namun bisa juga digunakan untuk menggabungkan string . Contoh penggunaan: Simbol + * / % +
Nama Operator Penjumlahan Pengurangan Perkalian Pembagian Modulus Penggabungan String
Contoh a = b + c a = b - c a = b * c a = b / c a = b % c a = “Hello “ + “World”
Contoh program : import java.util.*; public class Test{ public static void main(String args[]) { int a,b; Scanner scan = new Scanner(System.in); System.out.print("Input Nilai a "); a = scan.nextInt();
System.out.print("Input Nilai b "); b = scan.nextInt(); System.out.println("a + b = "+(a+b)); System.out.println("a - b = "+(a-b)); System.out.println("a * b = "+(a*b)); System.out.println("a / b = "+(a/b)); System.out.println("a & b = "+(a%b)); System.out.println("Penggabungan String a & b = "+a+b); } }
b. Shorthand operator Shorthand operator penulisan operator matematika yang disingkat. Digunakan untuk melakukan increment atau decrement. Simbol --
++
Fungsi Mengurangi Nilai operator yang tersimpan pada memori yang akan berubah pada eksekusi berikutnya Mengurangi nilai operator secara langsung tanpa harus menunggu eksekusi berikutnya Menambah Nilai operator yang tersimpan pada memori yang akan berubah pada eksekusi berikutnya Menambah nilai operator secara langsung tanpa harus menunggu eksekusi
Contoh i--
--i
i++
++i
berikutnya
Java Console Module 04 - Selection Controlling Structure
Last Update <
>
Revision <>
1. Module Description Pada pembahasan topik ini, akan dibahas tentang definisi dari seleksi dan cara penggunaan seleksi untuk bahasa pemrograman java. 2. Learning Outcomes Trainee dapat menerapkan penggunaan seleksi dalam bahasa pemrograman Java 3. Material a. Definisi Seleksi digunakan dalam suatu bahasa pemrograman untuk mengecek suatu kondisi logika yang diinginkan. Di dalam bahasa java terdapat 3 jenis seleksi yaitu menggunakan if-else, switch-case, dan menggunakan ternary. b. if-else statement: class IfElseDemo{ public static void main(String[] args){ //memberikan nilai awal untuk variable testscore int testscore = 76; char grade; //jika testscore lebih besar atau sama dengan 75 //maka grade menjadi A if (testscore >=85){ grade = 'A'; } //jika kondisi diatas tidak benar, akan dijalankan //seleksi berikutnya, dengan prinsip yang sama else if (testscore >=75){ grade = 'B'; } //begitu pula dengan yang lainnya else if (testscore >=65){ grade = 'C'; } else if (testscore >=55){ grade = 'D'; } else { grade = 'E';
} //print hasil sesuai dengan grade yang diperoleh System.out.println("Grade = " + grade); } }
Baris coding di atas ingin mengecek apakah grade yang didapatkan jika score yang dimasukkan adalah 76, dengan melakukan pengecekan logika di setiap barisnya. Outputnya adalah sebagai berikut.
c. switch statement: Hanya bisa digunakan untuk byte, short, char, dan int dan enum (enum akan dijelaskan lebih lanjut). class SwitchDemo{ public static void main(String[] args){ int angka = 1; //memasukkan variable ke dalam switch, nantinya variable //ini yang akan dicek di baris berikutnya switch(angka){ //mengecek variable yang sudah dimasukkan //jika variable tadi (angka) = 0, maka dijalankan //seleksi ini case 0: System.out.println ("nol"); break; //jika 1 case 1: System.out.println ("satu"); break; //begitu juga seterusnya
case 2: System.out.println ("dua"); break; case 3: System.out.println ("tiga"); break; //akan masuk ke default: jika tidak ada yang memenuhi //kondisi-kondisi dari case yang diberikan sebelumnya default: System.out.println("bukan 0123"); } } }
Outputnya adalah sebagai berikut.
d. Ternary statement: Walaupun terlihat membingungkan saat pertama kali melihatnya, operator ternary memberikan kita keuntungan dalam membuat suatu perintah seleksi dengan lebih sedikit baris coding. Contoh seleksi if else sebelumnya yang dirubah menjadi ternary. class TernaryDemo{ public static void main(String[] args){ int score = 76; char grade; //cara penulisannya //(logika) ? (kondisi jika true) : (kondisi jika false) grade = score >= 85 ? 'A' : (score >=75 ? 'B' : (score >=65 ? 'C' : (score >=55 ? 'D' : 'E')));
System.out.println("Grade = " + grade); } }
Outputnya adalah sebagai berikut.
e. String comparison Tipe data String dapat dibandingkan dengan berbagai cara contohnya dengan menggunakan if-else statement di antara lain adalah sebagai berikut. String kata = "Hello"; //untuk membandingkan isi text huruf besar dan //kecil diperhatikan (case sensitive) //mengembalikan true/false if (kata.equals("hello")){ System.out.println("Kata adalah hello"); } else{ System.out.println("Kata bukan hello"); } //untuk membandingkan isi text huruf besar dan //kecil tidak diperhatikan (incase sensitive) if (kata.equalsIgnoreCase("hello")){ System.out.println("Kata adalah hello"); } else{ System.out.println("Kata bukan hello"); } //bisa juga dengan menggunakan compareTo //tetapi yang dikembalikan nilainya adalah berupa
//selisih dari kata yang ada if(kata.compareTo("Hello")==0){ System.out.println("Kata adalah hello"); } else{ System.out.println("Kata bukan hello"); } //untuk membandingkan panjang dari string if (kata.length()<7){ System.out.println("kata tidak terlalu panjang"); } else{ System.out.println("Panjang kata lebih dari 7"); } //untuk membandingkan karakter di index tertentu if (kata.charAt(0) == 'H'){ System.out.println("Huruf pertama adalah 'H'"); } else{ System.out.println("Huruf pertama bukan 'H'"); } //untuk membandingkan apakah di satu string, terdapat //kata tertentu atau tidak if (kata.contains("e")){ System.out.println("Kata mengandung huruf 'e'"); } else{ System.out.println("Kata tidak mengandung huruf 'e'"); }
Outputnya adalah sebagai berikut.
Java Console Module 05 - Loop Controlling Structure and Jump Operation
Last Update 09/10/2010
Revision 0
1. Module Description Pada pembahasan topik ini, akan dibahas tentang definisi dari perulangan, cara penggunaan, dan fungsi dari perulangan di bahasa pemrograman java. 2. Learning Outcomes Trainee dapat menggunakan perulangan dalam bahasa pemrograman java. 3. Material a. Maksud dan tujuan Loop atau perulangan adalah suatu bentuk kegiatan mengulang suatu statement sampai batas yang diinginkan. Dalam pemograman Loop atau perulangan sangat berguna sekali. Kegunaan sederhana dalam perulangan terlukis seperti ini: Jika kita ingin menuliskan kata ―saya ganteng‖ sebanyak seribu kali maka kita harus membuat seribu baris kata ―saya ganteng‖ dalam kode pemrogaman kita. Tapi dengan adanya perulangan maka kita hanya cukup menuliskan 5 sampai 7 baris kode saja. Dalam dunia nyata perulangan sangat sering dipakai dan membantu sekali. Ada beberapa hal yang bisa kita simpulkan dan kita catat tentang looping. 1. Dalam perulangan harus ada variable kontrol, dimana variable tersebut yang bertugas mengontrol perulangan hingga batas apa atau berapa perulangan bisa dilakukan. 2. Variable kontrol harus bersifat incremental atau juga bersifat dapat dimodifikasi sehingga perulangan dapat berjalan dengan semestinya. 3. Incremental atau modifikasi variabel kontrol berada dalam lingkup perulangan. b. Loop Controlling Structure Dalam perulangan terdapat tiga tipe umum, yaitu sebagai berikut. 1. while statement: class WhileDemo{ public static void main(String[] args){ int count = 1; //kondisi jika benar, akan dijalankan looping ini while (count<11){ //statement di dalam perulangan ini System.out.println("Count is "+count); //menambahkan nilai count, di akhir statement
//agar tidak terjadi looping forever count++; } } }
Secara umum jalannya program dengan while adalah sebagai berikut
--NB: T=Tidak/False, Y=Ya/True-Outputnya dari baris code di atas adalah sebagai berikut.
Untuk infinite loop kita dapat menggunakan while seperti di bawah ini: while (true){ //your code goes here }
2. do-while statement: class DoWhileDemo{ public static void main(String[] args){ int count = 1; //menjalankan dulu suatu perintah do { //statement di dalam perulangan ini System.out.println("Count is "+count); //menambahkan
nilai
count,
di
akhir
statement //agar tidak terjadi looping forever count++; }while (count<=11);//setelah itu baru di cek di akhir } }
Secara umum jalannya program dengan do-while adalah sebagai berikut:
--NB: T=Tidak/False, Y=Ya/True— Outputnya dari baris code di atas adalah sebagai berikut
3. for statement: mempunyai bentuk umum:
for (initialization; termination; increment){ statement(s) } o o o Contoh:
initialization : inisialisasi saat loop dimulai pertama kali dan hanya dilakukan sekali. termination : jika bernilai false, loop akan berhenti. increment : dijalankan setiap kali perulangan/iterasi. class ForDemo{ public static void main(String[] args){ for(int i=0;i<10;i++){ System.out.println("Count is " + i); } } }
Secara umum jalannya program dengan for adalah sebagai berikut:
--NB: T=Tidak/False, Y=Ya/True— Output dari baris code diatas adalah sebagai berikut.
c. Branching Statement 1. break statement digunakan untuk keluar dari looping. for(int i = 0; i < 13; i ++){ //jika i sudah mencapai 7, maka perulangan akan berhenti //hasil yang tercetak nantinya adalah 0, 1, 2, 3, 4, 5, 6 if(i == 7) break; System.out.println(i); } Outputnya adalah sebagai berikut.
2. continue statement digunakan untuk melanjutkan ke iterasi berikutnya. for(int i = 0; i < 13; i ++){
//jika i sudah mencapai 7, maka perulangan akan dilanjutkan //tanpa mencetak angka 7 //hasil yang tercetak nantinya adalah //0, 1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 12 if(i == 7) continue; System.out.println(i); } System.out.println("finish");
Outputnya adalah sebagai berikut.
Kita juga dapat menambahkan label sebelum while, do-while atau for statement block dan menambahkan label tersebut di belakang break atau continue, kita menyebutnya break dengan label. Biasanya digunakan untuk keluar dari nested loop. loop1:
//label for(int i = 0; i < 10; i++){ for(int j = 0; j < 10; j++){ // keluar dari looping yang ber-label loop1: if(i == 5 && j==4) break loop1; System.out.println(i+" "+j); } } System.out.println("finish");
Outputnya adalah sebagai berikut.
3. return statement Digunakan untuk keluar dari suatu method. Kita dapat menambahkan nilai di belakang return jika kita ingin mengembalikan suatu nilai sesuai dengan return type dari method tersebut. void method(){ return; } int method2(){ return 1; } d. Jump Operation 1. try-catch statement digunakan untuk melakukan exception handling. Misalnya kita ingin membuat suatu perintah sederhana untuk melakukan inputan, maka perintahnya adalah sebagai berikut import java.util.Scanner; public class TryCatchDemo { public static void main(String[] args) { int angka; Scanner in = new Scanner(System.in); System.out.println("Masukkan inputan : "); angka = in.nextInt(); in.nextLine(); } }
Namun masih terdapat masalah dari baris code di atas, dimana jika user memasukkan inputan bukan berupa angka, akan terjadi error (exception), oleh karena itu maka dibutuhkan suatu exception handling. Code sebelumnya direvisi menjadi seperti ini public class TryCatchDemo { public static void main(String[] args) { int angka; try{ Scanner in = new Scanner(System.in); System.out.println("Masukkan inputan : "); angka = in.nextInt(); in.nextLine(); } catch (Exception e){ //saat error maka akan masuk ke sini, kita tangani //misalnya kita beri pesan peringatan bahwa inputan //error System.out.println("Inputan Salah"); } } }
Java Console Module 06 - Array
Last Update 09/10/2010
Revision 0
1. Module Description Pada pembahasan ini, akan dibahas tentang definisi, penggunaan dan cara pemakaian dari array dalam bahasa pemrograman java. 2. Learning Outcomes Diharapkan trainee dapat mengerti tentang penggunaan dan cara pemakaian array dan dapat mengimplementasikannya dalam suatu program sederhana. 3. Material a. Definisi Array Array adalah struktur data yang terdiri dari item berurutan, dimana semua item-nya bertipe datanya sama. Dalam java, item dalam array selalu dinomori dari nol hingga nilai maksimum tertentu, yang nilainya ditentukan pada saat array tersebut dibuat. Misalnya, suatu array berisi 100 bilangan bulat, yang dinomori dari nol(0) hingga 99. b. Deklarasi Array Deklarasi array dengan menambahkan ‗[]‘ setelah nama variable atau setelah tipe data. String members[], otherMembers; String []persons, otherPersons; byte map[][]; Dari contoh diatas otherPersons adalah array, sedangkan otherMembers bukan array. Supaya array dapat digunakan, kita harus mengalokasi berapa jumlah elemen dari array dengan menggunakan new. String members[] = new String[29]; // members dapat menampung 29 elemen byte map[][] = new map[800][600]; // map mampu menampung 800 x 600 element Atau kita dapat langsung dapat langsung menginisialisasi elemen dari array. String color[] = {"blue", "red", "white", "black"}; int sekedarContoh[][] = { {1,2,3,4,5,6,7,8,9,10,11,12,13}, {14,15,16,17,18,19,20,21,22,23,24,25,26}
};
Untuk mendapatkan panjang dari suatu array kita dapat menggunakan length. int array[] = new array[666]; int size = array.length; for(int i=0; i<size; i++){ } Mulai jdk 1.5 ke atas, kita dapat menggunakan feature dari java yang cukup berguna yaitu enhanced for statement. Formatnya adalah sebagai berikut:
Jadi setiap kali looping, parameter akan menampung nilai dari elemen arrayName mulai dari elemen pertama sampai elemen terakhir (looping selesai). int []array = {1,2,3,4,5,6}; int total = 0; // menambahkan semua elemen dari array ke total for(int temp : array) total += temp; void main selalu menerima parameter berupa array string. Array tersebut ditujukan untuk menerima parameter pada command line.
Dalam pendeklarasian variabel, kita sering menggunakan sebuah tipe data beserta nama variabel atau identifier yang unik. Apabila kita ingin menggunakan variabel tersebut, kita akan memanggil dengan nama identifier-nya. Sebagai contoh, kita memiliki tiga variabel dengan tipe data int yang memiliki identifier berbeda untuk tiap variabel. int number1; int number2; int number3; number1 = 1; number2 = 2; number3 = 3; Seperti yang dapat Anda perhatikan pada contoh diatas, kode tersebut akan sia-sia karena harus menginisialisasi dan menggunakan setiap variabel padahal sebenarnya variabel-variabel tersebut digunakan untuk tujuan yang sama. Pada bahasa pemrograman Java maupun di bahasa pemrograman yang lain, terdapat sebuah kemampuan untuk menggunakan satu variabel yang dapat menyimpan beberapa data dan memanipulasinya dengan lebih efektif. Tipe variabel inilah yang disebut sebagai array. Contoh Integer dari array :
Setelah pendeklarasian array , kita harus membuat array dan menentukan berapa panjangnya dengan sebuah konstruktor. Proses ini di Java disebut sebagai
instantiation (istilah 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. Sebagai catatan bahwa ukuran dari array tidak dapat diubah setelah anda menginisialisasinya. Sebagai contoh, //deklarasi int ages[]; //instantiate obyek ages = new int[100]; atau bisa juga ditulis dengan, //deklarasi dan instantiate obyek int ages[] = new int[100];
Pada contoh diatas, pendeklarasian tersebut akan memberitahukan kepada compiler Java, bahwa identifier ages akan digunakan sebagai nama array yang berisi data bertipe integer, dan dilanjutkan dengan membuat atau meng-instantiate sebuah array baru yang terdiri dari 100 elemen. Selain menggunakan sebuah pernyataan new untuk meng-instantiate array, Anda juga dapat mendeklarasikan, membangun, kemudian memberikan sebuah nilai pada array sekaligus dalam sebuah pernyataan. Gambar inisialisasi array :
c. Penggunaan dan Pengaksesan Array Untuk mengakses sebuah elemen dalam array, atau mengakses sebagian dari array, Anda harus menggunakan sebuah angka atau yang disebut sebagai indeks atau subscript. Pada saat memasukkan nilai ke dalam array, sebuah nomor indeks atau subscript telah diberikan kepada tiap anggota array, sehingga program dan programmer dapat mengakses setiap nilai pada array apabila dibutuhkan. Nilai indeks selalu dalam tipe integer, dimulai dari angka nol dan dilanjutkan ke angka berikutnya sampai akhir array. Sebagai catatan bahwa indeks 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 seperti String, array tidak akan diinisalisasi menjadi string kosong ―‖. Untuk itu Anda tetap harus membuat String array secara eksplisit. Berikut ini adalah contoh kode untuk mencetak seluruh elemen didalam array. Dalam contoh ini digunakanlah pernyataan for 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] ); } } }
d. Array Multidimensi Array multidimensi diimplementasikan sebagai array yang terletak di dalam 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 elemen pertama dari baris pertama didalam array dogs, kita akan menulis,
System.out.print( dogs[0][0] ); Kode diatas akan mencetak String ―terry‖ di layar.
Java Console Module 07 - Method
Last Update 09/10/2010
Revision 0
1. Module Description Pada pembahasan topik ini, akan dibahas tentang defenisi dari method dan cara penggunaan dari method di bahasa pemrograman java. 2. Learning Outcomes Diharapkan trainee dapat mengimplementasikan cara penggunaan method di bahasa pemrograman java. 3. Material a. Definisi Method Tujuan dari method atau fungsi adalah untuk mengelompokkan perintah-perintah yang ditujukan untuk melakukan sebuah perintah yang lebih besar. Hal utama yang dibutuhkan dalam pembuatan dan pendeklarasian suatu method adalah : 1. Modifiers—yaitu hak akses yang nantinya akan mengatur pengaksesan method ini, akan di bahas di bawah. 2. Return value—tipe data yang akan dikembalikan oleh method ini, void bila tidak ada nilai yang akan dikembalikan. 3. Nama method—nama method atau fungsi itu. Untuk aturan penamaannya sama dengan aturan penamaan variable. 4. Parameter—yaitu nilai dengan tipe data yang akan dikirimkan sebagai input untuk method yang bersangkutan. Dikelilingin oleh tanda kurung ‗()‘. Jika tidak ada parameter maka akan digunakan kurung kosong ‗()‘. 5. Isi dari method—yaitu perintah-perintah lain yang akan dijalankan dalam method ini, dikelilingi oleh ‗{}‘. Salah satu contoh method yang akan sering digunakan adalah method main, yaitu public static void main(String [] args){//isi} Penjelasan singkat : 1. public static adalah modifiers 2. void adalah return value, dalam kasus ini tidak mengembalikan nilai 3. main adalah nama method utama 4. String [] args adalah parameter yang dikirim, dalam kasus ini adalah array of String 5. {//isi} adalah tempat meletakkan perintah-perintah yang akan dijalankan. b. Penggunaan Method
Ketika kita sudah men-develop program dalam skala besar maka kita perlu menggunakan yang namanya method. Untuk lebih jelasnya perhatikan program dibawah ini : public class Main { public static void main(String[] args) { Print(); } static void Print() { System.out.println("Method Print Sukses Dipanggil!!!"); } } Bagian yang diblok warna abu abu tersebut merupakan method berguna untuk mencetak string "Method Print Sukses Dipanggil!!!" tersebut. Dimana method tersebut dipanggil pada bagian yang diblok warna kuning diatas. Keyword static disini diperlukan karena method tersebut berada di main class yang juga bersifat static sehingga method menyertainya juga harus bersifat static. Keyword void merupakan salah satu indikasi bahwa method ini tidak me-return/mengembalikan nilai apapun, untuk method yang me-return/mengembalikan suatu nilai tertentu akan kita bahas nanti. Method diatas adalah salah satu method yang tidak menerima passing variable apapun dan juga tidak me-return variable apapun, untuk contoh method yang menerima passing variable tertentu perhatikan contoh dibawah ini : public class Main { public static void main(String[] args) { Maksimum(5, 7); } static void Maksimum(int a, int c) { if(a>c) { System.out.println("Nilai Maksimumnya Adalah : "+a); } else if( a < c) { System.out.println("Nilai Maksimumnya Adalah : "+c); } else { System.out.println("Dua Bilangan Tersebut Sama Besar"); } } } Dari contoh diatas dapat kita ketahui bahwa method Maksimum membutuhkan dua variable integer untuk dipassingkan, dan dari dua variable integer yang dipassingkan tersebut akan dicetak variable mana yang lebih besar. Selain itu ada juga method yang memiliki nilai kembalian, atau return value, sebagai contoh perhatikan program untuk mencari nilai kuadrat bilangan integer dibawah ini dibawah ini : public class Main { public static void main(String[] args) { System.out.println( Kuadrat(5) ); }
static int Kuadrat(int a) { return a * a; } }
Untuk membuat method yang memiliki nilai kembalian/return value, maka kita harus menghilangkan keyword void pada method yang kita buat dan menggantikannya dengan jenis variable kembalian kita, dimana dalam contoh tersebut nilai kembalian / return value berupa integer. Pengenalan Teknik Rekursif Dalam suatu method kita dapat memanggil method yang lainnya, atau bahkan memanggil method itu sendiri, peristiwa pemanggilan method oleh dirinya sendiri inilah yang disebut rekursif. Contoh sederhana dari rekursif adalah faktorial (!). Untuk lebih jelasnya perhatikan contoh dibawah ini : 5! = 4! * 5 4! = 3! * 4 3! = 2! * 3 2! = 1! * 2 1! = 1 Dari contoh diatas dapat kita lihat bahwa sebenarnya faktorial dari bilangan n, merupakan faktorial bilangan n-1 dikali dengan n, dan begitu seterusnya hingga n=1. Ketika n=1 maka ada kasus spesial yaitu 1!=1. Untuk implementasinya pada java, perhatikan program dibawah ini : public class Main { public static void main(String[] args) { System.out.println(Faktorial(5)); } static int Faktorial(int n) { if (n == 1) { return 1; } else { return n * Faktorial(n - 1); } } } Seperti halnya perulangan biasa, jika tidak ada base case maka method rekursif ini akan mengalami infinite loop yang akan menghabiskan memori.
Java Console Module 08 - Sorting
Last Update 09/10/2010
Revision 0
1. Module Description Pada pembahasan ini, akan dibahas tentang sorting dalam Java. 2. Learning Outcomes Diharapkan trainee dapat mengerti tentang sorting dalam Java. 3. Material a. Sorting Sorting adalah proses menyusun elemen – elemen dengan tata urut tertentu dan proses tersebut terimplementasi dalam bermacam aplikasi. Kita ambil contoh pada aplikasi perbankan. Aplikasi tersebut mampu menampilkan daftar account yang aktif. Hampir seluruh pengguna pada sistem akan memilih tampilan daftar berurutan secara ascending demi kenyamanan dalam penelusuran data. b. Bubble Sort Algoritma penyortiran yang dimulai dan berakhir pada sebuah daftar dengan n elemen dan memindahkan seluruhnya, menguji nilai setiap pasangan item yang berdekatan dan menukarkannya jika mereka tidak berada dalam urutan yang tepat. Contoh kode : public static void bubbleSort1(int[] x) { int n = x.length; for (int pass=1; pass < n; pass++) { // count how many times // This next loop becomes shorter and shorter for (int i=0; i < n-pass; i++) { if (x[i] > x[i+1]) { // exchange elements int temp = x[i]; x[i] = x[i+1]; x[i+1] = temp; } } } }
c. Selection Sort
Ide utama dari algoritma selection sort adalah memilih elemen dengan nilai paling rendah dan menukar elemen yang terpilih dengan elemen ke-i. Nilai dari i dimulai dari 1 ke n, dimana n adalah jumlah total elemen dikurangi 1. Contoh kode : public void selectionSort(Object array[], int startIdx, int endIdx) { int min; for (int i = startIdx; i < endIdx; i++) { min = i; for (int j = i + 1; j < endIdx; j++) { if (((Comparable)array[min]).compareTo(array[j])>0) { min = j; } } swap(array[min], array[i]); } }
d. Insertion Sort Algoritma insertion sort pada dasarnya memilah data yang akan diurutkan menjadi dua bagian, yang belum diurutkan (meja pertama) dan yang sudah diurutkan (meja kedua). Elemen pertama diambil dari bagian array yang belum diurutkan dan kemudian diletakkan sesuai posisinya pada bagian lain dari array yang telah diurutkan. Langkah ini dilakukan secara berulang hingga tidak ada lagi elemen yang tersisa pada bagian array yang belum diurutkan. Contoh Kode : public void insertionSort(Object array[], int startIdx, int endIdx) { for (int i = startIdx; i < endIdx; i++) { int k = i; for (int j = i + 1; j < endIdx; j++) { if (((Comparable) array[k]).compareTo(array[j])>0) { k = j; } } swap(array[i],array[k]); } }
Java Console Module 09 – Java Utilization
Last Update 09/10/2010
Revision 0
1. Module Description Pada pembahasan ini, akan dibahas tentang class – class Java didalam package java.util. 2. Learning Outcomes Diharapkan trainee dapat mengerti dan dapat menggunakan class – class Utilisasi dalam package java.util. 3. Material a. Java Utilization Java memiliki class yang sudah dibuat dan tinggal dipakai. Beberapa class tersebut dipakai sebagai utilisasi, seperti Random, Calendar, dsb. b. Pembangkit Bilangan Acak Pada beberapa kasus dibutuhkan sebuah proses atau lebih yang menghasilkan bilangan secara random. Java memiliki 2 metode yang memungkinkan seorang programmer untuk melakukan random. Metode tersebut adalah :
Menggunakan class java.util.Random Class Random dapat di-import dari package ―java.util‖. Yang perlu dilakukan pertama kali adalah dengan meng-instantiate object dari class Random. Kemudian baru dapat kita panggil fungsi .nextInt(int batas). Fungsi tersebut akan me-return nilai random dari 0 – nilai int batas. Contoh: import java.util.Random; //import class Random public class BljrRandom { private Random rnd; //deklarasi obj Random public BljrRandom () { rnd = new Random(); //instantiate obj rnd for(int i=0;i<10;i++) { //Random dari 0 - 5 System.out.println("Random dari 0-5 : " + rnd.nextInt(6));
//Random dari 1 - 5 System.out.println("Random dari 1-5 : " + (rnd.nextInt(5)+1)); } } public static void main(String []args) { new BljrRandom(); } }
Menggunakan method static dari Math.random() Java juga menyediakan class Math yang didalamnya terdapat fungsi static random() yang fungsinya sama dengan fungsi .nextInt(int batas) pada class Random. Perbedaannya fungsi dari Math.random() me-return nilai dari 0.0 – 0.99, sehingga membutuhkan logika yang berbeda dengan class Random. public class BljrRandom { public BljrRandom () { for(int i=0;i<10;i++) { //Random dari 1-5 System.out.println("Random dari 1-5 : " + Math.round(Math.random()*4+1)); } } public static void main(String []args) { new BljrRandom(); } }
c. Menunda dan menghentikan program Java juga menyediakan method static untuk menunda dan menghentikan program. Thread.sleep(int millisecond) Kegunaan utama dari method ini adalah untuk menunda Thread yang sedang berjalan. Tetapi dapat juga digunakan untuk menunda proses yang sedang berjalan. Penggunaannya harus menggunakkan try – catch karena diperkirakan akan melempar InterruptedException. public class SleepProgram { public SleepProgram() { try { Thread.sleep(100); } catch(InterruptedException ex) { System.out.println(ex.getMessage()); } } public static void main(String []args) { new SleepProgram(); } }
System.exit(int status) Method static dari kelas System yang berfungsi untuk menghentikan program. Parameter pertama merupakan kode status dari hasil terminate pada JVM. Kode 0 berarti normal exit selainnya adalah abnormal exit. Kode yang ditulis tidak berpengaruh dengan jalannya program. System.exit(0)
d. Calendar Untuk menampilkan tanggal yang sesuai dengan kalendar pada sistem komputer dapat dengan menggunakkan class java.util.Calendar dan method yang ada didalamnya. Yang perlu diperhatikan adalah agar dapat menggunakan beberapa method pada Calendar butuh untuk menampung objeknya terlebih dahulu. Karena Calendar merupakan Singleton Class maka kita perlu memanggil method getInstance() dimana method ini me-return objek Calendar.
Contoh : Calendar obj = Calendar.getInstance(); obj.add(Calendar.MONTH, 1); Berikut adalah method dan constanta yang sering digunakan :
Constanta Nama Field Calendar.DATE Calendar.MONTH Calendar.YEAR Calendar.HOUR Calendar.MINUTE Calendar.SECOND
Berisi Berisi Berisi Berisi Berisi Berisi
nilai nilai nilai nilai nilai nilai
int int int int int int
Fungsi hari dari bulan. bulan pada sistem komputer. tahun pada sistem komputer. jam pada sistem komputer. menit pada sistem komputer. detik pada sistem komputer.
Method Nama Method getInstance() add(int field, int count) after(Object val) before(Object val) getTime() set(int field, int val) get(int field)
Fungsi Me-return objek Calendar. Menambah atau mengurangi objek Calendar berdasarkan nilai dari int field. Me-return nilai boolean apakah objek Calendar telah melewati waktu yang telah ditentukan. Me-return nilai boolean apakah objek Calendar belum melewati waktu yang telah ditentukan. Me-return objek dari Date dengan nilai tanggal sesuai dengan sistem komputer. Merubah satuan tanggal menjadi nilai int val sesuai dengan nilai dari int field. Me-return nilai int yang dari tanggal objek Calendar berdasarkan nilai int field
Contoh : import java.util.Calendar; //import terlebih dahulu public class CobaCalendar { private Calendar cal; //deklarasi obj Calendar public CobaCalendar() { //cal = new Calendar(); --> SALAH !! cal = Calendar.getInstance(); //Calendar hanya memiliki 1 objek saja //Cetak tanggal sekarang System.out.println(cal.getTime()); //Tambah tanggalnya sebanyak 1 cal.add(Calendar.DATE, 1); System.out.println(cal.getTime()); //Kurang bulannya sebanyak 2
cal.add(Calendar.MONTH, -2); System.out.println(cal.getTime()); } public static void main(String args[]) { new CobaCalendar(); } }
e. Input/Output Dialog Java juga menyediakan class yang berfungsi untuk menampilkan input / output dialog. Class tersebut adalah JOptionPane dengan menggunakkan method static show() yang memiliki lebih dari 1 overloading. Class ini akan dipelajari pada Java GUI.
Java Console Module 10 – Class and Object
Last Update 09/10/2010
Revision 0
1. Module Description Pada pembahasan topik ini, akan dibahas tentang defenisi dari method dan cara penggunaan dari class dan object di bahasa pemrograman java. 2. Learning Outcomes Diharapkan trainee dapat mengimplementasikan cara penggunaan class dan object di bahasa pemrograman java. 3. Material a. Pengenalan Class dan Object (http://java.sun.com/docs/books/tutorial/java/javaOO/index.html) Sama pada C++, suatu class di java mempunyai state/attribute
dan behavior,
hanya saja istilah yang sering digunakan adalah field untuk state dan method untuk behavior. Saat suatu objek dibuat maka constructor dari suatu kelas dijalankan. Berikut ini ilustrasi mengenai suatu objek:
Dan ini adalah contoh pendeklarasian class di java.
Gunakan huruf kapital pada awal nama Class. b. Access Modifier Pemberian modifier dilakukan saat pendeklarasian dari member class. public int a; private int b; protected int c; public void method1() { } Berikut adalah access modifier di java:
no modifier maksudnya adalah access modifier default jika kita tidak menambah access modifier. Dapat dilihat di table bahwa protected di java berbeda dengan C++. c. Field Berbeda dengan C++, kita dapat langsung menginisialasi nilai dari field.
d. Object. Seperti yang kita tahu, class adalah blueprint dari objek, jadi kita membuat objek berdasarkan class.
Kita menggunakan keyword new untuk membuat objek diikuti dengan constructor dari kelas tersebut. Untuk menampung suatu object kita menggunakan reference type variable. Sesuai dengan namanya, variable berguna menampung alamat (references) dari suatu object bukan menampungnya secara langsung.
e. keyword this Sama seperti C++, keyword this digunakan untuk menunjukan kelas itu sendiri. Biasanya digunakan untuk membedakan antara variable local dengan field.
f.
keyword static Field dengan static modifier disebut dengan static field atau class variable. Setiap instance dari class tersebut berbagi class variable yang sama sehingga jika salah satu instance merubah nilai dari class variable maka akan berdampak pada instance lain.
Class variable juga dapat dimanipulasi tanpa menciptakan instance dari kelas.
Static modifier juga dapat digunakan pada saat pendeklarasian method dari suatu kelas. Static method dapat dipanggil dengan nama kelas, tanpa membuat instance dari kelas yang bersangkutan.
g. Constant Untuk membuat konstanta, kita menggunakan static modifier dan final modifier. final modifier mengindikasikan nilai dari field tidak dapat diubah.
h. Nested Class
Di java, kita dapat mendefinikan kelas di dalam kelas. Kita menyebutnya nested class.
Nested class tanpa static modifier disebut Inner Class. Inner class dapat mengakses anggota dari outer class. Instance dari inner class hanya dapat berada di dalam outer class.
Untuk membuat instance dari inner class kita dapat menggunakan sintaks sbb:
i.
Enum Enum adalah suatu set konstanta.
Berikut adalah contoh penggunaan enum :
Karena enum di java merupakan suatu kelas (dikenal juga sebagai enum type) maka enum dapat mempunyai field dan method.
j.
Garbage Collector Setiap object yang tidak dibutuhkan lagi harus dibebaskan untuk mengembalikan system resource untuk mencegah terjadinya memory leaks. Di java, ketika suatu object tidak me-reference kemana pun maka JVM akan menandai object tersebut sebagai garbage colletion. Garbage collector bertanggung jawab untuk meretrieve
memory dari object yang tidak dibutuhkan sehingga memory dapat
digunakan oleh object lainnya. Ini berbeda dengan C++ yang mana kita harus secara eksplisit harus membebaskan object dengan keyword delete. Destructor juga tidak diperlukan lagi di java.
Java Console Module 11 - String
Last Update 09/10/2010
Revision 0
1. Module Description • String Class - Constructor • Method (length, charAt, concat, substring, toLowerCase, toUpperCase, trim, split) 2. Learning Outcomes Trainee dapat membuktikan kegunaan kelas String di Java 3. Material a. Definisi String Dalam pemrograman Java string merupakan aspek penting, karena dapat mempelajar mengenai class dan objek melalui penggunaan string. String sebenarnya merupakan class yang terdapat dalam library Java. Class String merupakan salah satu kelas dasar yang disediakan oleh Java untuk memanipulasi karakter. b. Membuat Objek String Java mendefinisikan class String dalam package java.lang.String, sehingga tidak perlu melakukan import secara eksplisit. Class String digunakan untuk mendefinisikan string yang konstant. Untuk membuat string, dapat melakukannya dengan beberapa cara, dan yang sering digunakan adalah contoh sebagai berikut. private String varString = "kata"; Kode diatas adalah bentuk singkat dari : char[] varString = {'k', 'a', 't', 'a'}; String varString = new String("kata"); Jadi dapat disimpulkan bahwa String terdiri dari data array yang bertipe char, dan kita juga dapat membuat objek String dengan menggunakan keyword new yang biasa digunakan untuk membuat objek dari class. Contoh :
public class LatString { private String varString = "kata"; public LatString() { System.out.println(varString + " baru"); } public static void main(String args[]) { new LatString(); } }
c. Method pada String String juga memiliki method – method yang akan sering digunakan untuk memanipulasi string / kata – kata. Sudah dijelaskan sebelumnya tentang perbandingan String menggunakkan method .equals(Object obj) dan .compare(String str). Berikut ini adalah penjelasan method dari class String lainnya yang sering digunakan :
Menentukan awal dan akhir String Untuk menentukan awal dan akhir sebuah String, kita dapat menggunakkan dua fungsi utama, yaitu : startsWith(String str) Fungsi yang me-return nilai boolean dimana dilakukan pengecekkan apakah string yang bersangkutan diawali dengan nilai dari String str. endsWith(String str) Fungsi yang me-return nilai boolean dimana dilakukan pengecekkan apakah string yang bersangkutan diakhiri dengan nilai dari String str. System.out.println("Apakah diawali dengan a ? => "+varString.startsWith("a")); System.out.println("Apakah diakhiri dengan a ? => "+varString.endsWith("a"));
Mendapatkan panjang String
Untuk memperoleh panjang sebuah string dapat dilakukan dengan menggunakkan method length(). Dimana fungsi tersebut akan me-return tipe data int yang nilainya adalah panjang dari string tersebut. System.out.println("Panjang varString = " + varString.length());
Mencari posisi karakter dalam suatu String Method yang digunakan untuk mencari posisi / index karakter dalam suatu string adalah indexOf(<Memiliki lebih dari 1 overloading>) dimana fungsi tersebut mereturn tipe data int yang nilainya adalah posisi index karakter / kata yang dicari. indexOf(char chr) / indexOf(String str) Pencarian nilai chr / str dimulai dari index ke-0. indexOf(char chr, int start) / indexOf(String str, int start) Pencarian nilai chr / str dimulai dari index sesuai dengan nilai start. lastIndexOf(char chr) / lastIndexOf(String str) Pencarian nilai chr / str dimulai dari index paling belakang. System.out.println("Index \"a\" dimulai dari 0 =>" + varString.indexOf("a")); System.out.println("Index \"a\" berikutnya =>" + varString.indexOf("a", varString.indexOf("a")+1));
Mendapatkan beberapa kata atau huruf dalam suatu String Method yang digunakan untuk mendapatkan beberapa kata atau huruf dalam suatu string yaitu subString(int indexMulai) / subString(int indexAwal, int indexAkhir) dan charAt(int index) dimana fungsi tersebut me-return tipe data String. System.out.println("2 karakter pertama => " + varString.substring(0, 2)); System.out.println("2 karakter terakhir => " + varString.substring(varString.length()-2, varString.length()));
Manipulasi String Berikut adalah beberapa method yang dapat digunakan untuk memanipulasi string yang telah dibuat : toLowerCase() Merubah string yang bersangkutan menjadi huruf kecil. toUpperCase() Merubah string yang bersangkutan menjadi huruf kapital. trim() Menghapus spasi yang tidak perlu di depan dan di belakang string yang bersangkutan. concat(String append) Selain menggunakkan '+' terdapat juga method concat() yang berfungsi sebagai penggabungan 2 string. replace(String old, String new) Menggantikan karakter / string yang ditentukan menjadi nilai dari String new. System.out.println("KaTa".toLowerCase()); System.out.println("kata".toUpperCase()); System.out.println(" kata ".trim()); System.out.println("kcta".replace("ct","at")); System.out.println("kata".concat(" siapa ?"));
Memotong String Untuk memotong string dapat dilakukan dengan fungsi split(String delimeter) dengan menentukan karakter sebagai delimeter-nya. Fungsi ini akan me-return String[] dimana berisi nilai – nilai hasil pemotongan berdasarkan delimeter-nya.
String data = "001#Abigail#AstDev#$50.000.000"; String dataArr[] = data.split("#"); String label[] = {"###KODE", "###NAMA", "JABATAN", "###GAJI"}; for(int i=0; i " + dataArr[i]); }
Berikut adalah daftar method dalam bentuk tabel pada class String yang sering dipakai : Return
Method
Keterangan
Value boolean
equals(Object anObject)
Membandingan string dengan object
char
charAt(int index)
Mendapatkan huruf di index tertentu
int
indexOf(int ch)
Mendapatkan index dari huruf pada string tersebut
String[]
split(String regex)
Memotong string berdasarkan kriteria
String
substring(int beginIndex,
Mendapatkan string
int endIndex)
dari beginIndex sampai endIndex.
String
toLowerCase()
Mengubah karakter dalam string mejadi huruf kecil
String
trim()
Membuang white space di awal dan di akhir dari string
Java Console Module 12 - Wrapper & Math Class
Last Update 09/10/2010
Revision 0
1. Module Description Pada pembahasan ini, akan dibahas tentang Wrapper dan Math Class dalam Java 2. Learning Outcomes Diharapkan trainee dapat mengerti dan dapat menggunakan Wrapper dan Math Class dalam Java. 3. Material a. Wrapper Class Java memiliki class yang berfungsi sama seperti tipe data primitif yang disebut Wrapper Class. Wrapper Class adalah class pembungkus yang membungkus atau ―mengenkapsulasi‖ fungsionalitas dari class ataupun komponen lain.
Kelebihannya adalah Wrapper Class memiliki attribute dan method yang sangat berguna dalam memanipulasi tipe data primitif yang bersangkutan. Berikut adalah contoh deklarasi Wrapper Class :
Integer, Long, Byte, Short Integer, Long, Byte, dan Short merupakan Wrapper Class yang dapat menampung nilai dari tipe data primitif bernilai bilangan bulat. public class WrapperClass { public WrapperClass() { Integer wrapperInt = 10; Long wrapperLong = 100l; Short wrapperShort = 5;
Byte wrapperByte = 1; Integer wrapperInt2 = new Integer(10); Long wrapperLong2 = new Long(100); Short wrapperShort2 = new Short((short)5); Byte wrapperByte2 = new Byte((byte)1); //Numeric Class -> sebagai parent dari class diatas Number numbParent = new Integer(50); } public static void main(String []args) { new WrapperClass(); } }
Double, Float Double dan Float merupakan Wrapper Class yang dapat menampung nilai dari tipe data primitif bernilai bilangan decimal. public class WrapperClass { public WrapperClass() { Double wrapperDouble = 10.5; Float wrapperFloat = 20.5f; Double wrapperDouble2 = new Double(10.5); Float wrapperFloat2 = new Float((float)20.5); } public static void main(String []args) { new WrapperClass(); } }
Character Character merupakan Wrapper Class yang dapat menampung nilai dari tipe data primitf bernilai sebuah character. public class WrapperClass { public WrapperClass() { Character wrapperChar = 'a'; Character wrapperChar2 = new Character('a'); } public static void main(String []args) { new WrapperClass(); } }
Berikut adalah method Wrapper Class yang sering digunakan :
Nama Method Integer.parseInt(String val) Double.parseDouble(String val) Short.parseShort(String val) Long.parseLong(String val) Float.parseFloat(String val) Byte.parseByte(String val)
Parsing Parsing Parsing Parsing Parsing Parsing
nilai nilai nilai nilai nilai nilai
Kegunaan String menjadi String menjadi String menjadi String menjadi String menjadi String menjadi
int double short long float byte
Contoh kode : public class WrapperClass { private Integer wrapperInt; private String sParse = "123"; public WrapperClass() { wrapperInt = Integer.parseInt(sParse); } public static void main(String []args) { new WrapperClass(); } }
b. Math Class Math class berguna untuk melakukan operasi aritmatika yang umum dilakukan. Pada Math class ini terdapat berbagai fungsi, contohnya: Round: Untuk membulatkan angka ke atas atau ke bawah sesuai pecahan. Ceil: Untuk membulatkan angka ke atas. Floor: Untuk membulatkan angka ke bawah. Min: Membandingkan dua angka dan mengembalikan nilai yang terkecil. Max: Membandingkan dua angka dan mengembalikan nilai terbesar. Abs: Membuat sebuah angka negative menjadi positif. Exp: Mengembalikan hasil pemangkatan nilai 2.718281828459045 dengan angka yang dimasukkan. Pow: Mengembalikan hasil pemangkatan angka. Sqrt: Mengembalikan hasil akar pangkat dua dari suatu nilai.
HASIL OUTPUT : Math.round(3.6) Math.ceil(3.6) Math.floor(3.6) Math.min(23, 89) Math.max(23, 89) Math.abs(-400.2) Math.exp(3.6) Math.pow(20, 3) Math.sqrt(400.0)
= = = = = = = = =
4 4.0 3.0 23 89 400.2 36.59823444367799 8000.0 20.0
Java Console Module 13 – Inheritance
Last Update 09/10/2010
Revision 09/10/2010
1. Module Description Pada pembahasan ini, akan dibahas tentang konsep Inheritance pada Java. 2. Learning Outcomes Diharapkan trainee dapat mengerti dan dapat menggunakan konsep Inheritance pada Java. 3. Material a. Definisi
Inheritance Inheritance adalah suatu cara untuk menggolongkan dan menggunakan kembali kode dengan membuat kumpulan dari attribute dan behavior yang disebut objek yang dapat didasarkan pada objek yang dibuat sebelumnya. Class baru disebut subclass (kelas turunan) mewarisi attribute dan behavior dari class yang sebelumnya, yang disebut superclass(kelas induk).
Keyword super Super adalah suatu keyword yang digunakan untuk memanggil constructor,attribute, atau behaviour yang dimiliki oleh superclass.
Final Class Final Class adalah class yang tidak dapat diturunkan, artinya sebuah final class tidak dapat menjadi superclass dan juga tidak dapat mempunyai subclass. Tujuan penggunaan final class adalah untuk masalah keamanan dan efisiensi.
b. Deklarasi
Inheritance Di dalam java, untuk mendeklarasikan suatu class sebagai subclass dilakukan dengan cara menambahkan kata kunci extends setelah deklarasi nama subclass, kemudian diikuti dengan nama superclass-nya. Kata kunci extends memberitahu kompiler java bahwa kita ingin melakukan perluasan class. Contoh : class Mamalia { protected int kaki;
void jalan() { System.out.println(―Jalan…‖); } } class Manusia extends Mamalia { private int tangan; void makan() { System.out.println(―Makan‖); } } Ketika class manusia menurunkan atau memperluas(extends) class Mamalia, maka ia akan mewarisi attribute dan behavior yang dimiliki oleh class Mamalia seperti int kaki dan void jalan(). Jadi class Manusia memiliki attribute dan behavior yang ada pada class Mamalia dan class Manusia.
Keyword super Keyword super pada constructor digunakan untuk memanggil constructor yang dimiliki oleh superclass. Contoh : class Mamalia { Mamalia() { System.out.println(―Ini constructor induk‖); } } class Manusia extends Mamalia { Manusia() { super(); System.out.println(―Ini constructor anak‖); } } Keyword super pada method digunakan untuk memanggil method yang dimiliki oleh superclass. Contoh : class Mamalia { public void bicara() { System.out.println("Mamalia bicara"); } } class Manusia extends Mamalia { public Manusia()
{ super.bicara(); } public void bicara() { System.out.println("Manusia bicara"); } } Keyword super pada variable digunakan untuk memanggil variable yang dimiliki oleh super class. Contoh : class Mamalia { protected int kaki = 4; } public class Manusia extends Mamalia { private int kaki = 2; public Manusia() { System.out.println("Kaki mamalia : "+super.kaki); System.out.println("Kaki manusia : "+kaki); } }
Final Class Contoh pendeklarasian final class : public final class tes { public static void main(String[]args) { } }
c. Aturan – aturan penggunaan
Inheritance Beberapa aturan tentang pewarisan (inheritance) yang perlu diperhatikan : 1. Java hanya memperkenankan adanya single inheritance. Konsep single inheritance hanya memperbolehkan suatu subclass mempunyai satu superclass. Dengan konsep single inheritance ini, masalah pewarisan akan dapat diamati dengan mudah. 2. Subclass juga merupakan class biasa, maka kita tetap dapat melakukan pewarisan pada subclass ini. Misal : class B merupakan subclass dari class A, kita dapat membuat class baru yang diturunkan dari class B sehingga class baru tersebut akan memiliki apa yang dimiliki oleh class A dan class B.
3. Suatu superclass dapat tidak mewariskan sebagian attribute dan behavior kepada subclass-nya. Sejauh mana suatu member dapat diwariskan ke class lain, ataupun suatu attribute atau behavior dapat diakses dari class lain, sangat berhubungan dengan access modifier dari attribute atau behavior dari superclass tersebut.
Keyword super Beberapa aturan mengenai keyword super yang perlu diperhatikan : 1. Ketika menggunakan keyword super untuk memanggil constructor superclass, maka keyword super harus diletakkan di line pertama dari constructor subclass 2. Untuk behavior, keyword super biasa digunakan untuk memanggil suatu behavior pada superclass yang memiliki nama, jumlah parameter, type dan urutan parameter yang sama dengan behavior pada subclassnya. 3. Untuk attribute, keyword super biasa digunakan untuk memanggil suatu attribute pada superclass yang memiliki nama yang sama dengan attribute pada subclass.
Final Class Final class tidak dapat dibuat subclassnya.
Java Console Module 14 - Polymorphism
Last Update 09/10/2010
Revision 0
1. Module Description Pada pembahasan ini, akan dibahas tentang konsep Polymorphism pada Java. 2. Learning Outcomes Diharapkan trainee dapat mengerti dan dapat menggunakan konsep Polymorphism pada Java. 3. Material a. Definisi Polymorphism adalah suatu istilah yang menjelaskan sebuah situasi dimana satu nama method dapat merujuk pada method yang berbeda. Di java ada dua type dari polymorphism, yaitu overloading type dan overriding type. Ketika kita meng-override suatu method, java akan menetapkan method – method yang sesuai untuk dipanggil ketika run time program, bukan ketika kita melakukan compile. Overriding terjadi ketika sebuah class memiliki method dengan nama, jumlah parameter, dan urutan type data parameter yang sama dengan superclass nya. Overloading terjadi ketika beberapa method pada suatu class memiliki nama yang sama tetapi memiliki jumlah parameter atau urutan type data parameter yang berbeda. b. Penggunaan polymorphism Penggunaan polymorph dibagi menjadi 2 sesuai dengan typenya, yaitu overriding dan overloading. Contoh overriding : class Mamalia { void jalan() { System.out.println(―Mamalia berjalan‖); } } class Manusia extends Mamalia { void jalan() { System.out.println(―Manusia berjalan‖); }
} Contoh overloading : public class Manusia { void jalan() { System.out.println(―Manusia berjalan‖); } void jalan(String alatBantu) { System.out.println(―Manusia berjalan dengan ―+alatBantu); } } c. Keuntungan 1. Reuseable, artinya ketika class itu dibuat, class tersebut dapat dengan mudah digunakan kembali tanpa perlu mengetahui apa yang ada di dalamnya. 2. Polymorphic variable membantu dalam efisiensi pengunaan memory.
Java Console Module 15 – Abstract and Interface
Last Update 09/10/2010
Revision 0
1. Module Description • Abstract Class and Method • Interface 2. Learning Outcomes Trainee dapat menemukan kegunaan dari kelas abstrak dan interface dalam bahasa pemograman 3. Material a. Pengertian Abstract Class
Suatu class yang didefinisikan sebagai super class yang diturunkan ke sub-class turunannya Kita tidak bermaksud mendefinisikan objek dari super class tersebut. Super class tersebut didefinisikan semata-mata hanya sebagai ―payung‖ atau ―induk‖ dari class-class turunannya. Dari class-class turunan inilah objek yang sebenarnya akan diciptakan. Suatu super class yang didefinisikan seperti ini dinamakan sebagai class abstract.
b. Pengertian Abstract Method
Di dalam class abstract dapat didefinisikan atribut-atribut dan method-method. Atribute dan method yang didefinisikan dalam class abstract dimaksudkan merupakan sesuatu yang umum dan terdapat pada sub-class turunannya. Suatu abstract method didefinisikan dengan cukup mendeklarasikan namanya pada class abstract dan meng-override pada masing-masing class turunannya dengan menyesuaikan dengan kebutuhan class turunannya tersebut. Suatu class harus didefinisikan sebagai class abstract apabila minimal ada satu method yang didefinisikan sebagai abstract method.
Beberapa hal yang perlu diperhatikan: a. Untuk membuat suatu class abstract kita harus menambahkan modifier abstract pada saat pendeklarasian class tersebut. Begitu pula untuk dengan menambahkan keyword abstract pada method untuk membuat method abstract. b. Method abstract harus dideklarasi tanpa implementasi (tidak ada method body).
c. Suatu abstract class tidak harus ada abstract method, tetapi abstract method harus berada di dalam class abstract. Contoh kasus MailBox
Method play() : didefinisikan sebagai abtract method , karena play() untuk TextMessage adalah berbeda dengan play() untuk VoiceMessage Sehingga class Message adalah class abstract Untuk data sender dan method getSender(), semua class turunan memiliki definisi yang sama sehingga method tersebut didefinisikan bukan sebagai abstract Class Message
Class Mailbox
Class MailBoxTest(Class Utama)
Hasil Program MailboxTest
Pesan ke 1 : text dari : AMIR isi pesan : HABIS KULIAH LANGSUNG PULANG YA JANGAN MAIN2 Pesan ke 2: text dari : BUDI isi pesan : SUDAH LAPAR Pesan ke 3 : voice dari : JOHAN isi pesan : suara music dalam file spacemusic.au
c. 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. Mereka menyediakan class, tanpa memperhatikan lokasinya dalam hirarki class, untuk mengimplementasikan sifat-sifat yang umum. Dengan catatan bahwa interface juga menunjukkan polimorfisme, dikarenakan program dapat memanggil method interface dan versi yang tepat dari method yang akan dieksekusi tergantung dari tipe object yang melewati pemanggil method interface. Kenapa Kita Memakai Interface? Kita akan menggunakan interface jika kita ingin class yang tidak berhubungan
mengimplementasikan method yang sama. Melalui interface, 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 tersebut 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 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 class-nya. Seperti yang dapat kita lihat nanti dalam bagian Interface vs class, kita dapat benarbenar 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++. Beberapa hal yang perlu diperhatikan mengenai interface: a. Field dalam interface hanya dapat berupa kontanta, sehingga semua field harus diinisialisasi, keyword final tidak perlu ditambahkan karena secara default field akan dianggap konstanta.
b. Method hanya berupa method signature dan tidak mempunyai method body. Method tersebut harus di-overriding di class yang meng-implements interface dan access modifier-nya harus public. c. Tidak dapat dibentuk instance dari interface. d. Interface dapat meng-extends lebih dari 1 interface.
e. class dapat meng-implements lebih dari 1 interface.
Interface vs. Class Abstract Berikut ini adalah perbedaan utama antara sebuah interface dan sebuah class abstract: method interface tidak punya tubuh, sebuah interface hanya dapat mendefinisikan konstanta dan interface tidak langsung mewariskan hubungan dengan class istimewa lainnya, mereka didefinisikan secara independent. Interface vs. Class Satu ciri umum dari sebuah interface dan class adalah pada tipe mereka berdua. Ini artinya bahwa sebuah interface dapat digunakan dalam tempat-tempat dimana sebuah class dapat digunakan. Sebagai contoh, diberikan class Person dan interface PersonInterface, berikut deklarasi yang benar: PersonInterface 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. 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 yaitu, class hanya dapat meng-EXTEND SATU superclass, tetapi dapat meng-IMPLEMENTASIkan 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. 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 mengextend PersonInterface, maka ia akan mewariskan semua deklarasi method dalam PersonInterface. public interface PersonInterface { ... } public interface StudentInterface extends PersonInterface { ... }
Java Console Module 16 – ArrayList dan Vector
Last Update 09/10/2010
Revision 0
1. Module Description • ArrayList Class and Method • Vector Class and Method 2. Learning Outcomes Trainee dapat menerapkan konsep penggunaan ArrayList dan Vector dalam bahasa pemograman 3. Material a. Collection Collection adalah suatu objek yang merepresentasikan suatu group dari objectobject. Perkembangan lebih lanjutnya akan disebut Java Collection Framework. Collection itu sendiri meliputi 2 garis besar yaitu Arrays dan Vector. Namun, sesungguhnya termaksud juga vectors, hash tables, maps, dan sets. b. Vector dan ArrayList (Sejarahnya) Pada bahasa pendahulunya (C++), terkenal dengan template yang namanya STL (Standard Template Library). Kemudian library tersebut dikembangkan menjadi library collection. Library collection terdiri dari 2 bagian: 1. Collection (nantinya akan dibagi menjadi Lists dan Set). 2. Map (nantinya akan dikembangkan lagi menjadi hashtable).
Berikut ini diagram ArrayList dan Vector class :
c. ArrayList Class ArrayList class adalah class pada java yang berguna untuk menampung kumpulan data sejenis dengan jumlah yang banyak. Hampir semua method di class Vector dapat digunakan di class ArrayList. d. ArrayList Method ArrayList method adalah fungsi yang berguna untuk memanipulasi, menambahkan, mengubah ataupun mengurangi objek-objek yang ada pada class ArrayList. e. Vector Class Vector class adalah salah satu class pada java (java.util.Vector) yang berguna untuk menangani data Vector. f.
Vector Method Vector
method
adalah
fungsi-fungsi
yang
berguna
untuk
memanipulasi,
menambahkan, mengubah ataupun mengurangi objek pada Vector yang ada pada class Vector.
g. Method-method pada Vector Di dalam kelas vector terdapat banyak method yang berguna adalah :
Method boolean add(E e) void clear() get(int index)
Description Untuk menambahkan objek baru ke dalam vector itu Untuk mengosongkan Vector Untuk mengambil objek pada indeks tertentu dari vector itu
boolean
Untuk menghapus objek pada indeks
remove(int index)
tertentu dari vector itu
set(int index,
Untuk mengubah objek pada indeks
E element)
tertentu dari vector itu
int size()
Untuk mengetahui jumlah objek yang ada dalam vector itu
h. Cara penggunaan ArrayList Untuk menggunakan ArrayList : List x = new ArrayList(); i. Cara penggunaan Vector. public Vector(). Membuat Vector kosong dengan kapasitas awal 10 dan kapasitas increment 0. public Vector(int initialCapacity). Membuat Vector dengan kapasitas awal sesuai initialCapacity dan kapasitas increment 0. public Vector(int initialCapacity, int capacityIncrement).
Membuat Vector kosong dengan kapasistas sesuai intialCapacity dan kapasistas increment sesuai capacityIncrement. public Vector(Collection c). Membuat Vector yang pada awalannya sesuai dengan Collection yang kita tentukan sebelumnya. Collection adalah interface yang struktur data dalam framework collectionnya memiliki kesamaan.
j. Accessing and Removing Elements in a Vector Untuk membentuk Vector (dengan kapasitas awal = 9, dan kapasistas pertambahan = 3), caranya : Vector vectors = new Vector(6, 9); Menghapus Vector: vectors.remove(3); Advance method :
public void clear(). Menghapus semua element pada vektor dan membuat isi vektor menjadi kosong, dapat juga menggunakan removeAllElements()
public Object remove(int index). Menghapus
objek
pada
index
yang
ditentukan,
dapat
removeElementAt(int index) method.
public boolean remove(Object element). Menghapus object di awal (head).
k. Difference between ArrayList and Vector 1. (Berdasarkan sinkronasi antar datanya : Syncronization)
juga
menggunakan
ArrayList tidak dalam bentuk tersinkronasi sedangkan Vector setiap data tersinkronasi (bahasa teknisnya : lebih thread safe). 2. (Berdasarkan sinkronasi performa datanya : Syncronization) ArrayList tidak thread safe sehingga performanya lebih baik daripada vector (lebih cepat). Mengapa? Karena sinkronisasi mengakibatkan performance hit. Jadi, jika tidak membutuhkan sinkronasi gunakanlah ArrayList. 3. (Berdasarkan sinkronasi pertumbuhan datanya : Data Growth) ArrayList tidak mempunyai ukuran default, sedangkan Vector memiliki ukuran default yaitu 10. 4. (Berdasarkan pertumbuhan datanya : Data Growth) Arraylist (apabila jumlahnya data sudah = ukurannya), maka ukuran ArrayList akan dinaikan 50 persen dari ukuran sebelumnya. Sedangkan Vector secara default menaikan ukurannya 2 kali lipatnya.
5. (Berdasarkan sinkronasi penggunaan pattern : Usage Pattern) Keduanya menggunakan performa konstan O(1) dan linear O(n-1). Dimana n adalah jumlah data. Namun, jika anda mau menggunakan fitur transfersal dari array, gunakanlah indexnya).
ArrayList
(karena
dapat
diakses
dengan
mudah
langsung
pada
Java Console Module 17 – File Access
Last Update 09/10/2010
Revision 0
1. Module Description Pada pembahasan ini, akan dibahas tentang akses ke File menggunakan Java. 2. Learning Outcomes Diharapkan trainee dapat mengerti tentang cara akses ke file melalui Java. 3. Material a. Deklarasi dan Constructor Class File File dan direktori diakses dan dimanipulasi dengan java.io.File class. Class File sebenarnya tidak menyediakan input dan output ke file. Sederhananya, itu menyediakan sebuah identifier dari file dan direktori. Contoh pendeklarasian dari class File: File f ; atau dengan menggunakan constructornya: File f = new File ("test.txt"); Di dalam Class File, terdapat beberapa jenis constructor :
b. File Separator File separator adalah sebuah karakter yang digunakan untuk memisahkan nama direktori yang membuat sebuah path ke lokasi tertentu. Pada Microsoft Windows, file separator berupa karakter back-slash (\), cth: D:\myproject\myfile\test.txt. Pada OS Mac dan unix, file separator berupa karakter forward slash (/), cth: /myproject/myfile/test.txt.
c. File Method exists Mengecek apakah file atau direktori yang dituju oleh nama path yang abstrak itu ada atau tidak.
createNewFile secara otomatis membuat sebuah file yang baru dan kosong sesuai dengan nama path abstrak jika dan hanya jika file dengan nama yang sama tidak ada.
getName untuk mengembalikan nama file atau direktori yang ditunjukkan oleh nama path yang abstrak.
getPath untuk mengubah nama path yang abstrak ke dalam string nama path.
getParent mengembalikan string nama path parent dari nama path yang abstrak, atau null jika nama path ini bukan merupakan nama dari direktori parent.
isFile Mengecek apakah file yang ditunjukkan oleh nama path yang abstrak adalah file yang normal. lastModified mengembalikan waktu dimana suatu file terakhir kali dimodifikasi.
length mengembalikan ukuran dari file yang ditunjukk oleh nama path yang abstrak. renameTo Mengganti nama file yang ditunjukkan oleh nama path yang abstrak.
Java Console Module 18 – Operating File
Last Update 09/10/2010
Revision 0
1. Module Description Pada pembahasan ini, akan dibahas tentang memanipulasi data dalam file menggunakan Java. 2. Learning Outcomes Diharapkan trainee dapat mengerti dan memanipulasi data dalam file menggunakan Java. 3. Material Java menyediakan package java.io untuk melakukan operasi file. Cara pengaksesan file dibagi menjadi 2 : 1. Sequential Access Stream 2. Random Access File Kebanyakan class mengimplementasi sequential access stream. I/O stream merepresentasikan input source atau output destination. Penting diingat untuk menutup stream yang telah dibuat untuk mengembalikan system source. File diakses secara sequential (berurutan) Beberapa class yang digunakan : - FileReader - Scanner - BufferedReader - FileWriter - PrintWriter - BufferedWriter a. Baca File Cara membaca file dengan menggunakan Scanner:
Cara membaca file dengan menggunakan BufferedReader:
Pada saat membaca file, hal yang perlu diingat adalah: 1. Operasi baca file harus berada dalam try-catch karena mungkin saja terjadi IOException. 2. Pastikan path file yang akan dibaca ditulis dengan benar. 3. Jangan lupa menutup stream yang sudah dibuka dengan menggunakan method close(). b. Tulis File Cara menulis ke file dengan menggunakan PrintWriter:
Cara menulis ke file dengan menggunakan BufferedWriter:
Hal yang perlu diingat dalam menulis data ke file adalah: 1. Operasi tulis file harus berada dalam try-catch karena mungkin saja terjadi IOException. 2. Pastikan path file yang akan dibaca ditulis dengan benar. 3. Jangan lupa menggunakan method flush() supaya tulis file berhasil. 4. Jangan lupa menutup stream yang sudah dibuka dengan menggunakan method close().
Java Console Module 19 - Package
Last Update 09/10/2010
Revision 0
1. Module Description Pada pembahasan topik ini, akan dibahas tentang defenisi dari method dan cara penggunaan dari package di bahasa pemrograman java. 2. Learning Outcomes Diharapkan trainee dapat mengimplementasikan cara penggunaan package di bahasa pemrograman java. 3. Material a. Package Package adalah sekumpulan types yang berhubungan yang menyediakan proteksi dan name space management. Types di sini maksudnya adalah class dan interface. Kegunaan package antara lain: -
membuat types mudah ditemukan dan digunakan
-
untuk mencegah penamaan yang sama
-
untuk kontrol access yang lebih baik.
Membuat package Untuk membuat package kita perlu menambahkan package statement. Beberapa hal yang perlu diperhatikan: a.
package statement harus di baris pertama dalam coding.
b.
Hanya ada 1 package statement dalam setiap source file.
c.
package statement berlaku untuk semua types dalam file.
Contoh:
//in the Draggable.java file
package graphics; public interface Draggable { ... } //in the Graphic.java file package graphics; public abstract class Graphic { ... } //in the Circle.java file package graphics; public class Circle extends Graphic implements Draggable { ... } //in the Rectangle.java file package graphics; public class Rectangle extends Graphic implements Draggable { ... } //in the Point.java file package graphics; public class Point extends Graphic implements Draggable { ... } //in the Line.java file package graphics; public class Line extends Graphic implements Draggable { ... }
Jika kita tidak menambahkan package statement, maka types yang kita buat termasuk ke dalam unnamed / no name package. Untuk penamaan package sebaiknya menggunakan huruf kecil untuk mencegah konflik dengan nama types. Ada naming convention untuk penamaan package dengan tujuan menghindari dua programmer menggunakan nama package yang sama. Contoh:
com.example.orion untuk package orion yang dibuat oleh programmer di example.com. Menggunakan package Ada beberapa cara untuk menggunakan package: menggunakan qualified names Contoh: untuk class Rectangle di dalam package graphics.
Menggunakan import statement untuk meng-import package import statement diletakkan pada awal file sebelum semua pendefinisian tetapi setelah package statement. Kita dapat mengimport types yang kita perlukan saja:
Asteriks Meng-import seluruh package dengan menggunakan asteriks (*) sebagai wildcard:
Beberapa hal yang perlu diperhatikan: a.
Java compiler secara otomatis mengimport seluruh package untuk: 1) no name package 2) java.lang 3) package tempat source file berada. Jadi kita tidak perlu untuk mengimport package tersebut.
b. Asteriks (*) merujuk ke semua types yang ada dalam package tapi tidak termasuk package yang ada di dalam package tersebut. Contoh:
c. classpath. import static
Import static digunakan untuk mengimport semua static member dari suatu kelas. Contoh:
Java Console Module 20 - Thread
Last Update 09/10/2010
Revision 0
1. Module Description Pada pembahasan ini, akan dibahas tentang Threading dalam Java. 2. Learning Outcomes Diharapkan trainee dapat mengerti dan menggunakan Threading dalam Java. 3. Material a. Pengantar Suatu proses dikontrol oleh paling sedikit satu thread. Namun, sebagian besar proses yang ada sekarang biasanya dijalankan oleh beberapa buah thread. Multithreading adalah sebuah mekanisme di mana dalam suatu proses, ada beberapa thread yang mengerjakan tugasnya masing-masing pada waktu yang bersamaan. Contohnya, sebuah web browser harus menampilkan sebuah halaman yang memuat banyak gambar. Pada program yang single-threaded, hanya ada satu thread untuk mengatur suatu gambar, lalu jika gambar itu telah ditampilkan, barulah gambar lain bisa diproses. Dengan multithreading, proses bisa dilakukan lebih cepat jika ada thread yang menampilkan gambar pertama, lalu thread lain untuk menampilkan gambar kedua, dan seterusnya, di mana thread-thread tersebut berjalan secara parallel (bersamaan). Saat sebuah program Java dieksekusi, yaitu saat main() dijalankan, ada sebuah thread utama yang bekerja. Java adalah bahasa pemrograman yang mendukung adanya pembentukan thread tambahan selain thread utama tersebut. Thread dalam Java diatur oleh Java Virtual Machine(JVM). Jadi Java memungkinkan kita untuk dapat melakukan banyak tugas (multiple task) pada waktu yang bersamaan. b. Class Thread Thread Constructors Constructor Keterangan Thread() Membuat sebuah object Thread yang baru. Thread(String name) Membuat sebuah object thread dengan memberikan penamaan yang spesifik. Thread(Runnable target) Membuat sebuah object Thread yang baru berdasar pada object Runnable. Target menyatakan sebuah object dimana method run dipanggil. Thread(Runnable target, String Membuat sebuah object Thread yang name) baru dengan nama yang spesifik dan berdasarkan pada object Runnable.
Thread Methods Method public static Thread currentThread() public final String getName() public final void setName(String name)
public final int getPriority() public final boolean isAlive() public final void join([long millis, [int nanos]])
public millis)
static
void
public void run()
sleep(long
Keterangan Mengembalikan sebuah reference kepada thread yang sedang berjalan. Mengembalikan nama dari thread. Mengulang pemberian nama thread sesuai dengan argument name. Hal ini dapat menyebabkan SecurityException. Mengembalikan nilai prioritas yang telah diberikan kepada thread tersebut. Menunjukkan bahwa thread tersebut sedang berjalan atau tidak. Sebuah overloading method. Sebuah thread yang sedang berjalan, harus menunggu sampai thread tersebut selesai (jika tidak ada parameter-parameter spesifik), atau sampai waktu yang telah ditentukan habis. Menunda thread dalam jangka waktu milis. Hal ini dapat menyebabkan InterruptedException. Eksekusi thread dimulai dari method ini.
c. Membuat Thread Ada dua cara untuk membuat thread di program Java, yaitu Extends kelas Thread ( java.lang.Thread ) Berikut ini adalah contoh kelas yang menggunakan cara pertama untuk membuat thread,yaitu dengan meng-extends kelas Thread
Program akan memberikan keluaran yang berbeda pada setiap eksekusi. Berikut ini adalah contoh dari keluarannya:
Implements interface Runnable ( java.lang.runnable ) Cara lain untuk membuat sendiri sebuah thread adalah dengan mengimplementasikan interface Runnable. Kita memerlukan metode override pada fungsi run() ke kelas kita yang merupakan satu-satunya metode yang perlu diimplementasikan. Fungsi run() berisi logika dari thread. Contoh dibawah ini hampir sama dengan contoh extends kelas Thread namun contoh dibawah ini akan mengimplement interface Runnable.
Prosedur dalam pembuatan thread berdasarkan runnable interface adalah sebagai berikut : 1. Pengimplementasikan kelas runnable interface ke dalam kelas, menyediakan method run() yang akan di eksekusi oleh thread. Sebuah object dari kelas ini merupakan runnable object. 2. Sebuah object dari kelas thread dibuah dengan melewatkan sebuah runnable object sebagai argument kepada constructor thread. 3. Method start() dipanggil pada object thread untuk memulai pembuatan thread. Thread object berakhir ketika fungsi run() berakhir, baik dengan penyelesaian secara normal maupun dengan uncaught exception. d. Extends vs Implement Dari dua cara untuk menciptakan thread seperti diatas, memilih salah satu dari kedua cara tersebut bukanlah sebuah permasalahan. Implement sebuah interface Runnable menyebabkan lebih banyak pekerjaan yang harus dilakukan karena kita harus mendeklarasikan sebuah object Thread dan memanggil method Thread dari object ini. Sedangkan menurunkan (extend) sebuah class Thread, bagaimanapun menyebabkan class Anda tidak dapat menjadi turunan dari class yang lainnya karena Java tidak memperbolehkan adanya multiple inheritance. Sebuah pilihan antara mudah tidaknya untuk diimplementasikan (implement) dan kemungkinan untuk membuat turunan (extend) adalah sesuatu yang harus Anda tentukan sendiri. Perhatikan mana yang lebih penting bagi Anda karena keputusan ada ditangan Anda. e. Penggabungan Thread Tujuan multithreading adalah agar thread-thread melakukan pekerjaan secara paralel sehingga program dapat berjalan dengan lebih baik. Thread tambahan yang dibuat akan berjalan secara terpisah dari thread yang membuatnya. Namun, ada
keadaan tertentu di mana thread utama perlu menunggu sampai thread yang dibuatnya itu menyelesaikan tugasnya. Misalnya saja, untuk bisa mengerjakan instruksi selanjutnya, thread utama membutuhkan hasil penghitungan yang dilakukan oleh thread anak. Pada keadaan seperti ini, thread utama bisa menunggu selesainya pekerjaan thread anak dengan pemanggilan method join(). Contohnya, dalam suatu program, thread utama membuat sebuah thread tambahan bernama t1.
Kode di atas menunjukkan bahwa thread utama akan menunggu sampai thread t1 menyelesaikan tugasnya, yaitu sampai method run() dari t1 terminate, baru melanjutkan tugasnya sendiri. Pemanggilan method join() harus diletakkan dalam suatu blok try- catch karena jika pemanggilan tersebut terjadi ketika thread utama sedang diinterupsi oleh thread lain, maka join() akan melempar InterruptedException. InterruptedException akan mengakibatkan terminasi thread yang sedang berada dalam status blocked f.
Pembatalan Thread Pembatalan thread adalah menterminasi sebuah thread sebelum tugasnya selesai. Thread yang akan dibatalkan, atau biasa disebut target thread, dapat dibatalkan dengan dua cara, yaitu asynchronous cancellation dan deferred cancellation. Pada asynchoronous cancellation, sebuah thread langsung menterminasi target thread. Sedangkan pada deferred cancellation, target thread secara berkala memeriksa apakah ia harus terminate sehingga dapat memilih saat yang aman untuk terminate. Pada thread Java, asynchronous cancellation dilakukan dengan pemanggilan method stop(). Akan tetapi, method ini sudah di-deprecated karena terbukti tidak aman karena dapat mengakibatkan terjadinya exception ThreadDeath. ThreadDeath dapat mematikan thread-thread secara diam-diam, sehingga user mungkin saja tidak mendapat peringatan bahwa programnya tidak berjalan dengan benar. Cara yang lebih aman untuk membatalkan thread Java adalah dengan deferred cancellation. Pembatalan ini dapat dilakukan dengan pemanggilan method interrupt(), yang akan menge-set status interupsi pada target thread. Sementara itu, target thread dapat memeriksa status interupsi-nya dengan method isInterrupted().
Suatu thread dari kelas CobaThread3 dapat diinterupsi dengan kode berikut: Thread targetThread = new Thread (new CobaThread3()); targetThread.start(); …targetThread.interrupt(); //set status interupsi
Ketika thread targetThread berada padastart(), thread tersebut akan terus me-loop pada method run() dan melakukan pengecekan status interupsi melalui method isInterrupted(). Status interupsinya sendiri hanya akan di-set ketika pemanggilan method interrupt(), yang ditunjukkan dengan statement targetThread.interrupt();. Setelah status interupsi di-set, ketika pengecekan status interupsi selanjutnya pada method run(), isInterrupted() akan mengembalikan nilai boolean true, sehingga targetThread akan keluar dari method run()-nya melalui statement break dan terminate. Selain melalui isInterrupted(), pengecekan status interupsi dapat dilakukan dengan method interrupted(). Perbedaan kedua method ini adalah isInterrupted() akan mempertahankan status interupsi, sedangkan pada interrupted(), status interupsi akan di-clear. Thread yang statusnya sedang blocked karena melakukan operasi M/K menggunakan package java.io tidak dapat memeriksa status interupsinya sebelum operasi M/K itu selesai. Namun, melalui Java 1.4 diperkenalkan package java.nio yang mendukung interupsi thread yang sedang melakukan operasi M/K. g. Management Thread Java menyediakan beberapa fasilitas API untuk mengatur thread — thread, diantaranya adalah: Method Suspend() Sleep()
Resume() Stop()
Fungsi untuk menunda eksekusi dari thread yang sedang berjalan. untuk menempatkan thread yang sedang berjalan untuk tidur dalam beberapa waktu. hasil eksekusi dari thread yang sedang ditunda. menghentikan eksekusi dari sebuah thread; sekali thread telah dihentikan dia tidak akan memulainya lagi.
Setiap method yang berbeda untuk mengontrol keadaan dari thread mungkin akan berguna dalam situasi tertentu. Sebagai contoh: Applets adalah contoh alami untuk multithreading karena mereka biasanya memiliki grafik, animasi, dan audio — semuanya sangat baik untuk mengatur berbagai thread yang terpisah. Bagaimana pun, itu tidak akan mungkin bagi sebuah applet untuk berjalan ketika dia sedang tidak ditampilkan, jika applet sedang menjalankan CPU secara intensif. Sebuah cara untuk menangani situasi ini adalah dengan menjalankan applet sebagai thread terpisah dari kontrol, menunda thread ketika applet sedang tidak ditampilkan dan melaporkannya ketika applet ditampilkan kembali. Anda dapat melakukannya dengan mencatat bahwa start() method dari sebuah applet dipanggil ketika applet tersebut pertama kali ditampilkan. Apabila user meninggalkan halaman web atau applet keluar dari tampilan, maka method stop() pada applet dipanggil (ini merupakan suatu keuntungan karena start() dan stop() keduanya terasosiasi dengan thread dan applet). Jika user kembali ke halaman web applet, kemudian start() method dipanggil kembali. Destroy() method dari sebuah applet dipanggil ketika applet tersebut dipindahkan dari cache-nya browser. Ini memungkinkan untuk mencegah sebuah applet berjalan ketika applet tersebut sedang tidak ditampilkan pada sebuah web browser dengan menggunakan stop()
method dari applet yang ditunda dan melaporkan eksekusi tersebut pada thread di applet start() method. h. Keadaan Thread Sebuah thread java dapat menjadi satu dari 4 kemungkinan keadaan: 1. New Sebuah thread pada keadaan ini ada ketika objek dari thread tersebut dibuat. 2. Runnable Memanggil start() method untuk mengalokasikan memori bagi thread baru dalam JVM dan memanggil run() method untuk membuat objek. 3. Block Sebuah thread akan diblok jika menampilkan sebuah kalimat pengeblokan. Contohnya: sleep() atau suspend(). 4. Dead Sebuah thread dipindahkan ke keadaan dead ketika run() method berhenti atau ketika stop() method dipanggil.
i.
Sinkronisasi Sampai sejauh ini, Anda telah melihat contoh-contoh dari thread yang berjalan bersama-sama tetapi tidak bergantung satu dengan yang lainnya. Thread tersebut adalah thread yang berjalan sendiri tanpa memperhatikan status dan aktifitas dari thread lain yang sedang berjalan. Pada contoh tersebut, setiap thread tidak membutuhkan resource atau method dari luar sehingga ia tidak membutuhkan komunikasi dengan thread lain. Didalam situasi-situasi tertentu, bagaimanapun sebuah thread yang berjalan bersama-sama kadang-kadang membutuhkan resource atau method dari luar. Oleh karena itu, mereka butuh untuk berkomunikasi satu dengan yang lain sehingga dapat mengetahui status dan aktifitas mereka. Contohnya adalah pada permasalahan produsen-konsumen. Kasus ini membutuhkan dua object utama, yaitu produsen dan konsumen. Kewajiban yang dimiliki oleh produsen adalah untuk membangkitkan nilai atau stream data yang konsumen inginkan. Contoh :
Program ini diharapkan dapat mencetak dua argument object Runnable secara berurutan. Permasalahannya adalah, pendeklarasian method sleep akan menyebabkan thread yang lain akan dieksekusi walaupun thread yang pertama belum selesai dijalankan pada saat eksekusi method print dari class TwoStrings. Berikut ini adalah contoh dari keluarannya.
Pada saat berjalan, ketiga thread telah mencetak argument string pertama mereka sebelum argument kedua dicetak. Sehingga hasilnya adalah sebuah keluaran yang tidak jelas. Sebenarnya, pada contoh diatas, tidak menunjukkan permasalahan yang serius. Akan tetapi pada aplikasi yang lain hal ini dapat menimbulkan exception atau permasalahan-permasalahan tertentu. j.
Komunikasi Antar Thread (Interthread) Pada bagian ini, Anda akan mempelajari mengenai method-method dasar yang digunakan thread untuk berkomunikasi dengan thread lain yang sedang berjalan. Method Keterangan public final void wait() Menyebabkan thread ini menunggu sampai thread yang lain memanggil notify atau notifyAll method dari object ini. Hal ini
public final void notify()
public final void notifyAll()
dapat menyebabkan InterruptedException Membangunkan thread yang telah memanggil method wait dari object yang sama. Membangunkan semua thread yang telah memanggil method wait dari object yang sama.
Untuk mendapatkan penjelasan dari method ini, perhatikanlah skenario pelayanpelanggan. Pada skenario di sebuah restoran, seorang pelayan tidak akan menanyakan ke setiap orang apakah mereka akan memesan atau membutuhkan sesuatu, akan tetapi ia akan menunggu sampai pelanggan datang ke restoran tersebut. Pada saat seseorang datang, hal ini mengindikasikan bahwa ia mempunyai keinginan untuk memesan makanan dari restaurant tersebut. Atau juga bisa kita juga bisa kita nyatakan bahwa pelanggan yang memasuki restaurant mengindikasikan (notify) bahwa pelayan dibutuhkan untuk memberikan pelayanan. Akan tetapi,dalam kondisi sepert ini, seorang pelanggan belum siap untuk memesan. Akan sangat mengganggu apabila pelayan terus-menerus bertanya kepada pelanggan apakah ia telah siap untuk memesan atau tidak. Oleh karena itu, pelayan akan menunggu (wait) sampai pelanggan memberikan tanda (notifies) bahwa ia telah siap untuk memesan. Sekali pelanggan sudah memesan, akan sangat mengganggu apabila ia terus menerus bertanya kepada pelayan, apakah pesanannya sudah tersedia atau tidak. Normalnya, pelanggan akan menunggu sampai pelayan memberikan tanda (notifies) dan kemudian menyajikan makanan. Perhatikan pada skenario berikut, setiap anggota yang menunggu, hanya akan berjalan sampai anggota yang lain memberi tanda yang memerintahkan untuk berjalan. Hal ini sama dengan yang terjadi pada thread.
k. Contoh Produsen-Konsumen Contoh dibawah ini adalah salah satu implementasi dari permasalahan produsen konsumen. Sebuah kelas yang menyediakan method untuk membangkitkan dan mengurangi nilai dari integer yang dipisahkan dari class Produsen dan Konsumen thread.
Dibawah ini adalah contoh dari keluaran program :
Hasil tersebut bukanlah hasil yang kita harapkan. Kita berharap bahwa setiap nilai yang diproduksi oleh produser dan juga kita akan mengasumsikan bahwa konsumen akan mendapatkan value tersebut. Dibawah ini adalah keluaran yang kita harapkan.
Untuk memperbaiki kode diatas, kita akan menggunakan method untuk komunikasi interthread. Implementasi dibawah ini adalah implementasi dari permasalahan produsen konsumen dengan menggunakan method untuk komunikasi inter-thread.