Showing posts with label dasar. Show all posts
Showing posts with label dasar. Show all posts

Tuesday, May 27, 2008

Tipe Data Primitif

Pengenalan

Tipe data primitif adalah tipe data dasar yang dikenali oleh Java dan bukan merupakan class.

Walaupun kelihatan sepele, tetapi dengan memahami cara penggunaan dan mengetahui nilai-nilai yang dapat ditampung oleh variabel data ini dapat mempermudah pekerjaan kita.

Terutama sekali bagi seorang programmer Java yang sehari-harinya berhadapan dengan berbagai macam data dan manipulasinya. Data ini bisa berasal dari database server, text, web, dsbnya...

Tipe data primitif ini dapat dikenali dengan ciri sebagai berikut :

  • memiliki keyword huruf kecil semuanya

  • memiliki wrapper class, yaitu class yang membantu untuk mewakili dan mengolah lebih lanjut nilai dari tipe data bersangkutan. Misalkan int dengan, class Integer.

  • karena bukan suatu class, untuk inisialisasi variabel tidak menggunakan keyword new


Rentang Nilai

Berikut adalah daftar tipe data primitif, rentang nilainya dan panjang bit-nya.

No

Tipe Data

Range Nilai dan Panjang Bit

1

byte

-128 s/d 127 (8 bit)

2

short

-32,768 s/d 32,767 (16 bit)

3

int

-2,147,483,648 s/d 2,147,483,647 (32 bit)

4

long

-9,223,372,036,854,775,808 s/d 9,223,372,036,854,775,807 (64 bit)

5

float

Nilai pecahan (32 bit)

6

double

Nilai pecahan (64 bit)

7

boolean

true / false (1 bit)

8

char

'\u0000' (0) s/d '\uffff' (65,535) (16 bit)

Keterangan :


Nilai Default


No

Tipe Data

Nilai Default

1

byte

0

2

short

0

3

int

0

4

long

0L

5

float

0.0f

6

double

0.0d

7

boolean

false

8

char

'\u0000' (0)

Keterangan:

  • Semua angka bilangan bulat secara default adalah bertipe int. Oleh sebab itu perlu digunakan suffix L untuk menyatakan bilangan bulat yang bertipe long , apalagi jika nilai bilangan bulat yang digunakan sudah melewati jangkauan nilai int.

  • Sebaliknya untuk bilangan pecahan, secara default tipenya adalah double. Sehingga untuk semua nilai pecahan yang akan dimasukkan sebagai nilai untuk tipe data float ini, maka perlu diberikan suffix f.

Contoh Penggunaan Yang Benar


int nilai1 = 20;

long nilai2 = 1000;

long nilai3 = 23000L;

float nilai4 = 90;

float nilai5 = 1.24f;

double nilai6 = 100;

double nilai7 = 2010.9311;

double nilai8 = 2.0109311e3; //sama dengan nilai7 (2.0109311 dikalikan 10 pangkat 3)

double nilai9 = 11.2d;

long nilai_maks_long = 9223372036854775807L;

char nilai10 = 0;

char nilai11 = 'b';

char nilai12 = '\u0003';

boolean kondisi = true;


Contoh Penggunaan Yang Salah


long nilai_maks_long = 9223372036854775807; //harus menggunakan suffix L karena sudah di luar range int

float nilai13 = 0.03; //harus menggunakan suffix f

char nilai14 = '\u01'; //harus menggunakan format '\u9999' (\u diikuti 4 digit hexadecimal)



Referensi
  1. Sun's Java Tutorial, Primitive Data Types section.


Sunday, May 11, 2008

Static Factory Method dan Contoh Penggunaannya

Kita sebagai programmer Java sering sekali langsung menggunakan operator new untuk melakukan konstruksi dan inisialisasi class kita menjadi object. Kita bisa menggunakan cara lain, yaitu dengan factory method.

Apa sebenarnya fungsi operator new ?

