Static adalah kata kunci penting lainnya di Java. Ini dapat meningkatkan kinerja program yang berjalan dan mengoptimalkan struktur program. Aplikasi utamanya adalah sebagai berikut:
1. Variabel anggota yang dimodifikasi oleh statis, yang disebut variabel kelas/variabel statis, untuk mewujudkan berbagi semua objek kepada anggota itu.
2. Metode anggota yang dimodifikasi oleh statis, yang disebut metode kelas/metode statis, dapat dipanggil langsung melalui nama kelas tanpa membuat objek.
3. Bentuk blok kode statis untuk mengoptimalkan kinerja program.
4. Paket timbal statis, umumnya mengimpor metode kelas langsung ke kelas saat ini, sehingga metode kelas dapat dipanggil langsung menggunakan nama metode, yang lebih nyaman.
5. Ubah kelas dalam, dan hubungi kelas dalam tanpa instantiasi kelas luar.
Deskripsi kode berikut dilampirkan:
siswa kelas publik {name string; usia int statis; public string toString () {return "name:" + name + ", usia:" + usia; } public static void main (string [] args) {student S1 = siswa baru (); s1.name = "Zhang San"; s1.age = 20; Siswa S2 = Siswa Baru (); s2.name = "li si"; s2.age = 10; System.out.println (S1); System.out.println (S2); }}/** Hasil Output Nama: Zhang SAN, Umur: 10Name: Li SI, Umur: 10*/Seperti disebutkan di atas, kedua objek S1 dan S2 disimpan dalam alamat yang berbeda di area tumpukan dalam memori, sehingga mereka tidak akan saling mengganggu. Namun, kata kunci statis memodifikasi usia variabel anggota, menjadikannya kelas milik daripada objek miliknya, dan objek apa pun dalam contoh kelas tersebut dapat dibagikan dan digunakan. Oleh karena itu, usia output semuanya adalah final yang ditetapkan untuk 10. Jika Anda menghapus statis, jelas objek tidak akan saling mempengaruhi, dan outputnya adalah sebagai berikut:
Nama: Zhang San, Umur: 20Name: Li SI, Umur: 10
Seperti disebutkan di atas, terjadi kesalahan ketika OUT1 panggilan out2. Dari kode ini, dapat dilihat bahwa metode statis tidak dapat memanggil variabel anggota non-statis dan metode anggota. Metode non-statis dapat memanggil variabel anggota statis dan metode anggota. Perhatikan bahwa statis tidak mempengaruhi hak akses anggota. Kata kunci yang dapat memengaruhi hak akses di Java adalah pribadi, publik, terlindungi, dan default.
tes kelas publik memperluas basis {static {system.out.println ("Static Static Block 1"); } test publik () {System.out.println ("Test Constructor"); } public static void main (string [] args) {new test (); }} class base {static {System.out.println ("Static Static Block 2"); } basis publik () {System.out.println ("Base Constructor"); }}Seperti disebutkan di atas, ingat dua kalimat, blok kode statis dimuat dengan pemuatan kelas. Metode variabel yang dimodifikasi oleh statis dimuat terlebih dahulu dan hanya sekali dari metode variabel lainnya. Ketika subclass dimuat, kelas induk akan dimuat terlebih dahulu. Dari sini kita dapat menganalisis: Pada awal eksekusi, pertama -tama kita harus menemukan metode utama, karena metode utama adalah pintu masuk ke program, tetapi sebelum menjalankan metode utama, pertama -tama kita harus memuat kelas uji. Saat memuat kelas uji, kami menemukan bahwa kelas uji mewarisi dari kelas dasar, jadi kami akan berbalik untuk memuat kelas dasar terlebih dahulu. Saat memuat kelas dasar, kami menemukan bahwa ada blok statis, dan kemudian menjalankan blok statis. Setelah kelas dasar dimuat, kelas uji terus memuat, dan kemudian menemukan bahwa ada blok statis di kelas uji, sehingga blok statis dieksekusi. Setelah memuat kelas yang diperlukan, metode utama mulai dieksekusi. Saat mengeksekusi tes baru () dalam metode utama, konstruktor kelas induk akan dipanggil terlebih dahulu, dan kemudian konstruktornya sendiri. Oleh karena itu, hasil operasi adalah sebagai berikut:
blok statis statis 2 statis blok statis 1base konstruktor uji konstruktor
/* File A.java*/paket com.dogo.test; kelas publik A {public static void outword (objek o) {System.out.println (o); }}/*B.java file*/impor statis com.dogo.test.a.*; Kelas publik B {public static void main (string [] args) {outword ("Hello World!"); } /** output*halo dunia! */}Seperti disebutkan di atas, A.java berisi metode statis sederhana. Di B.Java, kami menggunakan kata kunci statis untuk mengimpor kelas A. Oleh karena itu, tidak perlu menggunakan "nama kelas. Nama metode" untuk memanggil metode kelas. Anda dapat secara langsung menggunakan "Metode nama" untuk memanggil metode kelas, seperti metode kelasnya sendiri.
/*Outer.java*/public kelas luar {static {system.out.println ("blok statis luar"); } public outer () {System.out.println ("Outer Constructor"); } class statis bagian dalam {static {system.out.println ("blok statis dalam"); } public inner () {System.out.println ("Inner Constructor"); }}}/*Test.java*/tes kelas publik {public static void main (string [] args) {new Outer.inner (); }}Seperti disebutkan di atas, ingatlah untuk memodifikasi kelas dalam dengan statis, kelas luar dapat secara langsung memanggil kelas dalam, karena kelas dalam yang dimodifikasi oleh statis dimuat saat memuat kelas luar, sehingga Anda dapat secara langsung memanggil kelas dalam statis tanpa instantiasi kelas luar. Dalam contoh, sebelum memasukkan metode utama pengujian, memuat kelas uji, dan kemudian menjalankan new Outer.inner (); Catatan di sini: karena bagian dalam statis, tidak perlu memuat kelas eksternal dan instantiate kelas eksternal di sini. Bagian dalam dapat dimuat dan dipakai secara langsung. Hasil operasi adalah sebagai berikut:
Konstruktor bagian dalam blok statis bagian dalam
DA QIAO CATATAN: Aplikasi statis lain yang sangat penting adalah mengimplementasikan pola desain singleton. Karakteristik dari pola kepentingan tunggal adalah bahwa kelas hanya dapat memiliki satu contoh. Untuk mewujudkan fungsi ini, konstruktor kelas harus disembunyikan, yaitu, konstruktor dinyatakan sebagai pribadi dan menyediakan metode untuk membuat objek. Karena konstruktor dinyatakan sebagai pribadi, dunia luar tidak dapat secara langsung membuat objek jenis ini, dan hanya dapat memperoleh objek kelas melalui metode yang disediakan oleh kelas. Oleh karena itu, metode membuat objek hanya dapat dinyatakan statis. Contoh program adalah sebagai berikut:
kelas singledemo {private static singledemo ins = null; private singledemo () {} public static singledemo getins () {if (INS == null) {INS = new singledemo (); } return in; }}