Biarkan anda memahami mekanisme refleksi JAVA (perkongsian ringkasan)
Artikel ini membawa anda pengetahuan yang berkaitan tentang java, yang terutamanya memperkenalkan isu yang berkaitan dengan mekanisme pantulan, termasuk apa itu pantulan, apa yang boleh dilakukan pantulan, API berkaitan pantulan, dll. Semoga ia membantu semua orang.
Pembelajaran yang disyorkan: "Tutorial Pembelajaran Java"
1.
Konsep yang sangat penting dalam pembangunan Java ialah mekanisme refleksi Java, yang juga merupakan salah satu ciri penting Java.
Konsep refleksi pertama kali dicadangkan oleh Smith pada tahun 1982. Ia terutamanya merujuk kepada keupayaan program untuk mengakses, mengesan dan mengubah suai keadaan atau tingkah lakunya sendiri Melalui refleksi, kaedah persendirian dan sifat persendirian boleh dipanggil . Beberapa kerangka juga menggunakan prinsip refleksi.
Refleksi (refleksi) adalah kunci untuk dianggap sebagai bahasa dinamik Mekanisme refleksi membolehkan program mendapatkan maklumat dalaman mana-mana kelas
semasa pelaksanaan dengan bantuan. API Refleksi, dan boleh mengendalikannya secara langsung Sifat dalaman dan kaedah mana-mana objek.
Kelas mempunyai berbilang komponen, seperti pembolehubah ahli, kaedah, pembina, dll. Refleksi adalah untuk memuatkan kelas dan membedah pelbagai komponen kelas.
2. Apa yang boleh dilakukan oleh refleksi?
Mekanisme refleksi Java mengetahui struktur asas kelas Keupayaan untuk mengesan struktur kelas Java ini adalah apa yang kami panggil "pemeriksaan kendiri" kelas Java. Sebagai contoh, dalam eclipse, dengan satu klik, alat penyusunan secara automatik akan menyenaraikan semua kaedah dan sifat yang boleh digunakan oleh objek untuk dipilih oleh pengguna. Ini menggunakan prinsip refleksi Java untuk mengesan dan memeriksa sendiri objek yang kami cipta.
Refleksi boleh dilakukan:
- Tentukan kelas yang dimiliki oleh mana-mana objek pada masa larian; >Hakim pembolehubah ahli dan kaedah mana-mana kelas pada masa jalankan; anotasi pada masa jalankan;
- menjana ejen dinamik; : kaedah
- : harta
- : pembina
- …
-
java.lang.Class
Selepas atur cara melepasi arahan javac.exe, ia akan menjana satu atau lebih bytecode Fail (akhiran .class). Kemudian kami menggunakan arahan java.exe untuk mentafsir dan menjalankan fail bytecode tertentu. Setara dengan memuatkan fail bytecode tertentu ke dalam memori. Proses ini dipanggil memuatkan kelas - . Kelas yang dimuatkan ke dalam memori dipanggil kelas masa jalan dan kelas masa jalan ini digunakan sebagai contoh Kelas.
java.lang.reflect.Method
Dalam erti kata lain, contoh Kelas sepadan dengan kelas masa jalan. -
java.lang.reflect.Field
Kelas waktu jalan yang dimuatkan ke dalam memori akan dicache untuk tempoh masa tertentu. Dalam masa ini, kita boleh mendapatkan kelas masa jalan ini dengan cara yang berbeza . java.lang.reflect.Constructor
(2). Proses pemuatan kelas:
Dalam Objek baharu kami atau apabila menggunakan
, pemuat kelas akan memuatkan kelas ke dalam memori dan mencipta objek Kelas
Bagaimana untuk mendapatkan objek Kelas?
Kelas.
Objek.
Class.forName("包名.类")
(ClassLoader)
("Nama pakej. Kelas");
class
Kerja yang dilakukan oleh pautan adalah untuk mengesahkan sama ada kod bait itu sah. Peruntukkan ruang memori untuk statik dan mulakannya (bukan pemulaan sebenar, hanya berikan jenis pembolehubah yang sepadan nilai lalai, seperti int kepada 0, dua kali ganda kepada 0.0)Nyahpasang:
getClass()
- Punggah dari memori (kita tidak perlu peduli bila hendak memunggah, ia dilakukan oleh JVM)
(3) Pemuat kelasClass.forName
Kelas (CLASS) hanya boleh dijalankan selepas dimuatkan ke dalam JVM. Apabila menjalankan program yang ditentukan, JVM akan memuatkan fail .class yang disusun ke dalam memori mengikut keperluan dan peraturan tertentu, dan menyusunnya ke dalam aplikasi Java yang lengkap. Proses pemuatan ini diselesaikan oleh pemuat kelas, khususnya, ia dilaksanakan oleh ClassLoader dan subkelasnya. Pemuat kelas itu sendiri juga merupakan kelas Intipatinya adalah untuk membaca fail kelas dari cakera keras ke dalam memori! Klasifikasi pemuat kelas:
-
BootStrap:
bertanggungjawab terutamanya untuk memuatkan perpustakaan kelas teras (java.lang.*
, dsb.), membina ExtClassLoader
dan APPClassLoader
; bertanggungjawab terutamanya untuk memuatkan Direktori jre/lib/ext Beberapa pakej balang lanjutan di bawah
-
ExtClassLoader:
bertanggungjawab untuk memuatkan kelas fungsi utama aplikasi (fail java yang ditulis sendiri dimuatkan oleh pemuat kelas ini); >
-
AppClassLoader:
Mekanisme perwakilan (penghantaran) ibu bapa:
System.out.println("app:" + System.getProperty("java.class.path"));
System.out.println("ext:" + System.getProperty("java.ext.dirs"));
System.out.println("----bootstrap---");
String[] str = System.getProperty("sun.boot.class.path").split(";");
for (String s : str) {
System.out.println(s);
}
Salin selepas log masuk
Apabila fail seperti Hello.class hendak dimuatkan. Tidak kira pemuat kelas tersuai kami, kami akan menyemak dahulu sama ada ia telah dimuatkan dalam AppClassLoader Jika ya, tidak perlu memuatkannya lagi. Jika tidak, pemuat induk akan diperoleh, dan kaedah loadClass pemuat induk akan dipanggil. Dengan cara yang sama, kelas induk akan terlebih dahulu menyemak sama ada ia telah dimuatkan, dan jika tidak, naik. Beri perhatian kepada proses rekursif ini Sehingga ia mencapai Bootstrap classLoader, ia sedang menyemak sama ada ia telah dimuatkan dan tidak akan memilih untuk memuatkannya dengan sendirinya. Sehingga BootstrapClassLoader, tiada pemuat induk Pada masa ini, saya mula mempertimbangkan sama ada saya boleh memuatkannya, saya akan tenggelam ke pemuat kanak-kanak untuk memuatkannya, sehingga ke lapisan bawah. Jika tiada pemuat boleh memuatkannya, ia akan Membuang ClassNotFoundException. Jadi adakah sesiapa mempunyai soalan berikut? Mengapa mekanisme ini direka bentuk
Satu kelebihan reka bentuk ini ialah jika seseorang ingin menggantikan kelas peringkat sistem: String.java. Mengganggu pelaksanaannya. Di bawah mekanisme ini, kelas sistem ini telah dimuatkan oleh Bootstrap classLoader (mengapa? Kerana apabila kelas perlu dimuatkan, perkara pertama yang cuba dimuatkan ialah BootstrapClassLoader), jadi pemuat kelas lain tidak Memuatkan lagi apabila peluang yang timbul menghalang implantasi kod berbahaya ke tahap tertentu.
Pembelajaran yang disyorkan: "
tutorial java"
BootStrap:
bertanggungjawab terutamanya untuk memuatkan perpustakaan kelas teras (java.lang.*
, dsb.), membina ExtClassLoader
dan APPClassLoader
; bertanggungjawab terutamanya untuk memuatkan Direktori jre/lib/ext Beberapa pakej balang lanjutan di bawah ExtClassLoader:
bertanggungjawab untuk memuatkan kelas fungsi utama aplikasi (fail java yang ditulis sendiri dimuatkan oleh pemuat kelas ini); >AppClassLoader:
System.out.println("app:" + System.getProperty("java.class.path")); System.out.println("ext:" + System.getProperty("java.ext.dirs")); System.out.println("----bootstrap---"); String[] str = System.getProperty("sun.boot.class.path").split(";"); for (String s : str) { System.out.println(s); }
Atas ialah kandungan terperinci Biarkan anda memahami mekanisme refleksi JAVA (perkongsian ringkasan). Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