Dengan bahasa yang sangat teknis maka fungsi operator new adalah melakukan konstruksi dan inisialisasi class kita dengan melakukan alokasi memori untuk objek baru dan mengembalikan referensi memori dari objek tersebut. Operator ini juga akan menjalankan metode constructor.

Constructor sendiri adalah method yang namanya sama dengan nama class yang kita definisikan. Contoh penggunaan constructor dan operator new adalah seperti pada listing kedua class Java di bawah ini.

RowData.java

import java.text.SimpleDateFormat;
import java.util.Date;


public class RowData {
private int numberOfFields;
private Date currentDate;

public RowData() {
this.numberOfFields = 0;

currentDate = new Date();
}

public void printCurrentDate()
{
SimpleDateFormat df = new SimpleDateFormat("MM/dd/yyyy");
System.out.println(df.format(currentDate));
}

}


InstantiateRowData .java

public class InstantiateRowData {

public static void main(String[] args)
{
/*
**********************************
* Konstruksi objek
* dengan memanggil operator new
* secara langsung dari luar class
**********************************
*/
RowData c = new RowData();

c.printCurrentDate();
}
}


Factory Method

Factory method adalah method yang memiliki fungsi khusus untuk melakukan konstruksi class menjadi objek dan mengembalikan referensi objek tersebut.

Method ini harus bersifat static dan ditempelkan ke dalam class tersebut. Dan untuk menjamin bahwa kita tidak akan bisa melakukan konstruksi langsung maka secara eksplisit method constructor harus diubah diberi akses private.

Lihatlah kedua class setelah diubah konstruksinya.

RowData.java

import java.text.SimpleDateFormat;
import java.util.Date;


public class RowData {
private int numberOfFields;
private Date currentDate;

private RowData() {
this.numberOfFields = 0;

currentDate = new Date();
}

public static RowData getRowData()
{
return new RowData();
}

public void printCurrentDate()
{
SimpleDateFormat df = new SimpleDateFormat("MM/dd/yyyy");
System.out.println(df.format(currentDate));
}

}

Perhatikan di baris 9 bahwa constructor kita telah diberi akses private dari yang sebelumnya bersifat public sehingga operator new tidak mungkin dapat mencapainya lagi dari luar class RowData. Kita menggantikannya dengan suatu method static getRowData() yang bersifat public. Di dalam method ini kita kembali melakukan konstruksi objek dengan operator new.

InstantiateRowData.java

public class InstantiateRowData {

public static void main(String[] args)
{
/*
**********************************
* Konstruksi objek
* dengan memanggil
* factory method
**********************************
*/
RowData c = RowData.getRowData();

c.printCurrentDate();
}
}
Kegunaan Factory Method

Walaupun kelihatan sangat sederhana, tetapi apabila kita sudah makin mahir dalam melakukan coding di Java dan menangani proyek yang makin lama skalanya semakin besar maka akan ada kebutuhan untuk membuat aplikasi yang bersifat concurrent atau yang bersifat parallel multi threading. Kondisi ini membuat kita membutuhkan teknik coding yang makin kompleks dan sophisticated. Salah satunya adalah menghindarkan konstruksi objek setengah jadi (half-constructed object) yang dapat terekspos melalui method constructor. Dan ini bisa dipecahkan dengan sangat baik melalui teknik factory method ini.

Selain itu factory method ini juga sudah menjadi bagian dari design pattern yang merupakan kumpulan pola coding yang bisa digunakan kembali sesuai kasus atau reusable.

Download File-file Contoh

Ok, buat Anda yang malas mengetik lagi atau tidak ada editor memadai dan ingin kompilasi langsung dan lihat efeknya silahkan download file-file contohnya di sini.

Sunday, March 2, 2008

Java 5 : Apa itu Generic ?

Generic diperkenalkan pada Java versi 5. Apa sebenarnya generic itu ? Kenapa sampai diperlukan generic ? Berikut saya akan coba uraikan latar belakang dan cara penggunaan generic ini.

Latar Belakang

Generic dikenal juga sebagai tipe data berparameter (parameterized types), yaitu tipe data yang biasanya didefinisikan di bagian argumen/parameter dan bersifat generik atau dikenali pada saat runtime.

