Panduan untuk Kata Kunci Statis di Java

1. Perkenalan

Pada artikel ini, kita akan menjelajahi kata kunci statis bahasa Java secara mendetail. Kami akan menemukan bagaimana kami dapat menerapkan kata kunci statis ke variabel, metode, blok, kelas bersarang dan apa bedanya.

2. Anatomi Kata Kunci Statis

Dalam bahasa pemrograman Java, kata kunci statis menunjukkan bahwa anggota tertentu milik tipe itu sendiri, bukan turunan dari tipe itu .

Ini berarti bahwa hanya satu instance dari anggota statis itu yang dibuat yang dibagikan ke semua instance kelas.

Kata kunci dapat diterapkan ke variabel, metode, blok, dan kelas bersarang.

3. Bidang Statis (Atau Variabel Kelas)

Di Java, jika sebuah kolom dinyatakan statis , maka satu salinan dari kolom tersebut akan dibuat dan dibagikan di antara semua instance kelas itu . Tidak peduli berapa kali kita menginisialisasi kelas; hanya akan ada satu salinan bidang statis yang menjadi miliknya. Nilai bidang statis ini akan dibagikan ke semua objek yang sama dari kelas yang berbeda.

Dari perspektif memori, variabel statis masuk ke kumpulan tertentu dalam memori JVM yang disebut Metaspace (sebelum Java 8, kumpulan ini disebut Generasi Permanen atau PermGen, yang telah sepenuhnya dihapus dan diganti dengan Metaspace).

3.1. Contoh Bidang statis

Misalkan kita memiliki kelas Car dengan beberapa atribut (variabel instan) . Setiap kali objek baru diinisialisasi dari cetak biru Mobil ini , setiap objek baru akan memiliki salinan berbeda dari variabel instan ini.

Namun, misalkan kita sedang mencari variabel yang menampung jumlah objek Car yang diinisialisasi dan dibagikan ke semua instance sehingga mereka dapat mengaksesnya dan menaikkannya saat inisialisasi.

Di situlah variabel statis masuk:

public class Car { private String name; private String engine; public static int numberOfCars; public Car(String name, String engine) { this.name = name; this.engine = engine; numberOfCars++; } // getters and setters }

Sekarang untuk setiap objek dari kelas ini yang diinisialisasi, salinan yang sama dari variabel numberOfCars akan bertambah. Jadi untuk kasus ini, pernyataan berikut akan benar:

@Test public void whenNumberOfCarObjectsInitialized_thenStaticCounterIncreases() { new Car("Jaguar", "V8"); new Car("Bugatti", "W16"); assertEquals(2, Car.numberOfCars); }

3.2. Alasan Menarik untuk Menggunakan Bidang statis

  • Ketika nilai variabel tidak bergantung pada objek
  • Ketika nilai seharusnya dibagikan ke semua objek

3.3. Poin Penting untuk Diingat

  • Karena variabel statis termasuk dalam sebuah kelas, mereka dapat diakses secara langsung menggunakan nama kelas dan tidak memerlukan referensi objek apa pun
  • variabel statis hanya dapat dideklarasikan di tingkat kelas
  • bidang statis dapat diakses tanpa inisialisasi objek
  • Meskipun kita dapat mengakses bidang statis menggunakan referensi objek (seperti ford.numberOfCars ++ ), kita harus menahan diri untuk tidak menggunakannya karena dalam kasus ini akan menjadi sulit untuk mengetahui apakah itu variabel instance atau variabel kelas; sebagai gantinya, kita harus selalu merujuk ke variabel statis menggunakan nama kelas (misalnya, dalam hal ini, Car.numberOfCars ++ )

4. Metode Statis (Atau Metode Kelas)

Mirip dengan bidang statis , metode statis juga termasuk dalam kelas, bukan objek, sehingga bisa dipanggil tanpa membuat objek kelas tempat mereka berada. Mereka dimaksudkan untuk digunakan tanpa membuat objek kelas.

4.1. Contoh Metode Statis

metode statis umumnya digunakan untuk melakukan operasi yang tidak bergantung pada pembuatan instance.

Jika ada kode yang seharusnya dibagikan di semua instance kelas itu, maka tulis kode itu dalam metode statis :

public static void setNumberOfCars(int numberOfCars) { Car.numberOfCars = numberOfCars; }

metode statis juga banyak digunakan untuk membuat kelas utilitas atau pembantu sehingga dapat diperoleh tanpa membuat objek baru dari kelas tersebut.

Lihat saja kelas utilitas Collections atau Math dari JDK, StringUtils dari Apache atau CollectionUtils dari framework Spring dan perhatikan bahwa semua metode bersifat statis .

4.2. Alasan Menarik untuk Menggunakan Metode Statis

