Kata kunci statis adalah kata kunci yang ditemui banyak teman saat menulis dan membaca kode. Ini juga merupakan salah satu poin pengetahuan yang ingin ditanyakan oleh pewawancara dari perusahaan besar selama wawancara. Mari kita bicara tentang penggunaan kata kunci statis dan kesalahpahaman umum. Akhirnya, kami mencantumkan beberapa pertanyaan tes umum tentang statis dalam wawancara tertulis. Berikut adalah garis besar direktori dari artikel ini:
1. Tujuan kata kunci statis
2. Kesalahpahaman kata kunci statis
3. Pertanyaan Wawancara Tertulis Umum
Jika ada keraguan, saya berharap dapat memahami dan menyambut kritik dan koreksi.
Harap hormati pencapaian tenaga kerja penulis. Harap tunjukkan tautan asli saat mencetak ulang:
http://www.cnblogs.com/dolphin0520/p/3799052.html
1. Tujuan kata kunci statis
"Metode statis adalah metode tanpa ini. Metode non-statis tidak dapat dipanggil di dalam metode statis, yang pada gilirannya dimungkinkan. Dan metode statis hanya dapat dipanggil melalui kelas itu sendiri tanpa membuat objek apa pun. Ini sebenarnya adalah tujuan utama dari metode statis."
Meskipun bagian ini hanya menggambarkan fitur khusus dari metode statis, dapat dilihat bahwa fungsi dasar dari kata kunci statis. Singkatnya, ini dijelaskan dalam satu kalimat:
Lebih mudah untuk menelepon (metode/variabel) tanpa membuat objek.
Jelas, metode atau variabel yang dimodifikasi oleh kata kunci statis tidak perlu mengandalkan objek untuk akses. Selama kelas dimuat, mereka dapat diakses melalui nama kelas.
Statis dapat digunakan untuk memodifikasi metode anggota kelas dan variabel anggota kelas. Selain itu, blok kode statis dapat ditulis untuk mengoptimalkan kinerja program.
1) Metode statis
Metode statis umumnya disebut metode statis. Karena metode statis dapat diakses tanpa mengandalkan objek apa pun, tidak ada ini untuk metode statis karena tidak bergantung pada objek apa pun. Karena tidak ada objek, tidak ada yang namanya ini. Dan karena fitur ini, variabel anggota non-statis dan metode anggota non-statis dari kelas tidak dapat diakses dalam metode statis, karena metode/variabel anggota non-statis harus bergantung pada objek tertentu yang akan dipanggil.
Tetapi harus dicatat bahwa meskipun metode anggota non-statis dan variabel anggota non-statis tidak dapat diakses dalam metode statis, metode/variabel anggota statis dapat diakses dalam metode anggota non-statis. Mari berikan contoh sederhana:
Dalam kode di atas, karena metode print2 ada secara independen dari objek, itu dapat dipanggil langsung dengan nama kelas. Jika metode/variabel non-statis dapat diakses dalam metode statis, maka jika ada pernyataan berikut dalam metode utama:
Myobject.print2 ();
Pada saat ini, tidak ada objek, dan STR2 tidak ada sama sekali, jadi akan ada kontradiksi. Hal yang sama berlaku untuk metode. Karena Anda tidak dapat memprediksi apakah variabel anggota non-statis diakses dalam metode print1, mengakses metode anggota non-statis dalam metode anggota statis juga dilarang.
Dan untuk metode anggota non-statis, jelas tidak terbatas untuk mengakses metode/variabel anggota statis.
Oleh karena itu, jika Anda ingin memanggil metode tanpa membuat objek, Anda dapat mengatur metode ini ke statis. Metode statis kami yang paling umum adalah metode utama. Adapun mengapa metode utama harus statis, sekarang sangat jelas. Karena program tidak membuat objek apa pun saat menjalankan metode utama, itu hanya dapat diakses melalui nama kelas.
Juga ingat bahwa meskipun tidak ditampilkan sebagai statis, konstruktor kelas sebenarnya adalah metode statis.
2) Variabel statis
Variabel statis juga disebut variabel statis. Perbedaan antara variabel statis dan variabel non-statis adalah bahwa variabel statis dibagikan oleh semua objek, dengan hanya satu salinan dalam memori, yang akan diinisialisasi jika dan hanya ketika kelas dimuat untuk pertama kalinya. Variabel non-statis dimiliki oleh objek dan diinisialisasi saat membuat objek. Ada banyak salinan, dan salinan yang dimiliki oleh masing -masing objek tidak saling mempengaruhi.
Urutan inisialisasi variabel anggota statis diinisialisasi dalam urutan yang ditentukan.
3) Blok kode statis
Fungsi kunci lain dari kata kunci statis adalah membentuk blok kode statis untuk mengoptimalkan kinerja program. Blok statis dapat ditempatkan di mana saja di kelas, dan bisa ada beberapa blok statis di kelas. Ketika kelas pertama kali dimuat, setiap blok statis akan dieksekusi dalam urutan blok statis dan hanya akan dieksekusi sekali.
Alasan mengapa blok statis dapat digunakan untuk mengoptimalkan kinerja program adalah karena karakteristiknya: mereka hanya akan dieksekusi sekali ketika kelas dimuat. Inilah contohnya:
class person {private date birthDate; orang publik (tanggal lahir) {this.birthdate = birthDate;} boolean isbornboomer () {date startDate = date.valueof ("1946"); tanggal endDate = date.valueof ("1964"); kembalinya batal. 0;}} Isbornboomer terbiasa apakah orang ini lahir pada tahun 1946-1964. Setiap kali isbornboomer dipanggil, dua objek akan dihasilkan, yang akan menyebabkan pemborosan ruang. Jika diubah untuk ini, itu akan lebih baik:
class person {tanggal lahir private; private static Date startDate, endDate; static {startDate = date.valueof ("1946"); endDate = date.valueof ("1964");} Public Person (tanggal lahir) {this.birthDate = bilkeDate;} boolean adalah kelahiran (kelahiran) {this. ulang tahun.compareto (endDate) <0;}} Oleh karena itu, berkali -kali, beberapa operasi inisialisasi yang hanya perlu dilakukan sekali akan ditempatkan di blok kode statis.
2. Kesalahpahaman kata kunci statis
1. Apakah kata kunci statis mengubah hak akses anggota di kelas?
Beberapa pemula akan membingungkan statis di Java dengan fungsi kata kunci statis di C/C ++. Ingatlah satu hal di sini: Tidak seperti statis dalam C/C ++, kata kunci statis di java tidak akan mempengaruhi ruang lingkup variabel atau metode. Di Java, satu -satunya kata kunci yang dapat memengaruhi izin akses adalah pribadi, publik, dan dilindungi (termasuk izin akses paket). Lihatlah contoh -contoh berikut untuk dipahami:
Kesalahan cepat "orang.
2. Bisakah variabel anggota statis diakses melalui ini?
Meskipun tidak ada ini untuk metode statis, dapatkah variabel anggota statis diakses melalui ini dalam metode non-statis? Mari kita lihat contoh berikut. Apa hasil dari output kode ini?
kelas publik utama {nilai int statis = 33; public static void main (string [] args) melempar Exception {new main (). printValue ();} private void printValue () {int value = 3; System.out.println (this.value);}} 33
Ini terutama tim pengamatan utama untuk memahami ini dan statis. Untuk apa ini? Ini mewakili objek saat ini. Jika printValue dipanggil melalui main baru (), objek saat ini adalah objek yang dihasilkan oleh Main baru (). Variabel statis dinikmati oleh objek, sehingga nilai dari nilai ini. Cetak tidak diragukan lagi 33. Nilai di dalam metode printValue adalah variabel lokal dan tidak dapat dikaitkan dengan ini sama sekali, jadi outputnya adalah 33. Selalu ingat satu hal di sini: meskipun variabel anggota statis tidak tergantung pada objek, mereka tidak dapat diakses melalui objek. Semua metode statis dan variabel statis dapat diakses melalui objek (selama izin akses sudah cukup).
3. Dapatkah statis bertindak pada variabel lokal?
Dalam C/C ++, statis dapat lingkup variabel lokal, tetapi ingat di java: statis tidak diperbolehkan digunakan untuk memodifikasi variabel lokal. Jangan tanya mengapa, ini adalah penyediaan sintaks Java.
3. Pertanyaan Wawancara Tertulis Umum
Berikut ini mencantumkan beberapa pertanyaan tentang kata kunci statis yang sering ditemui dalam wawancara tertulis. Mereka hanya untuk referensi. Jika Anda memiliki suplemen, jangan ragu untuk meninggalkan pesan di bawah ini.
1. Apa hasil output dari kode berikut?
Tes kelas publik memperluas basis {static {system.out.println ("test static");} test publik () {System.out.println ("test constructor");} public static void main (string [] args) {new test ();} basis kelas {static {Systatic {out.out.printl ("basis static {static {static {out.out.printl (" basis static {static {static {static {static {static.out.printl (") Base () {System.out.println ("base constructor");}} dasar statis
uji statis
konstruktor dasar
Konstruktor Uji
Adapun mengapa hasil ini terjadi, jangan membahasnya terlebih dahulu. Mari kita pikirkan tentang proses eksekusi spesifik kode ini. Pada awal eksekusi, pertama -tama kita harus menemukan metode utama, karena metode utama adalah pintu masuk ke program, tetapi sebelum menjalankan metode utama, kelas uji harus dimuat terlebih dahulu. Saat memuat kelas uji, ditemukan bahwa kelas uji mewarisi dari kelas dasar, sehingga akan berubah untuk memuat kelas dasar terlebih dahulu. Saat memuat kelas dasar, ia 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 output di atas muncul.
2. Apa hasil output dari kode ini?
public class Test {Person person = new Person("Test");static{System.out.println("test static");}public Test() {System.out.println("test constructor");}public static void main(String[] args) {new MyClass();}}class Person{static{System.out.println("person static");}public Person(String str) {System.out.println("person "+str);}}class MyClass extends Test {Person person = new Person("MyClass");static{System.out.println("myclass static");}public MyClass() {System.out.println("myclass constructor");}} Uji statis 1
Uji statis 2
Meskipun tidak ada pernyataan dalam metode utama, mereka masih akan menghasilkan, karena alasannya telah dijelaskan di atas. Selain itu, blok statis dapat muncul di mana saja di kelas (selama tidak ada di dalam metode, ingat, tidak ada metode yang bisa melakukannya) dan eksekusi dieksekusi dalam urutan blok statis.
Di atas adalah analisis komprehensif dari kata kunci statis di Java yang diperkenalkan kepada Anda oleh editor. Saya harap ini akan membantu Anda. Jika Anda memiliki pertanyaan, silakan tinggalkan saya pesan dan editor akan membalas Anda tepat waktu. Terima kasih banyak atas dukungan Anda ke situs web Wulin.com!