Metode Statis vs Metode Reguler di Java

Metode Static di Java adalah metode yang untuk menjalankannya tak perlu dilakukan instantiasi. Salah satu contoh metode ini adalah metode round dalam class Math, misalnya Math.round(93.6).
Jika kita melakukan instantiasi pada Math ( misal, Math objekMath = new Math(); ), kita akan mendapatkan pesan kesalahan berupa “Math() has private access in java.lang.Math“, ini karena constructor Math() ditandai sebagai private di Java. Metode yang ditandai dengan kata kunci private tidak bisa diakses dari luar class tersebut.
Sebagai perbandingan dengan metode biasa (reguler/non-static), perhatikan tabel berikut:
Metode Reguler Metode Static
Dipanggil menggunakan nama reference variable (contoh: kucing1.mengeong() ) Dipanggil dengan menggunakan nama kelas (Contoh: Math.round(93.6) )
Terdapat instantiasi object Biasanya tidak ada instantiasi objek
Metode static tidak mengetahui keadaan variabel dari class yang mengandungnya. Jika kita memanggil sebuah variable yang didefinisikan dalam class yang sama dengan metode static ini (namun berada di luar metode static tsb), compiler akan memberikan pesan kesalahan, yakni “non-static variable … cannot be referenced from a static context“. Metode static tak bisa merefer ke  variabel dari class-nya dan tak tahu nilai variabel instantiasi yang mana yang akan digunakan. Sebagai ilustrasi, lihat kode A.   Metode reguler juga tak dapat diakses dari dalam metode static, meskipun metode tersebut tidak mengandung instance variable. Sebagai ilustrasi, lihat kode B.
Kode A
public class Kosan {
     int jumlahKamar;
     public static void main() {
          //error, karena mengakses variavel jumlahKamar yang
          //didefinisikan di luar metode Static
          System.out.println("Banyak kamar kosan ini:" + jumlahKamar);
     }
     public void setJumlahKamar(int n) {
          jumlahKamar = n;
     }
     public void getJumlahKamar() {
          return jumlahKamar;
     }

}
Kode B
public class Kosan {
     int jumlahKamar;
     public static void main() {
          //Error, karena pada akhirnya getJumlahKamar() juga akan
          //mengakses variabel jumlahKamar
          System.out.println("Banyak kamar kosan ini:" + getJumlahKamar());
     }
     public void setJumlahKamar(int n) {
          jumlahKamar = n;
     }
     public void getJumlahKamar() {
          return jumlahKamar;
     }
}
Referensi:  Head First Java 2nd Edition, Kathy Sierra & Bert Bates

Tinggalkan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout / Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout / Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout / Ubah )

Foto Google+

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s