Panduan untuk Kata Kunci Statik di Jawa

1. Pengenalan

Dalam artikel ini, kita akan menerangkan kata kunci statik bahasa Java secara terperinci. Kami akan mengetahui bagaimana kami dapat menerapkan kata kunci statik pada pemboleh ubah, kaedah, blok, kelas bersarang dan perbezaannya.

2. Anatomi Kata Kunci statik

Dalam bahasa pengaturcaraan Java, kata kunci statik menunjukkan bahawa anggota tertentu tergolong dalam jenis itu sendiri, bukan pada contoh jenis itu .

Ini bermaksud bahawa hanya satu contoh anggota statik yang dibuat yang dikongsi di semua keadaan kelas.

Kata kunci boleh digunakan untuk pemboleh ubah, kaedah, blok dan kelas bersarang.

3. Medan statik (Atau Pembolehubah Kelas)

Di Jawa, jika bidang dinyatakan statik , maka satu salinan bidang itu dibuat dan dikongsi di antara semua contoh kelas tersebut . Tidak kira berapa kali kita memulakan kelas; akan selalu ada satu salinan bidang statik yang menjadi miliknya. Nilai medan statik ini akan dikongsi di semua objek sama ada dari kelas yang berbeza.

Dari perspektif memori, pemboleh ubah statik masuk dalam kumpulan tertentu dalam memori JVM yang disebut Metaspace (sebelum Java 8, kumpulan ini disebut Generasi Tetap atau PermGen, yang sepenuhnya dihapus dan diganti dengan Metaspace).

3.1. Contoh Medan statik

Anggaplah kita mempunyai kelas Kereta dengan beberapa atribut (pemboleh ubah contoh) . Setiap kali objek baru diinisialisasi dari cetak biru Kereta ini , setiap objek baru akan mempunyai salinan pemboleh ubah contohnya yang berbeza.

Namun, anggaplah kita mencari pemboleh ubah yang menyimpan jumlah bilangan objek Kereta yang diinisialisasi dan dibagikan di semua keadaan sehingga mereka dapat mengaksesnya dan meningkatkannya pada permulaannya.

Di situlah pemboleh ubah statik 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 kelas ini yang diinisialisasi, salinan pemboleh ubah numberOfCars yang sama akan meningkat. Jadi untuk kes ini, pernyataan berikut akan berlaku:

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

3.2. Sebab yang Menarik untuk Menggunakan Medan statik

  • Apabila nilai pemboleh ubah tidak bergantung kepada objek
  • Apabila nilai sepatutnya dikongsi di semua objek

3.3. Perkara Utama yang Perlu Diingat

  • Oleh kerana pemboleh ubah statik tergolong dalam kelas, variabel tersebut dapat diakses secara langsung menggunakan nama kelas dan tidak memerlukan rujukan objek
  • pemboleh ubah statik hanya boleh dinyatakan di peringkat kelas
  • medan statik dapat diakses tanpa inisialisasi objek
  • Walaupun kita dapat mengakses medan statik menggunakan rujukan objek (seperti ford.numberOfCars ++ ), kita harus menahan diri dari menggunakannya kerana dalam kes ini menjadi sukar untuk mengetahui sama ada pemboleh ubah contoh atau pemboleh ubah kelas; sebaliknya, kita harus selalu merujuk kepada pemboleh ubah statik menggunakan nama kelas (contohnya, dalam kes ini, Car.numberOfCars ++ )

4. Kaedah statik (Atau Kaedah Kelas)

Sama dengan medan statik , kaedah statik juga tergolong dalam kelas dan bukan objek, sehingga mereka dapat dipanggil tanpa membuat objek kelas di mana mereka berada. Mereka dimaksudkan untuk digunakan tanpa membuat objek kelas.

4.1. Contoh Kaedah statik

kaedah statik umumnya digunakan untuk melakukan operasi yang tidak bergantung pada pembuatan contoh.

Sekiranya terdapat kod yang seharusnya dibagi di semua keadaan kelas tersebut, maka tuliskan kod tersebut dengan kaedah statik :

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

kaedah statik juga banyak digunakan untuk membuat kelas utiliti atau pembantu supaya ia dapat diperoleh tanpa membuat objek baru dari kelas-kelas ini.

Lihat sahaja koleksi utiliti Koleksi atau Matematik dari JDK, StringUtils dari Apache atau CollectionUtils dari rangka Spring dan perhatikan bahawa semua kaedah adalah statik .

