Pada tulisan2 saya yang sebelumnya, terdapat keyword static. Apa fungsi dari keyword static itu sendiri ? Dengan menggunakan static maka method dan variable akan menjadi milik class, bukan menjadi milik suatu instance.

Bila di suatu class terdapat static variable dan static method, maka apabila ada class lain yang ingin menggunakannya dapat langsung memanggil variable atau method tersebut dengan format: NamaClass.namaStaticVariableAtauMethod. Kita tidak perlu lagi membuat suatu objek dari class tersebut.

Pertama saya akan membahas mengenai static variable. Langsung praktek saja ya biar lebih mudah mengerti. Perhatikan code berikut :

package com.maniakjava.testdefault;

public class Test
{
   public int counter = 0;
   public Test()
   {
      counter += 1;
   }

   public int getCounter()
   {
      return counter;
   }

   public void addCounter()
   {
      counter+=1;
   }
}

Kemudian pada package yang sama buatlah class MainInside berikut :

package com.maniakjava.testdefault;

public class MainInside
{
   public static void main(String[] args)
   {
      Test obj1 = new Test();
      Test obj2 = new Test();
      Test obj3 = new Test();
      obj1.addCounter();
      System.out.println("Counter milik obj1 = " + obj1.getCounter());
      System.out.println("Counter milik obj2 = " + obj2.getCounter());
      System.out.println("Counter milik obj3 = " + obj3.getCounter());
   }
}
 

Perhatikan code di atas. Jika dijalankan akan terlihat bahwa masing2 object dari class Test memiliki state masing2. Jika obj1 menambah counternya, tidak akan berpengaruh terhadap counter milik obj2 dan obj3. Output dari code di atas adalah :

Counter milik obj1 = 2
Counter milik obj1 = 1
Counter milik obj1 = 1

Sekarang cobalah ubah variable counter di class Test menjadi static variable. Codenya seperti ini :

package com.maniakjava.testdefault;

public class Test
{
   public static int counter = 0;
   public Test()
   {
      counter += 1;
   }

   public int getCounter()
   {
      return counter;
   }

   public void addCounter()
   {
      counter+=1;
   }
}

Kemudian jalankan kembali class MainInside di atas (tidak ada code yang perlu diubah). Maka output dari class tersebut adalah :

Counter milik obj1 = 4
Counter milik obj2 = 4
Counter milik obj3 = 4

Mengapa bisa begitu? Bila suatu class memiliki static variable, maka variable tersebut akan dipakai bersama2 oleh object2dari class tersebut. Setiap objek dari class tersebut akan mengakses variable yang sama. Sehingga obj1, obj2, obj3 menggunakan variable yang sama (shared variable).

Sekarang cobalah tambahkan code berikut di class MainInside :

System.out.println("Counter milik class = " + Test.counter); 

Kemudian jalankan kembali class MainInside tersebut, maka outputnya akan menjadi

Counter milik obj1 = 4
Counter milik obj2 = 4
Counter milik obj3 = 4
Counter milik class = 4

Mengerti kan maksudnya ? Dengan menggunakan static variable maka kita bisa langsung mengakses suatu state tanpa harus membuat suatu object terlebih dahulu. Dan juga perlu diingat bahwa untuk instance variable adalah 1 per instance dan untuk static variable adalah 1 per class.

Kemudian untuk static method, prinsipnya sama dengan static variable yaitu suatu static method dapat langsung diakses tanpa harus membuat object dari suatu class. Agar lebih jelas, ubah code class Test menjadi seperti ini :

package com.maniakjava.testdefault;

public class Test
{
   public static void fungsiStatic()
   {
      System.out.println("ini fungsi static");
   }

   public void fungsiBiasa()
   {
      System.out.println("ini fungsi biasa");
   }
}

Kemudian ubah class MainInside menjadi seperti ini :

package com.maniakjava.testdefault;

public class MainInside
{
   public static void main(String[] args)
   {
      Test.fungsiStatic();
      Test obj = new Test();
      obj.fungsiBiasa();
   }
}
 

Karena fungsiStatic merupakan sebuah static method, maka kita dapat langsung mengaksesnya tanpa harus membuat sebuah object dari class Test. Sedangkan untuk mengakses fungsiBiasa, kita harus membuat object terlebih dahulu baru kita dapat mengaksesnya. Perlu diingat juga bahwa suatu static method tidak bisa mengakses suatu non-static method dan instance variable.

Lalu di Java juga ada suatu istilah yang dinamakan static imports. Tapi static imports ini hanya terdapat mulai dari java 5 dan seterusnya. Static imports ini berfungsi untuk mempercepat pengetikan (typing code), cocok buat kalian yang malas ngetik code panjang2😀.

Langsung saja lihat contoh code berikut

package com.maniakjava.main;

public class Test
{
    public static void main(String[] args)
    {
        String x1 = "30";
        String x2 = "1988";
        int y1 = Integer.parseInt(x1) - 24;
        int y2 = 2011 - Integer.parseInt(x2);
        System.out.println("y1 : " + y1);
        System.out.println("y2 : " + y2);
    }
}
 

Contoh di atas belum menggunakan static import. Sekarang perhatikan code berikut ini yang menggunakan static import

package com.maniakjava.main;

import static java.lang.System.out;
import static java.lang.Integer.parseInt;

public class Test
{
    public static void main(String[] args)
    {
        String x1 = "30";
        String x2 = "1988";
        int y1 = parseInt(x1) - 24;
        int y2 = 2011 - parseInt(x2);
        out.println("y1 : " + y1);
        out.println("y2 : " + y2);
    }
}
 

Nah terlihat kan perbedaannya ? Saya sendiri tidak pernah menggunakan static import, karena malah bikin bingung baca codenya.

Terakhir, di Java juga ada suatu istilah yang dinamakan static initializer. Static initializer merupakan suatu blok yang berada di dalam class dan dijalankan ketika suatu class di-load. Biasanya static initializer ini digunakan untuk melakukan inisialisasi suatu variable constant. Perlu kalian ketahui bahwa saat kita membuat suatu variable constant, maka kita wajib melakukan inisialisasi terhadapnya. Kita bisa melakukan inisialisasi langsung saat melakukan deklarasi variable constant atau menggunakan blok static untuk melakukan inisialisasi.

Perlu diketahui juga bahwa static initializer akan dijalankan pertama kali, mendahului constructor suatu class. Sebagai contoh perhatikan code berikut

public class Member
{
    public static final int CONSTANT_VARIABLE;
    public static String staticVariable;

    public Member()
    {
        System.out.println("constructor Member dijalankan");
    }
    static
    {
        System.out.println("static dijalankan");
        CONSTANT_VARIABLE=88;
        staticVariable="Maniak Java";
    }
} 

Seperti itulah contoh penggunaan blok static.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s