Jika kita memiliki data untype (bertipe Object), maka biasanya kita melakukan casting untuk mengambil nilainya. Kesalahan konversi tipe data ini pada saat runtime sangat mungkin dan sering sekali terjadi. Untuk menghindarinya inilah kita perlu menempatkan tipe data generic ini.

Mari kita buat satu contoh konkret....

ArrayList adalah sebuah class yang sangat berguna dan merupakan bagian dari tipe data Collection. ArrayList bisa menampung data dalam bentuk list dengan Object sebagai nilainya.

Dengan demikian, input atau masukan nilai ke objek bertipe ArrayList ini sangatlah flexible karena seperti yang kita tahu, semua class di Java pasti diturunkan dari class Object.

Pada contoh class BeforeGeneric1 di bawah ini, objek arrList bertipe ArrayList dan dapat menerima 3 input. Kita beri nilai masing-masing 10, new Integer(100), dan "Hello World".

Ketiganya adalah tipe data yang berbeda satu sama lain tetapi valid.



import java.util.ArrayList;
import java.util.List;

public class BeforeGeneric1 {
public static void main(String[] args) {
List arrList = new ArrayList();

arrList.add(10);
arrList.add(new Integer(100));
arrList.add("Hello World !");
}
}



Untuk mengambil kembali nilai yang disimpan oleh arrList ini maka kita harus "hafal" urutan input dengan meta / tipe datanya masing-masing. Kita modifikasi kode di atas sehingga menjadi seperti berikut ini.

Contoh:


import java.util.ArrayList;
import java.util.List;

public class BeforeGeneric1 {
public static void main(String[] args) {
List arrList = new ArrayList();

arrList.add(10);
arrList.add(new Integer(100));
arrList.add("Hello World !");


int a = ((Integer) arrList.get(0)).intValue(); //casting ke int
Integer b = (Integer) arrList.get(1); //casting kembali ke objek bertipe Integer
String c = (String) arrList.get(2); //casting kembali ke objek bertipe String

System.out.println(a);
System.out.println(b);
System.out.println(c);
}
}



Output:

10
100
Hello World !


Perhatikan bahwa untuk setiap akses nilai dari arrList ini, kita perlu melakukan konversi (casting) untuk tiap variabel dengan benar sesuai tipe data asalnya sehingga tidak terjadi error.

Jika kita melakukan kesalahan casting maka pada saat kompilasi akan diberikan pesan error seperti pada contoh di bawah ini.

Contoh:


import java.util.ArrayList;
import java.util.List;

public class BeforeGeneric1 {
public static void main(String[] args) {
List arrList = new ArrayList();

arrList.add(10);
arrList.add(new Integer(100));
arrList.add("Hello World !");


int a = ((Integer) arrList.get(0)).intValue(); //casting ke int
Integer b = (Integer) arrList.get(1); //casting kembali ke objek bertipe Integer
String c = (Integer) arrList.get(2); //casting kembali ke objek bertipe String

System.out.println(a);
System.out.println(b);
System.out.println(c);
}
}



Error Output:

BeforeGeneric1.java:15: incompatible types
found : java.lang.Integer
required: java.lang.String
String c = (Integer) arrList.get(2); //casting kembali ke objek
bertipe String
^
Note: BeforeGeneric1.java uses unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.
1 error

Tidak Ada Kesalahan Pada Saat Kompilasi

Pada prakteknya biasanya ArrayList ini digunakan untuk menyimpan list dengan tipe data yang sama dan diakses dengan melakukan iterasi (perulangan .loop).

Masalah kemudian timbul apabila pada saat kita mengambil nilai dari list tersebut dan terjadi kesalahan casting.

Lihat contoh berikut di bawah ini. Pada saat kompilasi kode ini tidak akan terjadi error karena compiler belum "mengenali" kesalahan tersebut. Error hanya akan terlihat setelah hasil kompilasi tersebut dijalankan atau pada saat runtime.


Contoh:


import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