4.2. Sebab-sebab Menarik untuk Menggunakan Kaedah statik

  • Untuk mengakses / memanipulasi pemboleh ubah statik dan kaedah statik lain yang tidak bergantung pada objek
  • kaedah statik banyak digunakan dalam kelas utiliti dan pembantu

4.3. Perkara Utama yang Perlu Diingat

  • kaedah statik di Java diselesaikan pada waktu kompilasi. Oleh kerana kaedah overriding adalah sebahagian daripada Runtime Polymorphism, maka kaedah statik tidak dapat diganti
  • kaedah abstrak tidak boleh statik
  • kaedah statik tidak boleh menggunakan kata kunci super atau ini
  • Kombinasi contoh, kaedah dan pemboleh ubah kelas berikut adalah sah:
    1. Kaedah Instance boleh mengakses kaedah instance dan pemboleh ubah instance secara langsung
    2. Kaedah contoh juga boleh akses statik pembolehubah dan statik kaedah langsung
    3. kaedah statik dapat mengakses semua pemboleh ubah statik dan kaedah statik lain
    4. kaedah statik tidak dapat mengakses pemboleh ubah contoh dan kaedah contoh secara langsung ; mereka memerlukan beberapa rujukan objek untuk melakukannya

5. Blok statik

A statik blok digunakan untuk Memulakan statik pembolehubah. Walaupun pemboleh ubah statik dapat diinisialisasi secara langsung semasa pengisytiharan, ada situasi ketika kita diminta melakukan pemprosesan multiline.

Dalam kes sedemikian, blok statik sangat berguna.

Sekiranya pemboleh ubah statik memerlukan logik multi-pernyataan tambahan semasa inisialisasi, maka blok statik dapat digunakan.

5.1. Yang statik Block Contoh

Katakan kita ingin menginisialisasi objek senarai dengan beberapa nilai yang telah ditentukan.

Ini menjadi mudah dengan blok statik :

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 memulakan objek Senarai dengan semua nilai awal bersama dengan pengisytiharan; dan itulah sebabnya kami menggunakan blok statik di sini.

5.2. Sebab-sebab Menarik untuk Menggunakan Blok statik

  • Sekiranya permulaan pemboleh ubah statik memerlukan beberapa logik tambahan kecuali penugasan
  • Sekiranya permulaan pemboleh ubah statik terdedah kepada ralat dan memerlukan pengendalian pengecualian

5.3. Perkara Utama yang Perlu Diingat

  • Kelas boleh mempunyai banyak blok statik
  • medan statik dan blok statik diselesaikan dan dilaksanakan dalam urutan yang sama seperti yang terdapat di kelas

6. Kelas statik

Bahasa pengaturcaraan Java membolehkan kita membuat kelas dalam kelas. Ini menyediakan cara menarik untuk mengelompokkan elemen yang hanya akan digunakan di satu tempat, ini membantu memastikan kod kami lebih teratur dan mudah dibaca.

Senibina kelas bersarang terbahagi kepada dua:

  • kelas bersarang yang dinyatakan statik disebut kelas bersarang statik sedangkan,
  • kelas bersarang yang tidak statik disebut kelas dalaman

Perbezaan utama antara kedua ini adalah bahawa kelas dalam mempunyai akses kepada semua anggota kelas tertutup (termasuk swasta), sedangkan kelas bersarang statik hanya mempunyai akses kepada anggota kelas luar yang statik.

Sebenarnya, kelas bersarang statik berkelakuan sama seperti kelas tingkat atas yang lain tetapi tertutup dalam satu-satunya kelas yang akan mengaksesnya, untuk memberikan kemudahan pembungkusan yang lebih baik.

6.1. Contoh Kelas statik

Pendekatan yang paling banyak digunakan untuk membuat objek tunggal adalah melalui kelas bersarang statik kerana tidak memerlukan penyegerakan dan mudah dipelajari dan dilaksanakan:

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 bersarang statik dapat mengakses semua ahli statik kelas lampiran, termasuk kelas peribadi
  • Spesifikasi pengaturcaraan Java tidak membenarkan kita menyatakan kelas tingkat atas sebagai statik ; hanya kelas dalam kelas (kelas bersarang) yang boleh dibuat statik

7. Kesimpulannya

Dalam artikel ini, kami melihat kata kunci statik beraksi. Kami juga membaca mengenai sebab dan kelebihan menggunakan medan statik, kaedah statik, blok statik dan kelas dalaman statik.

Seperti biasa, kita dapat mencari kod lengkap di GitHub.