CodeGym/Java Blog/Acak/10 hal yang perlu Anda ketahui tentang pengubah statis di...
John Squirrels
Level 41
San Francisco

10 hal yang perlu Anda ketahui tentang pengubah statis di Java

Dipublikasikan di grup Acak
anggota
Di Java, pengubah statis berarti ada sesuatu yang terkait langsung dengan kelas: jika suatu bidang statis, maka itu milik kelas; jika suatu metode statis, maka itu milik kelas. Hasilnya, Anda bisa menggunakan nama kelas untuk memanggil metode statis atau mereferensikan bidang statis. Misalnya, jika countbidang statis di Counterkelas, itu berarti Anda dapat mereferensikan variabel dengan ekspresi berikut: Counter.count. 10 hal yang perlu Anda ketahui tentang pengubah statis di Java - 1Tentu saja, pengubah akses harus dipertimbangkan. Misalnya, privatebidang hanya tersedia di dalam kelas tempat bidang tersebut dideklarasikan. Dan protectedfield tersedia untuk semua kelas dalam sebuah paket, serta untuk semua subkelasnya di luar paket. Misalkan Counterkelas memiliki metode statis increment()yang tugasnya menaikkan nilaicountbidang. Untuk memanggil metode ini, Anda dapat menggunakan Counter.increment(). Tidak perlu membuat instance kelas Counteruntuk 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 countvariabel statis akan sama untuk semua Counterobjek. 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.
  1. 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 mainmetodenya statis dan variabelnya counttidak, menggunakan printlnmetode di dalam mainmetode akan menghasilkan "kesalahan waktu kompilasi".

  2. Tidak seperti variabel lokal, bidang dan metode statis TIDAK ada thread safedi 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 benar synchronizeduntuk menghindari masalah seperti race conditions.

  3. 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 factorymetode dan utilitymetode. Kelas java.lang.Mathadalah contoh yang bagus: hampir semua metodenya statis. Kelas utilitas Java ditandai finaluntuk alasan yang sama.

  4. Poin penting lainnya adalah Anda tidak dapat mengganti ( @Override) metode statis. Jika Anda mendeklarasikan metode seperti itu dalam a subclass, yaitu metode dengan nama dan tanda tangan yang sama, Anda cukup "menyembunyikan" metode dari superclassalih-alih menimpanya. Fenomena ini dikenal dengan method 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 di Vehiclekelas dipanggil, karena metode tersebut dipanggil pada waktu kompilasi. Dan perhatikan bahwa tidak ada kesalahan kompilasi!

  5. 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 adalah HashMap.Entry, yang merupakan struktur data di dalamnya HashMap. 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 sendiri Comparator, seperti pembanding usia ( AgeComparator) di Employeekelas.

  6. 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, ExceptionInInitializerErrorakan 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 dari NoClassDefFoundError, karena kelas tidak akan ada di memori saat direferensikan.

  7. 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.

  8. 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 Singletonpola. Jika Anda tidak menggunakan Enumsebagai Singletonkarena 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.

  9. Selama serialisasi, bidang statis, seperti transientvariabel, tidak diserialisasi. Memang, jika Anda menyimpan data apa pun dalam bidang statis, itu akan berisi nilai awal (default) setelah deserialisasi. Misalnya, jika bidang statis adalah int, nilainya akan menjadi nol setelah deserialisasi. Jika tipenya adalah float, nilainya akan menjadi 0,0. Jika bidang adalah Object, nilainya akan menjadi null. 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!

  10. Akhirnya, mari kita bicara tentang impor statis. Pengubah ini memiliki banyak kesamaan dengan importpernyataan 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, misalnya assertEquals()dan varian kelebihan muatannya.

  11. 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."

Komentar
  • Populer
  • Baru
  • Lama
Anda harus login untuk memberikan komentar
Halaman ini belum memiliki komentar