count
bidang statis di Counter
kelas, itu berarti Anda dapat mereferensikan variabel dengan ekspresi berikut: Counter.count
. 
private
bidang hanya tersedia di dalam kelas tempat bidang tersebut dideklarasikan. Dan protected
field tersedia untuk semua kelas dalam sebuah paket, serta untuk semua subkelasnya di luar paket. Misalkan Counter
kelas memiliki metode statis increment()
yang tugasnya menaikkan nilaicount
bidang. Untuk memanggil metode ini, Anda dapat menggunakan Counter.increment()
. Tidak perlu membuat instance kelas Counter
untuk mengakses bidang atau metode statis. Ini adalah perbedaan mendasar antara variabel dan metode statis (kelas) dan variabel dan metode NON-statis (instance). Sebuah catatan penting. Jangan lupa bahwa anggota statis kelas secara langsung adalah milik kelas tersebut, bukan instance kelas apa pun. Artinya, nilai count
variabel statis akan sama untuk semua Counter
objek. Pada artikel ini, kita akan melihat aspek dasar penggunaan pengubah statis di Java, serta beberapa fitur yang akan membantu Anda memahami konsep pemrograman utama.
Apa yang harus diketahui oleh setiap programmer tentang pengubah statis di Java.
Di bagian ini, kita melihat aspek utama penggunaan metode statis, bidang, dan kelas. Mari kita mulai dengan variabelnya.-
Anda TIDAK DAPAT mengakses anggota kelas non-statis dalam konteks statis, seperti metode atau blok statis. Mengkompilasi kode di bawah ini akan menghasilkan kesalahan:
public class Counter { private int count; public static void main(String args []) { System.out.println(count); // Compile time error } }
Ini adalah salah satu kesalahan paling umum yang dilakukan oleh programmer Java, terutama pemula. Karena
main
metodenya statis dan variabelnyacount
tidak, menggunakanprintln
metode di dalammain
metode akan menghasilkan "kesalahan waktu kompilasi". -
Tidak seperti variabel lokal, bidang dan metode statis TIDAK ada
thread safe
di Jawa. Dalam praktiknya, ini adalah salah satu penyebab paling sering masalah keamanan dalam pemrograman multi-utas. Mempertimbangkan bahwa setiap instance kelas mereferensikan salinan variabel statis yang sama, variabel seperti itu perlu dilindungi atau "dikunci" oleh kelas. Oleh karena itu, saat menggunakan variabel statis, pastikan variabel tersebut benarsynchronized
untuk menghindari masalah sepertirace conditions
. -
Metode statis memiliki keuntungan praktis karena tidak perlu membuat objek baru setiap kali Anda ingin memanggilnya. Metode statis dapat dipanggil menggunakan nama kelas yang mendeklarasikannya. Itu sebabnya metode ini sempurna untuk
factory
metode danutility
metode. Kelasjava.lang.Math
adalah contoh yang bagus: hampir semua metodenya statis. Kelas utilitas Java ditandaifinal
untuk alasan yang sama. -
Poin penting lainnya adalah Anda tidak dapat mengganti (
@Override
) metode statis. Jika Anda mendeklarasikan metode seperti itu dalam asubclass
, yaitu metode dengan nama dan tanda tangan yang sama, Anda cukup "menyembunyikan" metode darisuperclass
alih-alih menimpanya. Fenomena ini dikenal denganmethod hiding
. Ini berarti bahwa jika metode statis dideklarasikan di kelas induk dan anak, metode yang dipanggil akan selalu didasarkan pada tipe variabel pada waktu kompilasi. Berbeda dengan metode overriding, metode seperti itu tidak akan dijalankan saat program berjalan. Mari kita pertimbangkan sebuah contoh:class Vehicle { public static void kmToMiles(int km) { System.out.println("Inside the parent class / static method"); } } class Car extends Vehicle { public static void kmToMiles(int km) { System.out.println("Inside the child class / static method"); } } public class Demo { public static void main(String args []) { Vehicle v = new Car(); v.kmToMiles(10); } }
Keluaran konsol:
Di dalam kelas induk/metode statis
Kode tersebut dengan jelas menunjukkan bahwa meskipun objeknya adalah a
Car
, metode statis diVehicle
kelas dipanggil, karena metode tersebut dipanggil pada waktu kompilasi. Dan perhatikan bahwa tidak ada kesalahan kompilasi! -
Terlebih lagi, selain kelas tingkat atas, Anda dapat mendeklarasikan kelas statis. Kelas seperti itu dikenal sebagai
nested static classes
. Mereka berguna untuk memberikan kohesi yang lebih baik. Contoh mencolok dari kelas statis bersarang adalahHashMap.Entry
, yang merupakan struktur data di dalamnyaHashMap
. Perlu dicatat bahwa, seperti kelas dalam, kelas bersarang statis dideklarasikan dalam file .class terpisah. Jadi, jika Anda mendeklarasikan lima kelas bersarang di kelas utama Anda, Anda akan memiliki 6 file dengan ekstensi .class. Contoh lain adalah deklarasi kita sendiriComparator
, seperti pembanding usia (AgeComparator
) diEmployee
kelas. -
Pengubah statis juga dapat ditentukan dalam blok statis, lebih dikenal sebagai "blok inisialisasi statis", yang dijalankan saat kelas dimuat. Jika Anda tidak mendeklarasikan blok seperti itu, Java mengumpulkan semua bidang statis ke dalam satu daftar dan menginisialisasinya saat kelas dimuat. Blok statis TIDAK DAPAT membuang pengecualian yang dicentang, tetapi dapat membuang yang tidak dicentang. Dalam hal ini,
ExceptionInInitializerError
akan terjadi. Dalam praktiknya, pengecualian apa pun yang terjadi selama inisialisasi bidang statis akan dibungkus dalam kesalahan ini oleh Java. Ini juga merupakan penyebab paling umum dariNoClassDefFoundError
, karena kelas tidak akan ada di memori saat direferensikan. -
Sangat berguna untuk mengetahui bahwa metode statis ditautkan pada waktu kompilasi, tidak seperti penautan metode virtual atau non-statis, yang ditautkan pada waktu proses ketika dipanggil pada objek nyata. Oleh karena itu, metode statis tidak dapat ditimpa di Java, karena polimorfisme tidak berlaku untuknya saat dijalankan. Ini adalah batasan penting untuk dipertimbangkan saat mendeklarasikan metode statis. Melakukannya masuk akal hanya jika tidak ada kemampuan atau kebutuhan untuk mengganti metode dalam subkelas. Metode pabrik dan metode utilitas adalah contoh yang baik dari penggunaan pengubah statis yang tepat. Joshua Bloch menunjukkan beberapa keunggulan yang dimiliki metode pabrik statis dibandingkan konstruktor dalam bukunya Effective Java, yang wajib dibaca oleh setiap programmer Java.
-
Inisialisasi adalah aspek penting dari blok statis. Bidang atau variabel statis diinisialisasi setelah kelas dimuat ke dalam memori. Urutan inisialisasi adalah dari atas ke bawah, dalam urutan yang sama dengan yang dideklarasikan dalam file sumber kelas Java. Karena bidang statis diinisialisasi dengan cara thread-safe, proses ini juga digunakan untuk mengimplementasikan
Singleton
pola. Jika Anda tidak menggunakanEnum
sebagaiSingleton
karena alasan tertentu, maka Anda memiliki alternatif yang bagus. Tetapi dalam hal ini, Anda harus memperhitungkan bahwa ini bukan inisialisasi "malas". Ini berarti bahwa bidang statis akan diinisialisasi bahkan SEBELUM seseorang "memintanya". Jika suatu objek memiliki banyak sumber daya atau jarang digunakan, menginisialisasinya dalam blok statis tidak akan menguntungkan Anda. -
Selama serialisasi, bidang statis, seperti
transient
variabel, tidak diserialisasi. Memang, jika Anda menyimpan data apa pun dalam bidang statis, itu akan berisi nilai awal (default) setelah deserialisasi. Misalnya, jika bidang statis adalahint
, nilainya akan menjadi nol setelah deserialisasi. Jika tipenya adalahfloat
, nilainya akan menjadi 0,0. Jika bidang adalahObject
, nilainya akan menjadinull
. Sejujurnya, ini adalah salah satu pertanyaan yang paling sering ditanyakan tentang serialisasi dalam wawancara untuk posisi Jawa. Jangan menyimpan data objek penting dalam bidang statis! -
Akhirnya, mari kita bicara tentang impor statis. Pengubah ini memiliki banyak kesamaan dengan
import
pernyataan standar, tetapi berbeda karena memungkinkan Anda memindahkan satu atau semua anggota kelas statis. Setelah metode statis diimpor, metode tersebut dapat diakses seolah-olah dideklarasikan di kelas yang sama. Demikian pula, dengan mengimpor bidang statis, kita dapat mengaksesnya tanpa menentukan nama kelas. Fitur ini muncul di Java 1.5 dan meningkatkan keterbacaan kode bila digunakan dengan benar. Konstruk ini paling sering ditemukan dalam pengujian JUnit, karena hampir semua pengembang pengujian menggunakan impor statis untuk metode penegasan, misalnyaassertEquals()
dan varian kelebihan muatannya. -
Itu saja untuk saat ini. Setiap programmer Java perlu mengetahui semua aspek dari pengubah statis yang disebutkan di atas. Artikel ini mengulas informasi dasar tentang variabel statis, bidang, metode, blok inisialisasi, dan impor. Itu juga menyentuh beberapa properti penting yang penting untuk diketahui untuk menulis dan memahami program Java. Saya harap setiap pengembang akan menyempurnakan keahlian mereka dalam menggunakan anggota statis, karena ini sangat penting untuk pengembangan perangkat lunak yang serius."
GO TO FULL VERSION