  • Untuk mengakses / memanipulasi variabel statis dan metode statis lainnya yang tidak bergantung pada objek
  • metode statis banyak digunakan di kelas utilitas dan helper

4.3. Poin Penting untuk Diingat

  • metode statis di Java diselesaikan pada waktu kompilasi. Karena penimpaan metode adalah bagian dari Polimorfisme Waktu Proses, sehingga metode statis tidak dapat diganti
  • metode abstrak tidak boleh statis
  • metode statis tidak dapat menggunakan kata kunci ini atau super
  • Kombinasi instance, metode kelas, dan variabel berikut ini valid:
    1. Metode instance dapat langsung mengakses metode instance dan variabel instance
    2. Metode instan juga dapat mengakses static variabel dan statis metode langsung
    3. metode statis dapat mengakses semua variabel statis dan metode statis lainnya
    4. metode statis tidak dapat mengakses variabel instan dan metode instan secara langsung ; mereka membutuhkan referensi objek untuk melakukannya

5. Blok statis

Sebuah statis blok digunakan untuk menginisialisasi statis variabel. Meskipun variabel statis dapat diinisialisasi secara langsung selama deklarasi, ada situasi ketika kita diharuskan melakukan pemrosesan multiline.

Dalam kasus seperti itu, blok statis berguna.

Jika variabel statis membutuhkan logika multi-pernyataan tambahan saat inisialisasi, maka blok statis dapat digunakan.

5.1. The statis Blok Contoh

Misalkan kita ingin menginisialisasi objek daftar dengan beberapa nilai yang telah ditentukan sebelumnya.

Ini menjadi mudah dengan blok statis :

public class StaticBlockDemo { public static List ranks = new LinkedList(); static { ranks.add("Lieutenant"); ranks.add("Captain"); ranks.add("Major"); } static { ranks.add("Colonel"); ranks.add("General"); } }

Dalam contoh ini, tidak mungkin untuk menginisialisasi objek List dengan semua nilai awal bersama dengan deklarasi; dan itulah mengapa kami menggunakan blok statis di sini.

5.2. Alasan Menarik untuk Menggunakan Blok statis

  • Jika inisialisasi variabel statis memerlukan beberapa logika tambahan kecuali penugasan
  • Jika inisialisasi variabel statis rawan kesalahan dan membutuhkan penanganan pengecualian

5.3. Poin Penting untuk Diingat

  • Sebuah kelas dapat memiliki beberapa blok statis
  • bidang statis dan blok statis diselesaikan dan dijalankan dalam urutan yang sama seperti yang ada di kelas

6. Kelas statis

Bahasa pemrograman Java memungkinkan kita untuk membuat kelas di dalam kelas. Ini memberikan cara yang menarik untuk mengelompokkan elemen yang hanya akan digunakan di satu tempat, ini membantu menjaga kode kita lebih teratur dan mudah dibaca.

Arsitektur kelas bersarang dibagi menjadi dua:

  • kelas bersarang yang dideklarasikan statis disebut kelas bertingkat statis sedangkan,
  • nested classes that are non-static are called inner classes

The main difference between these two is that the inner classes have access to all member of the enclosing class (including private), whereas the static nested classes only have access to static members of the outer class.

In fact, static nested classes behaved exactly like any other top-level class but enclosed in the only class which will access it, to provide better packaging convenience.

6.1. Example of static Class

The most widely used approach to create singleton objects is through static nested class is it doesn't require any synchronization and is easy to learn and implement:

public class Singleton { private Singleton() {} private static class SingletonHolder { public static final Singleton instance = new Singleton(); } public static Singleton getInstance() { return SingletonHolder.instance; } }

6.2. Compelling Reasons to Use a static Inner Class

  • Grouping classes that will be used only in one place increases encapsulation
  • The code is brought closer to the place that will be only one to use it; this increases readability and code is more maintainable
  • If nested class doesn't require any access to it's enclosing class instance members, then it's better to declare it as static because this way, it won't be coupled to the outer class and hence will be more optimal as they won't require any heap or stack memory

6.3. Key Points to Remember

  • static nested classes do not have access to any instance members of the enclosing outer class; it can only access them through an object's reference
  • kelas bertingkat statis dapat mengakses semua anggota statis dari kelas yang melingkupinya, termasuk yang privat
  • Spesifikasi pemrograman Java tidak mengizinkan kita untuk mendeklarasikan kelas tingkat atas sebagai statis ; hanya kelas di dalam kelas (kelas bersarang) yang dapat dibuat sebagai statis

7. Kesimpulan

Di artikel ini, kami melihat kata kunci statis beraksi. Kami juga membaca tentang alasan dan keuntungan menggunakan bidang statis, metode statis, blok statis, dan kelas dalam statis.

Seperti biasa, kami dapat menemukan kode lengkapnya di GitHub.