Kata kunci statis Java dan variabel statis java dan metode statis
Pengubah statis dapat digunakan dengan variabel dan metode untuk menunjukkan bahwa itu "statis".
Variabel statis dan metode statis dapat diakses melalui nama kelas, dan tidak perlu membuat objek kelas untuk mengakses anggota statis kelas, sehingga anggota yang dimodifikasi oleh statis juga disebut variabel kelas dan metode kelas. Variabel statis berbeda dari variabel instan, dan variabel instan selalu diakses melalui objek karena nilainya bervariasi di antara objek.
Silakan lihat contoh berikut:
Demo Public {Static Int I = 10; i);
Hasil Menjalankan:
Variabel kelas i = 10 variabel instance j = 20
Alokasi memori statis
Variabel statis milik kelas dan bukan milik objek independen apa pun, sehingga Anda dapat mengakses variabel statis tanpa membuat contoh kelas. Hasil ini karena kompiler hanya membuat salinan variabel statis untuk seluruh kelas, yaitu, hanya mengalokasikan satu ruang memori. Variabel contoh berbeda. Setiap kali suatu objek dibuat, ruang memori akan dialokasikan.
Silakan lihat kode berikut:
Demo Public {Static Int I; ; obj2 .j = " + obj2.j);}}
Hasil Menjalankan:
obj1.i = 10, obj1.j = 20obj2.i = 10, obj2.j = 0
Catatan: Meskipun variabel statis juga dapat diakses melalui objek, mereka tidak disarankan dan kompiler juga akan menghasilkan peringatan.
Dalam kode di atas, saya adalah variabel statis. Ini karena obj1.i dan obj2.i menunjuk ke ruang memori yang sama, sementara obj1.j dan obj2.j menunjuk ke ruang memori yang berbeda.
Catatan: Variabel statis akan diinisialisasi saat kelas dimuat. Yaitu, selama kelas dimuat, itu akan diinisialisasi terlepas dari apakah Anda menggunakan variabel statis ini atau tidak.
Ringkasan: Variabel kelas dimodifikasi dengan kata kunci statis. Perubahan variabel akan mempengaruhi objek lain. Ada dua cara untuk mengakses secara eksternal: akses melalui objek atau akses melalui nama kelas.
Metode statis
Metode statis adalah metode yang tidak dapat melakukan operasi pada suatu objek. Misalnya, metode POW () dari kelas matematika adalah metode statis dengan sintaks matematika.pow (x, a), yang digunakan untuk menghitung kekuatan a dari x, dan tidak perlu membuat matematika apa pun objek saat digunakan.
Karena metode statis tidak dapat mengoperasikan objek, variabel instan tidak dapat diakses dalam metode statis, dan hanya dapat mengakses variabel statis kelas mereka sendiri.
Metode statis dapat digunakan dalam situasi berikut:
Metode tidak perlu mengakses status objek, dan parameter yang diperlukan disediakan oleh parameter eksplisit (misalnya, math.pow ()).
Metode hanya perlu mengakses variabel statis kelas.
Pembaca harus memperhatikan bahwa main () juga merupakan metode statis yang tidak beroperasi pada objek apa pun. Bahkan, tidak ada objek pada saat startup program, metode utama () adalah entri ke program dan akan dieksekusi dan objek yang diperlukan oleh program dibuat.
Ringkasan variabel statis dan metode statis:
Metode statis suatu kelas hanya dapat mengakses variabel statis;
Metode statis suatu kelas tidak dapat secara langsung memanggil metode non-statis;
Jika izin kontrol akses memungkinkan, variabel statis dan metode statis juga dapat diakses melalui objek, tetapi tidak disarankan;
Objek saat ini tidak ada dalam metode statis, jadi ini tidak dapat digunakan, dan tentu saja super tidak dapat digunakan;
Metode statis tidak dapat ditimpa dengan metode non-statis;
Konstruktor tidak mengizinkan deklarasi statis;
Variabel lokal tidak dapat dimodifikasi dengan statis.
Contoh metode statis:
Demo Public {Static Int Sum (int x, int y) {return x + y; "10 + 10 =" + jumlah);
Hasil Menjalankan:
10+10 = 20
Metode statis tidak memerlukan contoh kelas yang dimilikinya akan dipanggil, jadi tidak ada nilai dari ini dan variabel instance tidak dapat diakses, jika tidak itu akan menyebabkan kesalahan kompilasi.
Catatan: Variabel instan hanya dapat diakses melalui objek dan tidak dapat diakses melalui kelas.
Static Initializer (blok statis)
Sebuah blok adalah sepotong kode yang dikelilingi oleh kawat gigi. Inisialisasi statis adalah blok statis yang ada di kelas dan di luar metode. Inisialisasi statis hanya dieksekusi sekali ketika kelas dimuat (ketika kelas pertama kali digunakan), dan sering digunakan untuk menginisialisasi variabel statis.
Kode contoh:
Demo Public {Public Static Int I; " + i);} public static void main (string [] args) {System.out.println (" demo.i = " + demo.i); demo baru (). test ();}}
Hasil operasi adalah:
Sekarang di statis block.demo.i = 10test Metode: i = 10
Impor statis
Impor statis adalah fitur baru Java 5, yang digunakan untuk mengimpor variabel statis dan metode kelas statis.
Secara umum, kami menulis ini di kelas impor:
Impor Packagename.className; // Impor kelas tertentu
atau
Impor Packagename.*;
Dan impor statis dapat ditulis seperti ini:
impor packagename.classname.methonname;
atau
Impor Packagename.ClassName.*;
Setelah mengimpor, Anda dapat secara langsung memanggil metode statis dengan nama metode di kelas saat ini, dan Anda tidak perlu lagi menggunakan classname.methodname untuk mengaksesnya.
Untuk variabel statis yang sering digunakan dan metode statis, mereka dapat diimpor secara statis. Keuntungan dari impor statis adalah bahwa ia dapat menyederhanakan beberapa operasi, seperti sistem pernyataan output.out.println () adalah variabel statis dari kelas sistem. dan langsung kali.
Silakan lihat kode berikut:
Impor statis java.lang.system.*; impor statis java.lang.math.random; demo kelas publik {public static void main (string [] args) {out.println ("Diproduksi dengan nomor acak:" + acak () );}}
Hasil Menjalankan:
Angka acak yang dihasilkan: 0,05800891549018705
Kata kunci Java Final: Blokir warisan dan polimorfisme <BR /> di Java, ketika mendeklarasikan kelas, variabel dan metode, final kata kunci dapat digunakan untuk memodifikasinya. Data yang dimodifikasi oleh final memiliki karakteristik "keadaan akhir" dan berarti "final". Peraturan spesifiknya adalah sebagai berikut:
Kelas yang dimodifikasi oleh final tidak dapat diwarisi.
Metode modifikasi akhir tidak dapat ditulis ulang oleh subkelas.
Variabel yang dimodifikasi oleh final (variabel anggota atau variabel lokal) menjadi konstan dan hanya dapat ditetapkan sekali.
Variabel anggota yang dimodifikasi oleh final harus ditetapkan pada saat yang sama dengan deklarasi. digunakan.
Variabel lokal yang dimodifikasi oleh final hanya dapat menyatakan bahwa itu tidak menetapkan, dan kemudian ditetapkan pada satu waktu.
Final umumnya digunakan untuk memodifikasi data yang tidak dapat diubah sesuka hati untuk menghindari penyalahgunaan, seperti metode untuk mengimplementasikan metode segitiga matematika, operasi eksponensial dan fungsi lainnya, serta konstanta matematika π = 3.141593, E = 2.71828 et al.
Bahkan, untuk memastikan keadaan akhir, kelas Java.lang.math yang menyediakan metode dan konstanta di atas juga telah didefinisikan sebagai final.
Perlu dicatat bahwa jika variabel yang merujuk suatu jenis (jenis kelas apa pun) ditandai sebagai final, maka variabel tidak dapat menunjuk ke objek lain. Tetapi konten objek dapat diubah, karena hanya referensi itu sendiri yang final.
Jika variabel ditandai final, hasilnya adalah untuk membuatnya konstan. Ingin mengubah nilai variabel akhir akan menyebabkan kesalahan kompilasi. Berikut adalah contoh dari mendefinisikan variabel akhir dengan benar:
Final Public int max_array_size = 25; // Nama konstan umumnya dikapitalisasi
Konstanta tidak dapat diwariskan karena mereka memiliki modifikasi akhir.
Silakan lihat kode berikut:
Demo Kelas Akhir Publik {Public Static Int Total_number = 5; = ++ Total_number; Lakukan penugasan sekunder}}
Final juga dapat digunakan untuk memodifikasi kelas (sebelum kata kunci kelas) untuk mencegah kelas mendapatkan subclass. Ini dilakukan untuk alasan keamanan, karena perlu untuk memastikan bahwa begitu string direferensikan, itu harus berupa string dari string kelas, bukan string dari beberapa kelas lain (kelas string mungkin diwariskan dan dirusak dengan jahat).
Metode juga dapat dimodifikasi dengan final, dan metode yang dimodifikasi dengan final tidak dapat ditimpa; Setelah kelas dinyatakan sebagai final, metode yang terkandung dalam kelas itu juga akan dinyatakan secara implisit sebagai final, tetapi variabelnya tidak.
Metode yang dimodifikasi oleh final adalah pengikatan statis dan tidak akan menghasilkan polimorfisme (pengikatan dinamis). Di Java, metode yang dimodifikasi oleh statis atau pribadi akan secara implisit dinyatakan sebagai final karena pengikatan dinamis tidak memiliki arti.
Karena pengikatan dinamis mengkonsumsi sumber daya dan seringkali tidak diperlukan, beberapa programmer percaya bahwa kecuali ada alasan yang cukup untuk menggunakan polimorfisme, semua metode harus dimodifikasi dengan final.
Pemahaman ini agak ekstrem, karena kompiler instan dalam JVM dapat memantau informasi operasi program secara real time dan dapat secara akurat mengetahui hubungan warisan antar kelas. Jika suatu metode tidak ditimpa dan pendek, kompiler dapat mengoptimalkannya, yang disebut inlining. Misalnya, panggilan inline ke e.getName () akan diganti dengan mengakses variabel e.name. Ini adalah peningkatan yang bermakna, karena transfer cabang yang digunakan oleh CPU ketika memproses instruksi bahwa metode panggilan akan mengganggu kebijakan instruksi prefetch, jadi ini dianggap tidak populer. Namun, jika getName () ditimpa di kelas lain, kompiler tidak dapat tahu apa yang akan dilakukan kode yang ditimpa, sehingga tidak dapat diletakkan.