Constructor
Constructor adalah method yang spesial, karena mempunyai aturan-aturan sebagai berikut :
- mempunyai nama yang sama persis dengan nama class.
- tidak mempunyai tipe return.
- digunakan untuk menginstansi object.
- hanya mempunyai access modifier, tidak ada keyword lain yang di letakkan sebelum nama method pada deklarasi constructor.
Seperti halnya method pada umumnya, constructor bisa mempunyai parameter serta melempar (throws) exception. Constructor yang tidak mempunyai parameter disebut dengan default constructor. Setiap class pasti mempunyai setidaknya satu constructor, kalau dalam deklarasi class tidak ada constructor sama sekali, java secara default akan mempunyai defaul constructor ini. Kalau ada satu saja constructor dengan parameter, maka default constructor tidak akan dibuat, kalau masih mau ada default constructor maka harus dideklarasikan secara eksplisit. Mari kita lihat contoh kodenya di bawah :
public ConstructorTest {
public void methodSederhana(){
System.out.println("method sederhana dipanggil");
}
public static void main(String[] args){
ConstructorTest test = new ConstructorTest();
test.methodSederhana();
}
}
public void methodSederhana(){
System.out.println("method sederhana dipanggil");
}
public static void main(String[] args){
ConstructorTest test = new ConstructorTest();
test.methodSederhana();
}
}
Kode di atas menunjukan bahwa class ConstructorTest tidak mendefinisikan constructor sama sekali, tetapi constructor new ConstructorTest() dapat dipanggil tanpa menyebabkan adanya error. Hal ini disebabkan karena java akan membuatkan default constructor kalau class tidak mendefinisikan constructor sama sekali.
public class ConstructorNonDefaultTest {
public ConstructorNonDefaultTest(String text){
methodSederhana(text);
}
public void methodSederhana(String text){
System.out.println("method sederhana di panggil dengan text : " +text);
}
public static void main(String[] args){
//error pada waktu compile karena ada constructor yang dideklarasikan
//sehingga default constructor menjadi wajib dideklarasilkan.
ConstructorNonDefaultTest test = new ConstructorNonDefaultTest();
//constructor non default dengan satu parameter bertipe string
ConstructorNonDefaultTest test1 = new ConstructorNonDefaultTest("ini test");
}
}
public ConstructorNonDefaultTest(String text){
methodSederhana(text);
}
public void methodSederhana(String text){
System.out.println("method sederhana di panggil dengan text : " +text);
}
public static void main(String[] args){
//error pada waktu compile karena ada constructor yang dideklarasikan
//sehingga default constructor menjadi wajib dideklarasilkan.
ConstructorNonDefaultTest test = new ConstructorNonDefaultTest();
//constructor non default dengan satu parameter bertipe string
ConstructorNonDefaultTest test1 = new ConstructorNonDefaultTest("ini test");
}
}
Kalau kode di atas di compile maka akan terdapat satu buah pesan error seperti di bawah ini :
$ javac ConstructorNonDefaultTest.java
ConstructorNonDefaultTest.java:11: cannot symbol
symbol : constructor ConstructorNonDefaultTest()
location : class ConstructorNonDefaultTest
ConstructorNonDefaultTest test = new ConstructorNonDefaultTest();
^
1 error
$
ConstructorNonDefaultTest.java:11: cannot symbol
symbol : constructor ConstructorNonDefaultTest()
location : class ConstructorNonDefaultTest
ConstructorNonDefaultTest test = new ConstructorNonDefaultTest();
^
1 error
$
Constructor dapat memanggil constructor lain dalam class yang sama menggunkan keyword this. Kode untuk memanggil constructor lain ini harus berada di baris pertama dari konstructor, kalau tidak maka kan ada error pada waktu kompilasi. Berikut ini adalah contohnya :
public class ConstructorCallConstructorTest {
public ConstructorCallConstructorTest(){
this("constructor memanggil constructor");
//kode lain disisni, tidak bisa diletakkan di atas keyword this
}
public ConstructorCallConstructor(String text){
methodSederhana(text);
}
public void methodSederhana(String text){
system.out.println("method sederhana dipanggil dengan text : " +text);
}
public static void main(String[] args){
ConstructorCallConstructorTest test = new ConstructorCallConstructorTest();
ConstructorCallConstructorTest test = new ConstructorCallConstructorTest torTest("ini test");
}
}
public ConstructorCallConstructorTest(){
this("constructor memanggil constructor");
//kode lain disisni, tidak bisa diletakkan di atas keyword this
}
public ConstructorCallConstructor(String text){
methodSederhana(text);
}
public void methodSederhana(String text){
system.out.println("method sederhana dipanggil dengan text : " +text);
}
public static void main(String[] args){
ConstructorCallConstructorTest test = new ConstructorCallConstructorTest();
ConstructorCallConstructorTest test = new ConstructorCallConstructorTest torTest("ini test");
}
}
Constructor mana yang dipanggil pada waktu menggunakan keyword this di tentukan dari parameternya.
Property
Property adalah variabel yang di deklarasikan di dalam class sejajar dengan method. Variabel yang berada didalam method bukan merupakan property, tetapi disebut sebagai local variabel. Layaknya variabel yang lain, property mempunyai tipe data dan nama. Berdasarkan aturan java bean, property akan dibuatkan method getter dan setter untuk membungkus property. Secara umum, disarankan untuk memberikan access modifier private kepada semua property, kalau ingin mengakses property tersebut maka buatlah method getter dan setter.
Deklarasi property diawali dengan access modifier kemudian diikuti dengan tipe data dan akhirnya adalah nama dari property. property bisa langsung diinisialisasi nilainya atau tidak, kalu tidak diberi nilai, maka nilai default yang akan diset sebagai nilai awal property. Contohnya seperti di bawah ini :
private String stringProperty;
Beberapa keyword lain juga bisa digunakan untuk mendeklarasikan property. Keyword static bisa digunakan untuk mendeklarasikan property, static akan membuat property menjadi milik class bukan milik object. Property bisa diakses dari nama classnya dan tidak perlu ada object yang diinstansiasi. Karena property static menjadi milik class, maka kalau property static ini diganti isinya maka semua kode yaang mengakses property static ini akan melihat nilai yang sama. contohnya seperti di bawah ini :
public class PropertyStaticTest {
public static String nilaiStatic;
public static void main(String[] args){
//property static dipanggilmenggunakan nama class
PropertyStaticTest.nilaiStatic = "nilai dari main";
//property static juga bisa dipanggil tanpa nama class dari class yang sama
System.out.println(nilaiStatic);
//method main adalah method static, hanya bisa memanggil method static juga
methodUbahPropertyStatic();
//nilai property static berubah setelah method methodUbahPropertyStatic dipanggil
System.out.println(nilaiStatic);
}
publc static void methodUbahPropertyStatic(){
PropertyStaticTest,nilaiStatic = "nilai dari methodUbahPropertyStatic";
}
}
public static String nilaiStatic;
public static void main(String[] args){
//property static dipanggilmenggunakan nama class
PropertyStaticTest.nilaiStatic = "nilai dari main";
//property static juga bisa dipanggil tanpa nama class dari class yang sama
System.out.println(nilaiStatic);
//method main adalah method static, hanya bisa memanggil method static juga
methodUbahPropertyStatic();
//nilai property static berubah setelah method methodUbahPropertyStatic dipanggil
System.out.println(nilaiStatic);
}
publc static void methodUbahPropertyStatic(){
PropertyStaticTest,nilaiStatic = "nilai dari methodUbahPropertyStatic";
}
}
Kalau class diatas di kompile dan dijlankan, maka hasilnya sebagai berikut ;
$ javac PropertyStaticTest.java
$ java PropertyStaticTest
nilai dari main
nilai dari methodUbahPropertyStatic
$
$ java PropertyStaticTest
nilai dari main
nilai dari methodUbahPropertyStatic
$
Variabel static bisa sangat berguna untuk memudahkan mengakses suatuvariabel karena tinggal menggunakan nama class saja, jadi tidak perlu membawa-bawa nilai variabelke dalam object yang memerlukannya. Tetapi pada skenario berbeda property static ini malah merepotkan, terutama di lingkungan aplikasi web yang berjalan dalam cluster. Antara satu cluster satu dan cluster yang lain nilai static ini bisa berbeda dan menyebabkan aplikasi menjadi tidak konsisten. Karena dalam bagian ini kita tidak bekerja dalam lingkungan cluster, kita bisa menganggap property static sebagai praktek yang aman. Nantinya dalam aplikasi contoh, kita akan cukup banyak menggunakan property static untuk menyederhanakan kode.
Keyword berikutnya yang bisa diletakkan dalam property static adalah final. Adanya keyword final dalam deklarasi property menyebabkan property hanya bisa diinisialisasi (diberi nilai) sekali saja, setelah itu nilinya tidak dapat di ubah, perilaku ini bisa kita sebut dengan konstanta : sekali diberi nilai tidak bisa berubah nilainya. Kalau kita memaksa merubah nilainya maka akan terjadi error pada waktu kompilasi atau kalau java compiler tidak sanggup menentukan errornya akan terjadi pada aplikasi berjalan.
public class PropertyStaticFinalTest {
public static final String nilaiStatic;
public static void main(String[] args){
PropertyStaticFinalTest.nilaiStatic = "nilai dari main";
System.out.println(nilaiStatic);
methodUbahPropertyStatic();
System.out.println(nilaiStatic);
}
publc static void methodUbahPropertyStatic(){
PropertyStaticFinalTest,nilaiStatic = "nilai dari methodUbahPropertyStatic";
}
}
public static final String nilaiStatic;
public static void main(String[] args){
PropertyStaticFinalTest.nilaiStatic = "nilai dari main";
System.out.println(nilaiStatic);
methodUbahPropertyStatic();
System.out.println(nilaiStatic);
}
publc static void methodUbahPropertyStatic(){
PropertyStaticFinalTest,nilaiStatic = "nilai dari methodUbahPropertyStatic";
}
}
Ketika kode dikompilasi maka akan terjadi error yang menerangkan bahwa "tidak bisa mengubah nilai variabel yang ditandai dengan final". Outpunya sebagai berikut :
$ PropertyStaticFinalTest.java
PropertyStaticFinalTest.java:4: cannot assign a value to final variable nilaiStatic
PropertyStaticFinalTest.nilaiStatic = "nilai dari main";
^
PropertyStaticFinalTest.java:10: cannot assign a value to final variable nilaiStatic
PropertyStaticFinalTest.nilaiStatic =
^
2 errors
$
PropertyStaticFinalTest.java:4: cannot assign a value to final variable nilaiStatic
PropertyStaticFinalTest.nilaiStatic = "nilai dari main";
^
PropertyStaticFinalTest.java:10: cannot assign a value to final variable nilaiStatic
PropertyStaticFinalTest.nilaiStatic =
^
2 errors
$
Jadi kalau begitu kapan property yang ditandai dengan final bisa diberi nilai..? Pada waktu mendeklarasikan property. Contoh dibawah ini adalah cara yang benar menginisialisasikan nilai ke property yng ditandai dengan final :
public class PropertyFinalTest{
public final String nilaiFinal = "inisialisasi";
public static void main(String[] args){
PropertyFinalTest finalTest = new PropertyFinalTest();
System.out.println(finalTest.nilaiFinal);
}
}
public final String nilaiFinal = "inisialisasi";
public static void main(String[] args){
PropertyFinalTest finalTest = new PropertyFinalTest();
System.out.println(finalTest.nilaiFinal);
}
}
Perhatikan kode diatas, property nilaiFinal langsung di beri nilai pada waktu deklarasi. Karena sekarang property nilaiFinal kita harus membuat object dari class PropertyFinalTest agar bisa mengakses property nilaiFinal, berbeda dengan property yang di tandai static dimana kita bisa langsung mengaksesnya tanpa membuat object.
Masih ada keyword lain yang bisa kita letakkan dalam deklarasi property, yaitu volatile. Keyword ini menyebabkan property tidak akan ikut disimpan ketika object diserialize. Proses serialize adalah proses mengubah object ke dalam bentuk yang bisa ditransfer lewat media I/O, misalnya object ini disimpan ke hardisk atau dikirim ke komputer lain lewat jaringan. Proses sebaliknya adalah deserialize dimana dari bentuk ini diubah lagi menjadi bentuk object didalam JVM. Topik serialize dan deserialize akan kita bahas nanti pada waktu membahas arsitektur tree tier.
Java mempunyai keyword const yang bisa digunakan untuk mendeklarasikan konstanta. Tetapi dalam prakteknya, dan ini adalah praktek yang disarankan oleh Sun Microsistem, konstanta sebaiknya dideklarasikan menggunakan gabungan keyword static dan final. Lebih baik lagi, kalau konstanta diletakkan didalam interface, karena semua property dalam interface secara default akan bersifat public static final, walaupun dideklarasikan tanpa ketiga keyword tersebut.
Konstanta dalam java juga mempunyai aturan penamaan yang diterangkan dalam Java Code Convention. Nama konstanta semuanya huruf besardan dipisahkan dengan underscore (_) kalau terdiri dari dua kata atau lebih. Contoh pembuatan konstanta yang baik adalah sebagai berikut ini :
public interface Constants{
Integer MAX_USER = 10;
String APLICATION_NAME = "POS";
String LAKI_LAKI = "L";
String PEREMPUAN = "P";
}
Integer MAX_USER = 10;
String APLICATION_NAME = "POS";
String LAKI_LAKI = "L";
String PEREMPUAN = "P";
}
Perhatikan kode diatas menggunakan interface,bukan class. kemudian semua property tidak perlu dideklarasikan sebagai public static final karena secara default semua property dalam interface sudah mempunyai ketiga keyword tersebut. kalau kita deklarasikan Constants di atas sebagai class maka ketiga keyword tersebut harus disertakan agar property dianggap sebagai konstanta.
public class Constants{
public static final Integer MAX_USER = 10;
public static final String APLICATION_NAME = "POS";
public static final String LAKI_LAKI = "L";
public static final String PEREMPUAN = "P";
}
public static final Integer MAX_USER = 10;
public static final String APLICATION_NAME = "POS";
public static final String LAKI_LAKI = "L";
public static final String PEREMPUAN = "P";
}
Sampai disini kita sudah belajar tentang perbedaan class dan object, kemudian bagaimana anatomi dari class java. Berikutnya kita akan belajar mengenai struktur aplikasi java, bagaimana kode diorganisasi dalam package, kemudian bagaimana mengimport class lain yang berada dalam package yang berbeda. Kemudian kita juga membahas apa itu jar (java archive) dan bagaimana membuatnya, sekaligus bagaimana konsep classpath bekerja untuk menemukan class yang dibutuhkan aplikasi.
sekian dulu dari kami, semoga bisa bermanfaat dan jangan lupa tengongkin pembahasan berikutnya.. Terimakasih.. :)