public class BeforeGeneric2 {
public static void main(String[] args) {
List arrList = new ArrayList();
for (int i = 0; i < 10; i++) {
arrList.add("Hello World");
}

Iterator i = arrList.iterator();

System.out.println("Deretan Angka Genap");
System.out.println("===================");
while (i.hasNext()) {
int a;
a = (Integer) i.next() * 2;
System.out.print("Hasil = " + a + "\n");
}
}
}


Error Output:
Deretan Angka Genap
===================
Exception in thread "main" java.lang.ClassCastException: java.lang.String
at BeforeGeneric2.main(BeforeGeneric2.java:19)


Generic Sebagai Penyelamat

Untuk mengatasi hal tersebut di atas, maka digunakanlah suatu "parameter tipe" pada saat deklarasi objek yang disebut dengan generic.

Syntaxnya kira-kira sebagai berikut :

Class<tipe> objek = new Class<tipe>();

Untuk kasus di atas kita menetapkan bahwa tipe yang akan kita gunakan adalah Integer. Maka code di atas kita ubah menjadi :



import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

public class AfterGeneric {
public static void main(String[] args) {
List arrList = new ArrayList();
for (int i = 0; i < 10; i++) {
arrList.add(i);
}

Iterator i = arrList.iterator();

System.out.println("Deretan Angka Genap");
System.out.println("===================");
while (i.hasNext()) {
int a;
a = i.next() * 2;
System.out.print("Hasil = " + a + "\n");
}
}
}

Output:
Deretan Angka Genap
===================
Hasil = 0
Hasil = 2
Hasil = 4
Hasil = 6
Hasil = 8
Hasil = 10
Hasil = 12
Hasil = 14
Hasil = 16
Hasil = 18


Dari kode di atas dapat dilihat bahwa kita "menetapkan" bahwa tipe data yang diterima oleh ArrList harus berupa Integer atau int, sedangkan tipe lain akan mengalami error pada saat kompilasi.

Ini kelihatan seperti array, lalu apa kelebihannya Generic ?

Salah satu permasalahan dengan menggunakan array adalah kita harus menetapkan jumlah elemen di array pada saat deklarasi, contohnya :

  Integer[] a = new Integer[5];


Sedangkan pada penggunaan generic, kita cukup mendeklarasikan :

  List<Integer> arrList = new ArrayList<Integer>();


dan kita bisa mengalokasikan jumlah elemen secara dinamis karena ArrayList merupakan collection di dalam Java.


Bacaan Lebih Lanjut

Untuk bacaan lebih lanjut penulis menyarankan buku "Java Generics and Collections" terbitan O'Reilly.

Saturday, March 1, 2008

Memulai Programming Java #1- Instalasi di Windows

Pendahuluan

"Bagaimana saya memulai programming Java ?"

Pertanyaan di atas seringkali diajukan pada saat kita ingin belajar programming dengan bahasa Java,
  • Apa yang harus diinstal terlebih dahulu ?
  • Bagaimana saya menulis code dan kompilasi ? Bagaimana saya menjalankan program tersebut ?
  • dan seterusnya...
Oleh karena itu saya tertarik untuk menulis 2 rangkaian artikel dengan topik "Memulai Programming Java" ini, terdiri dari :
1. Instalasi Java
2. Menulis aplikasi sederhana, "Hello World" !

Instalasi Java

Updated : Versi lain untuk artikel instalasi ini tersedia di situs Google Sites, silahkan klik disini.

Sebelum saya memulai dengan langkah-langkah instalasi Java, perlu diluruskan dulu bahwa Java sebenarnya terdiri dari atas 2 pengertian, yaitu :
  1. Teknologi Java sebagai suatu platform yang biasa disebut sebagai Java Runtime Environment (JRE). Platform ini diperlukan sebagai lapisan atau layer untuk menjalankan program Java yang telah dikompilasi (bytecode).

    Untuk melakukan kompilasi kita memerlukan tools tambahan yang ditambahkan ke dalam JRE dan dikenal sebagai Java Development Kit (JDK). Jadi di dalam JDK sendiri secara otomatis sudah terdapat platform JRE.

  2. Bahasa programming Java.

    Bahasa inilah yang mungkin dirujuk sebagai "Java" secara umum. Java merupakan bahasa Object Oriented Programming yang bisa diklaim telah diimplementasikan secara penuh . OOP di Java merupakan pengembangan lebih lanjut dari dari bahasa C++.



