Urutan memuat file kelas
1. Pertama memuat variabel statis dan blok inisialisasi statis dari kelas induk (urutan eksekusi diatur secara berurutan)
2. Muat ulang variabel statis dan blok inisialisasi statis yang menjalankan kelas ini
Selama kelas tidak dihancurkan, variabel statis dan blok inisialisasi statis hanya akan dieksekusi sekali, dan kedua langkah ini tidak akan dilakukan lebih lanjut dalam operasi kelas berikutnya.
Proses pembuatan instance kelas
Sebuah contoh kelas dibuat hanya ketika metode baru dipanggil.
1. Dalam urutan pemuatan file kelas di atas (lewati langkah ini jika kelas telah dimuat)
2. Variabel non-statis dan blok inisialisasi non-statis dari kelas induk
3. Metode konstruksi kelas induk
4. Variabel non-statis dan blok inisialisasi non-statis dari kelas ini
5. Metode konstruksi kelas ini
4. Saat menghancurkan instance kelas, pertama -tama hancurkan bagian subkelas dan hancurkan bagian kelas induk.
Baik metode statis dan metode non-statis secara pasif disebut
Artinya, sistem tidak akan menelepon dan mengeksekusi secara otomatis. Oleh karena itu, pengguna tidak menjalankannya ketika tidak dipanggil. Perbedaan utama adalah bahwa metode statis dapat dipanggil langsung dengan nama kelas (dan objek instantiasi juga dapat dilakukan), sedangkan metode non-statis hanya dapat dipanggil setelah instantiasi objek.
Konsep terkait
Kata kunci statis:
adalah pengubah yang digunakan untuk memodifikasi anggota (variabel anggota dan fungsi anggota)
Anggota yang dimodifikasi memiliki karakteristik berikut:
Muat saat kelas dimuat (segera setelah kelas dimuat, data statis akan segera memuat ruang dalam memori)
Menghilang saat kelas menghilang, menunjukkan bahwa ia memiliki siklus hidup terpanjang
Secara istimewa di atas keberadaan objek (objek menghilang, statis masih ada)
Keberadaan statis terlebih dahulu, objek ada nanti
Dibagikan oleh semua objek
Simpan ruang memori
Ketika seorang anggota dimodifikasi secara statis, selain dipanggil oleh objek, itu juga dapat dipanggil langsung dengan nama kelas.
Menulis: Nama kelas. Anggota statis
Catatan tentang penggunaan
Metode statis hanya dapat mengakses anggota statis (metode dan variabel)
Metode non-statis dapat mengakses statis dan non-statis
Kata kunci ini dan super tidak dapat ditulis dalam metode statis
Karena prioritas statis atas objek, ini tidak dapat muncul dalam metode statis
Fungsi utamanya statis
publicstaticvoidMain (string [] args) {}
Kapan Menggunakan Statis?
Kita perlu memulai dari dua aspek: karena konten modifikasi statis mencakup variabel dan fungsi anggota.
Kapan mendefinisikan variabel statis (variabel kelas)
Ketika data bersama muncul di objek, data dimodifikasi secara statis. Data unik dalam objek harus didefinisikan sebagai tidak ada dalam memori heap.
Kapan mendefinisikan fungsi statis
Ketika data non-statis (data spesifik objek) tidak diakses secara internal, fungsi dapat didefinisikan sebagai statis.
Pro dan kontra statis
laba:
1. Menyimpan data bersama di ruang terpisah untuk objek, menghemat ruang. Tidak perlu menyimpan satu salinan dari setiap objek.
2. Dapat dipanggil langsung dengan nama kelas
Kerugian:
1. Siklus hidup terlalu panjang
2. Keterbatasan akses terjadi (hanya akses statis)
Struktur memori
Ketika program Java berjalan, mereka perlu mengalokasikan ruang dalam memori. Untuk meningkatkan efisiensi komputasi, berbagai bidang ruang telah dibagi, karena setiap area memiliki metode pemrosesan data tertentu dan metode manajemen memori.
Menumpuk memori
Digunakan untuk menyimpan variabel lokal ketika data digunakan, ruang yang ditempati akan secara otomatis dirilis.
Tumpukan memori
Array dan Objek (Entitas), instance yang dibuat melalui baru disimpan dalam memori heap (variabel anggota ditetapkan dengan pembentukan objek dan ada dalam memori heap di mana objek berada). Setiap entitas memiliki nilai alamat memori (variabel dirujuk oleh alamat). Variabel dalam entitas memiliki nilai inisialisasi default. Entitas tidak lagi digunakan dan akan didaur ulang oleh pengumpul sampah dalam waktu yang tidak pasti (mekanisme pengumpulan sampah)
Area metode, area metode lokal, daftar
memeriksa
| Pesanan pemuatan | Variabel statis kelas induk = 1 | Variabel non-statis kelas induk = 1 | Variabel statis subkelas = 1 | Variabel non-statis subkelas = 1 |
|---|---|---|---|---|
| [Kelas induk memanggil metode statis kelas induk] | Parent.pstaticmethod (); | |||
| Inisialisasi statis kelas induk blok satu | 2 | |||
| Inisialisasi statis kelas induk blok dua | 3 | |||
| Metode statis kelas induk | 4 | |||
| [Subkelas Panggilan Metode Statis Subkelas] | Child.cstaticmethod (); | |||
| Subclass Static Initialization Block One | 5 | 2 | ||
| Subclass Static Initialization Block Two | 6 | 3 | ||
| Metode statis subkelas | 7 | 4 | ||
| 【Instantiasi subkelas】 | Anak c = anak baru (); | |||
| Kelas induk adalah blok inisialisasi non-statis satu | 8 | 2 | ||
| Inisialisasi Non-Statis kelas induk memblokir dua | 9 | 3 | ||
| Konstruktor kelas induk | 10 | 4 | ||
| Subkelas Inisialisasi Non-Statis Blokir Satu | 11 | 5 | 5 | 2 |
| Subkelas Inisialisasi Non-Statis Blok Dua | 12 | 6 | 6 | 3 |
| Metode Konstruksi Subkelas | 13 | 7 | 7 | 4 |
| 【Kelas Induk Instantiates Subclass Object】 | Induk p = anak baru (); | |||
| Kelas induk adalah blok inisialisasi non-statis satu | 14 | 2 | ||
| Inisialisasi Non-Statis kelas induk memblokir dua | 15 | 3 | ||
| Konstruktor kelas induk | 16 | 4 | ||
| Subkelas Inisialisasi Non-Statis Blokir Satu | 17 | 5 | 8 | 2 |
| Subkelas Inisialisasi Non-Statis Blok Dua | 18 | 6 | 9 | 3 |
| Metode Konstruksi Subkelas | 19 | 7 | 10 | 4 |
| Pesanan pemuatan | Variabel statis kelas induk = 1 | Variabel non-statis kelas induk = 1 | Variabel statis subkelas = 1 | Variabel non-statis subkelas = 1 |
|---|---|---|---|---|
| 【Instantiasi subkelas】 | Anak c = anak baru (); | |||
| Inisialisasi statis kelas induk blok satu | 2 | |||
| Inisialisasi statis kelas induk blok dua | 3 | |||
| Subclass Static Initialization Block One | 4 | 2 | ||
| Subclass Static Initialization Block Two | 5 | 3 | ||
| Kelas induk adalah blok inisialisasi non-statis satu | 6 | 2 | ||
| Inisialisasi Non-Statis kelas induk memblokir dua | 7 | 3 | ||
| Konstruktor kelas induk | 8 | 4 | ||
| Subkelas Inisialisasi Non-Statis Blokir Satu | 9 | 5 | 4 | 2 |
| Subkelas Inisialisasi Non-Statis Blok Dua | 10 | 6 | 5 | 3 |
| Metode Konstruksi Subkelas | 11 | 7 | 6 | 4 |
| 【Kelas Induk Instantiates Subclass Object】 | Induk p = anak baru (); | |||
| Kelas induk adalah blok inisialisasi non-statis satu | 12 | 2 | ||
| Inisialisasi Non-Statis kelas induk memblokir dua | 13 | 3 | ||
| Konstruktor kelas induk | 14 | 4 | ||
| Subkelas Inisialisasi Non-Statis Blokir Satu | 15 | 5 | 7 | 2 |
| Subkelas Inisialisasi Non-Statis Blok Dua | 16 | 6 | 8 | 3 |
| Metode Konstruksi Subkelas | 17 | 7 | 9 | 4 |
| [Kelas induk memanggil metode statis kelas induk] | Parent.pstaticmethod (); | |||
| Metode statis kelas induk | 18 | |||
| [Subkelas Panggilan Metode Statis Subkelas] | Child.cstaticmethod (); | |||
| Metode statis subkelas | 19 | 10 |
kelas publik classtest {public static void main (string args []) {System.out.println ("【Subclass Instantiation】 | Child C = New Child ();"); Anak c = anak baru (); System.out.println ("【Kelas Premium membuat objek subkelas】 | induk p = anak baru ();"); Induk p = anak baru (); System.out.println ("[kelas premium menyebut metode statis kelas induk] | parent.pstaticmethod ();"); Parent.pstaticmethod (); System.out.println ("[Subclass Calls Metode Statis Subclass] | Child.cstaticMethod ();"); Child.cstaticmethod (); }} kelas publik classtest2 {public static void main (string args []) {System.out.println ("[kelas ketua memanggil metode statis kelas induk] | parent.pstaticmethod ();"); Parent.pstaticmethod (); System.out.println ("[Metode Subclass Calling Subclass] | Child.cstaticMethod ();"); Child.cstaticmethod (); System.out.println ("[Subclass Instantiation] | Child C = New Child ();"); Anak c = anak baru (); System.out.println ("【kelas induk membuat objek kelas anak】 | induk p = anak baru ();"); Induk p = anak baru (); }} Parent Public Class {// Parent Class Static Variable Static Int M = 1; // kelas induk variabel non-statis int n = 1; // pernyataan statis blok 1 statis {m ++; // j ++; Variabel Non-Statis kelas induk tidak dapat digunakan dalam blok pernyataan statis System.out.println ("Blok Inisialisasi Statis Kelas Persiapan 1 |" + M); } // pernyataan statis blok 2 statis {m ++; System.out.println ("Blok Inisialisasi Statis Kelas Persiapan 2 |" + M); } // konstruktor Public Parent () {M ++; n ++; System.out.println ("Konstruktor Kelas Persiapan |" + M + "|" + n); } // blok pernyataan nonstatic {m ++; n ++; System.out.println ("Blok Inisialisasi Non-Statis Kelas Ketua 1 |" + M + "|" + N); } // blok pernyataan nonstatic {m ++; n ++; System.out.println ("Kelas Ketua Blok Inisialisasi Non-Statis 2 |" + M + "|" + N); } // metode nonstatic public void pMethod () {m ++; n ++; System.out.println ("Metode Non-Statis Kelas Ketua |" + M + "|" + n); kembali; } // Metode statis public static pstaticmethod () {m ++; // j ++; Variabel non-statis kelas induk tidak dapat digunakan dalam metode metode statis.out.println ("Metode statis ketua |" + m); kembali; } @Override Protected void finalize () melempar lempar {super.finalize (); System.out.println ("Hancurkan kelas induk |"); }} anak kelas publik memperluas orang tua {// variabel statis statis int i = 1; // variabel non -statis int j = 1; // pernyataan statis blok 1 statis {m ++; i ++; // j ++; Variabel nonstatik tidak dapat digunakan dalam blok pernyataan statis System.out.println ("Subclass Static Initialization Block 1" + "|" + M + "||" + i); } // pernyataan statis blok 2 statis {m ++; i ++; System.out.println ("Subclass Static Initialization Block 2" + "|" + M + "||" + i); } // konstruktor anak publik () {m ++; n ++; i ++; j ++; System.out.println ("Subclass Constructor" + "|" + M + "|" + n + "|" + i + "|" + j); } // blok pernyataan nonstatic {m ++; n ++; i ++; j ++; System.out.println ("Subkelas Inisialisasi Non-Statis Blok Satu" + "|" + M + "|" + n + "|" + i + "|" + j); } // blok pernyataan nonstatic {m ++; n ++; i ++; j ++; System.out.println ("Subkelas Inisialisasi Non-Statis Blok Dua" + "|" + M + "|" + n + "|" + i + "|" + j); } // metode nonstatic public void pMethod () {m ++; n ++; i ++; j ++; System.out.println ("Subkelas mewarisi metode non-statis" + "|" + m + "|" + n + "|" + i + "|" + j); kembali; } // Metode statis public void pstaticmethod () {// Metode statis tidak dapat diwariskan m ++; i ++; // j ++; Variabel nonstatik tidak dapat digunakan dalam metode statis; } // metode nonstatic public void cmethod () {m ++; n ++; i ++; j ++; System.out.println ("Metode Non-Statis Subkelas" + "|" + M + "|" + n + "|" + i + "|" + j); kembali; } // Metode statis public static void cStaticMethod () {m ++; i ++; // j ++; Variabel non-statis tidak dapat digunakan dalam metode statis System.out.println ("Metode Statis Subkelas" + "|" + M + "||" + i); kembali; } @Override Protected void finalize () melempar lempar {super.finalize (); System.out.println ("Hancurkan subkelas |"); }}Meringkaskan
Di atas adalah semua konten artikel ini tentang analisis komprehensif proses pemuatan kelas di Java. Saya harap ini akan membantu semua orang. Jika Anda memiliki pertanyaan, Anda dapat meninggalkan pesan kapan saja dan editor akan membalas semua orang tepat waktu. Menantikan komentar Anda yang berharga.