Panduan untuk Nombor Smith di Jawa. Di sini kita membincangkan Definisi, Bagaimana untuk menyemak nombor smith di Jawa? contoh dengan pelaksanaan kod.

Dalam artikel ini, kami telah menyimpan Soalan Temuduga Spring Java yang paling banyak ditanya dengan jawapan terperinci mereka. Supaya anda boleh memecahkan temuduga.

Java 8 memperkenalkan API Stream, menyediakan cara yang kuat dan ekspresif untuk memproses koleksi data. Walau bagaimanapun, soalan biasa apabila menggunakan aliran adalah: bagaimana untuk memecahkan atau kembali dari operasi foreach? Gelung tradisional membolehkan gangguan awal atau pulangan, tetapi kaedah Foreach Stream tidak menyokong secara langsung kaedah ini. Artikel ini akan menerangkan sebab -sebab dan meneroka kaedah alternatif untuk melaksanakan penamatan pramatang dalam sistem pemprosesan aliran. Bacaan Lanjut: Penambahbaikan API Java Stream Memahami aliran aliran Kaedah Foreach adalah operasi terminal yang melakukan satu operasi pada setiap elemen dalam aliran. Niat reka bentuknya adalah

Panduan untuk TimeStamp to Date di Java. Di sini kita juga membincangkan pengenalan dan cara menukar cap waktu kepada tarikh dalam java bersama-sama dengan contoh.