JRE dan JDK merupakan suatu aplikasi/program yang perlu diinstalasi terlebih dahulu. Paket untuk JRE dan JDK tersedia untuk berbagai sistem operasi populer seperti Microsoft Windows, Macintosh, Unix, Linux, dan Solaris.

Karena ketersediaan JRE/JDK yang multi-platform dan karena aplikasi Java berjalan di atas JRE ini, maka seringkali teknologi Java dikenal dengan motto "Write Once Run Everywhere" (Ditulis sekali saja untuk satu platform tetapi dapat dijalankan di berbagai platform sistem operasi).

Jadi setelah konsep-konsep Java kita "luruskan" dengan keterangan di atas, sekarang kita melangkah ke instalasi JDK.

Instalasi Java Development Kit (JDK)
  1. Download
    • Masuk ke situs http://java.sun.com/javase/downloads/index.jsp
    • Pilih paket JDK terbaru (pada saat penulisan JDK sudah memasuki versi 6 update 5 seperti terlihat pada gambar di bawah ini). Klik tombol Download.



    • Pilih paket sesuai sistem operasi yang kita gunakan. Untuk contoh, saya pilih Microsoft Windows.
    • Klik "Accept" dan pilih link "Windows Offline Installation, Multi Language"


    • Sering sekali kita masih diminta registrasi account di Sun untuk melanjutkan download. Apabila kita sudah memiliki account Sun kita tinggal login saja, tetapi apabila belum maka lakukan registrasi terlebih dulu.

    • Download paket JDK.

  2. Jalankan program yang telah kita download tersebut.
    • Jalankan setup program jdk-6u5-windows-i586-p.exe atau sesuai yang Anda download.
    • Muncul dialog awal instalasi JDK


    • Tekan Accept untuk menerima persetujuan lisensi dari Sun.



    • Pilih semua fitur yang kita inginkan pada langkah "Custom Setup" dan tekan next untuk melanjutkan. Perhatikan bahwa folder instalasi adalah di C:\Program Files\Java\jdk1.6.0_05



    • Akan keluar progress dialog untuk instalasi JDK. Tunggu hingga selesai.



    • Setelah selesai melakukan instalasi JDK akan dilanjutkan dengan instalasi JRE seperti terlihat pada gambar di bawah. Lanjutkan dengan mengklik tombol Next.



    • Akan keluar progress dialog untuk instalasi JRE.


    • Setelah selesai, klik tombol Finish.



  3. Set environment variable, %PATH%.
    • Klik "Start" pada sistem Windows Anda
    • Klik kanan icon "My Computer", pilih "Properties"



    • Pada dialog "System Properties", klik tab "Advanced" kemudian dilanjutkan dengan klik tombol "Environment Variables"


    • Cari variable "Path" pada bagian System variables dan klik edit.


    • Tambahkan satu nilai pada Variable Value yaitu folder binary instalasi JDK. Untuk contoh pada blog ini maka path kita adalah C:\Program Files\Java\jdk1.6.0_05\bin. Perhatikan pada gambar bahwa antar satu path/folder yang satu dengan path yang lain kita pisahkan dengan tanda titik koma.



    • Klik tombol OK
    • Selesai
  4. Test hasil instalasi kita di Windows.
    • Masuk ke command prompt (Start => Command Prompt atau Start=>Run=>cmd )
    • Ketik "java -version" dan apabila berhasil akan menghasilkan output sebagai berikut :


    • Ketik "javac -version" dan apabila berhasil akan menghasilkan output sebagai berikut:


    • Selesai


Demikian uraian instalasi Java yang disertai dengan screenshot, semoga bisa membantu terutama para "Newbie" di Java untuk memahami hal teknis seputar instalasi Java.