Kapsul adalah angka geometri tiga dimensi, terdiri daripada silinder dan hemisfera di kedua-dua hujungnya. Jumlah kapsul boleh dikira dengan menambahkan isipadu silinder dan jumlah hemisfera di kedua -dua hujungnya. Tutorial ini akan membincangkan cara mengira jumlah kapsul yang diberikan dalam Java menggunakan kaedah yang berbeza. Formula volum kapsul Formula untuk jumlah kapsul adalah seperti berikut: Kelantangan kapsul = isipadu isipadu silinder Dua jumlah hemisfera dalam, R: Radius hemisfera. H: Ketinggian silinder (tidak termasuk hemisfera). Contoh 1 masukkan Jejari = 5 unit Ketinggian = 10 unit Output Jilid = 1570.8 Unit padu menjelaskan Kirakan kelantangan menggunakan formula: Kelantangan = π × r2 × h (4

PHP dan Python masing -masing mempunyai kelebihan sendiri, dan pilihannya harus berdasarkan keperluan projek. 1.Php sesuai untuk pembangunan web, dengan sintaks mudah dan kecekapan pelaksanaan yang tinggi. 2. Python sesuai untuk sains data dan pembelajaran mesin, dengan sintaks ringkas dan perpustakaan yang kaya.

PHP adalah bahasa skrip yang digunakan secara meluas di sisi pelayan, terutamanya sesuai untuk pembangunan web. 1.PHP boleh membenamkan HTML, memproses permintaan dan respons HTTP, dan menyokong pelbagai pangkalan data. 2.PHP digunakan untuk menjana kandungan web dinamik, data borang proses, pangkalan data akses, dan lain -lain, dengan sokongan komuniti yang kuat dan sumber sumber terbuka. 3. PHP adalah bahasa yang ditafsirkan, dan proses pelaksanaan termasuk analisis leksikal, analisis tatabahasa, penyusunan dan pelaksanaan. 4.Php boleh digabungkan dengan MySQL untuk aplikasi lanjutan seperti sistem pendaftaran pengguna. 5. Apabila debugging php, anda boleh menggunakan fungsi seperti error_reporting () dan var_dump (). 6. Mengoptimumkan kod PHP untuk menggunakan mekanisme caching, mengoptimumkan pertanyaan pangkalan data dan menggunakan fungsi terbina dalam. 7

Java ialah bahasa pengaturcaraan popular yang boleh dipelajari oleh pembangun pemula dan berpengalaman. Tutorial ini bermula dengan konsep asas dan diteruskan melalui topik lanjutan. Selepas memasang Kit Pembangunan Java, anda boleh berlatih pengaturcaraan dengan mencipta program "Hello, World!" Selepas anda memahami kod, gunakan gesaan arahan untuk menyusun dan menjalankan program, dan "Hello, World!" Pembelajaran Java memulakan perjalanan pengaturcaraan anda, dan apabila penguasaan anda semakin mendalam, anda boleh mencipta aplikasi yang lebih kompleks.
