Jadual Kandungan
Mendapatkan Objek Kelas
Memeriksa dan menggunakan ahli kelas
1. Mendapatkan dan menggunakan kaedah
2. Mengakses dan mengubah suai bidang
3. Mewujudkan contoh
Kes penggunaan biasa
Amaran penting
Contoh: Penggunaan refleksi mudah
Rumah Java javaTutorial Bagaimana untuk melakukan refleksi di Java?

Bagaimana untuk melakukan refleksi di Java?

Aug 03, 2025 am 04:01 AM

Refleksi membolehkan pemeriksaan runtime dan memanipulasi kelas, kaedah, bidang dan pembina di Jawa. Ia dilaksanakan melalui pakej java.lang.reflect. Anda perlu mendapatkan objek kelas terlebih dahulu. 1. Penggunaan sintaks kelas, 2. Panggil kaedah getClass () objek, 3 menggunakan class.forname () untuk memuat kelas secara dinamik; Kemudian anda boleh mendapatkan dan memanggil kaedah (termasuk kaedah persendirian yang memerlukan setAccessible (true)), akses dan mengubah suai medan, dan membuat contoh (disyorkan getDeclaredConstructor (). newInstance ()); Ia sering digunakan dalam kerangka seperti musim bunga, hibernate, perpustakaan siri dan alat ujian; Tetapi terdapat risiko seperti overhead prestasi, sekatan keselamatan, rasuah enkapsulasi, kehilangan pemeriksaan masa dan memintas generik. Ia hanya boleh digunakan apabila perlu dan memastikan dokumentasi penuh. Refleksi menyediakan fleksibiliti runtime semasa menggunakannya dengan berhati -hati untuk mengelakkan masalah.

Bagaimana untuk melakukan refleksi di Java?

Refleksi di Java membolehkan anda memeriksa dan memanipulasi kelas, kaedah, bidang, dan pembina semasa runtime. Ia adalah sebahagian daripada pakej java.lang.reflect dan berfungsi dengan kelas Class . Inilah cara menggunakan refleksi dengan berkesan dan selamat.

Bagaimana untuk melakukan refleksi di Java?

Mendapatkan Objek Kelas

Sebelum menggunakan refleksi, anda memerlukan objek Class yang mewakili kelas yang ingin anda periksa. Terdapat beberapa cara untuk mendapatkannya:

  • Menggunakan .class Syntax (untuk kelas yang diketahui):

    Bagaimana untuk melakukan refleksi di Java?
     Kelas <string> stringclass = string.class;
  • Menggunakan kaedah getClass() (pada contoh objek):

     String str = "hello";
    Kelas <?> Strclass = str.getClass ();
  • Menggunakan Class.forName() (untuk memuatkan kelas dinamik dengan nama):

    Bagaimana untuk melakukan refleksi di Java?
     Kelas <?> ListClass = class.forname ("java.util.arraylist");

Memeriksa dan menggunakan ahli kelas

Sebaik sahaja anda mempunyai objek Class , anda boleh meneroka strukturnya.

1. Mendapatkan dan menggunakan kaedah

Anda boleh mengambil kaedah dan memanggilnya secara dinamik.

 Kelas <?> Clazz = myClass.class;
Contoh objek = clazz.getDeclaredConstructor (). NewInstance (); // Buat contoh

// Dapatkan kaedah khusus mengikut nama dan jenis parameter
Kaedah kaedah = clazz.getMethod ("myMethod", string.class);
method.invoke (contoh, "Hello Reflection!");

Untuk mengakses kaedah peribadi:

 Kaedah privatemethod = clazz.getDeclaredMethod ("PrivateMethod");
privatemethod.setAccessible (true); // Kawalan akses pintasan
privatemethod.invoke (contoh);

2. Mengakses dan mengubah suai bidang

Anda boleh membaca atau menukar nilai medan, walaupun mereka peribadi.

 Medan medan = clazz.getDeclaredField ("myField");
field.setAccessible (true); // untuk bidang peribadi

Nilai objek = field.get (contoh);
field.set (contoh, "nilai baru");

3. Mewujudkan contoh

Anda boleh meneliti kelas walaupun anda tidak tahu pada masa penyusunan.

 Constructor <?> Constructor = clazz.getConstructor (string.class);
Objek newInstance = constructor.newInstance ("argumen");

Untuk kelas dengan pembina no-arg:

 Objek obj = clazz.newInstance (); // Dihapus di Java 9 
// lebih suka:
Objek obj = clazz.getDeclaredConstructor (). NewInstance ();

Kes penggunaan biasa

  • Rangka kerja seperti Spring atau Hibernate Gunakan pantulan untuk menyuntik kebergantungan atau baris pangkalan data peta ke objek.
  • Perpustakaan Serialization/Deserialization (misalnya, Jackson) menggunakan refleksi untuk mengakses medan objek.
  • Alat ujian menggunakannya untuk mengakses kaedah peribadi atau persekitaran ujian persediaan.

Amaran penting

Refleksi berkuasa tetapi datang dengan perdagangan:

  • Kos Prestasi : Panggilan refleksi lebih perlahan daripada panggilan langsung.
  • Sekatan keselamatan : Sesetengah persekitaran (contohnya, applet, pengurus keselamatan) menghalang refleksi.
  • Break Encapsulation : Mengakses ahli swasta boleh membawa kepada kod rapuh.
  • Keselamatan Kompilasi Masa Hilang : Kesilapan (contohnya, kaedah tidak dijumpai) muncul hanya pada masa runtime.
  • Bypassing Generik : Pemeriksaan jenis dilemahkan pada masa runtime disebabkan oleh pemadaman jenis.

Contoh: Penggunaan refleksi mudah

 orang kelas awam {
    nama rentetan peribadi;

    orang awam () {}

    setname void awam (nama rentetan) {
        this.name = name;
    }

    public void salam () {
        System.out.println ("Hello, saya" nama);
    }
}

// Menggunakan refleksi
Kelas <?> PersonClass = class.forname ("orang");
Orang objek = personClass.getDeclaredConstructor (). NewInstance ();

Kaedah setName = personClass.getMethod ("setName", string.class);
setName.invoke (orang, "Alice");

Kaedah salam = personClass.getMethod ("salam");
salam.invoke (orang);

Output:

 Helo, saya Alice

Gunakan refleksi apabila perlu seperti rangka kerja atau alat generik -tetapi elakkannya dalam logik aplikasi biasa. Pastikan ia minimum dan didokumentasikan dengan baik.

Pada asasnya, refleksi memberi anda fleksibiliti runtime, tetapi dengan tanggungjawab.

Atas ialah kandungan terperinci Bagaimana untuk melakukan refleksi di Java?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

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

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

Tutorial PHP
1517
276
Penanda aras prestasi benang maya java Penanda aras prestasi benang maya java Jul 21, 2025 am 03:17 AM

Benang maya mempunyai kelebihan prestasi yang signifikan dalam senario yang sangat konkurensi dan intensif, tetapi perhatian harus dibayar kepada kaedah ujian dan senario yang berkenaan. 1. Ujian yang betul harus mensimulasikan perniagaan sebenar, terutamanya senario menyekat IO, dan menggunakan alat seperti JMH atau Gatling untuk membandingkan benang platform; 2. Jurang throughput adalah jelas, dan boleh beberapa kali hingga sepuluh kali lebih tinggi daripada 100,000 permintaan serentak, kerana ia lebih ringan dan cekap dalam penjadualan; 3. Semasa ujian, adalah perlu untuk mengelakkan membabi buta mengejar nombor konvensional yang tinggi, menyesuaikan diri dengan model IO yang tidak menyekat, dan memberi perhatian kepada petunjuk pemantauan seperti latensi dan GC; 4.

Melaksanakan senarai yang dipautkan di Java Melaksanakan senarai yang dipautkan di Java Jul 20, 2025 am 03:31 AM

Kunci untuk melaksanakan senarai yang dipautkan adalah untuk menentukan kelas nod dan melaksanakan operasi asas. ①First Buat kelas nod, termasuk data dan rujukan kepada nod seterusnya; ② Kemudian buat kelas LinkedList, melaksanakan fungsi penyisipan, penghapusan dan percetakan; Kaedah tambahan digunakan untuk menambah nod pada ekor; ④ Kaedah PrintList digunakan untuk mengeluarkan kandungan senarai yang dipautkan; ⑤ Kaedah DeletewithValue digunakan untuk memadam nod dengan nilai tertentu dan mengendalikan situasi yang berbeza dari nod kepala dan nod perantaraan.

cara menetapkan pembolehubah persekitaran java_home di tingkap cara menetapkan pembolehubah persekitaran java_home di tingkap Jul 18, 2025 am 04:05 AM

Tosetjava_homeonwindows, firstlocatethejdkinstallationpath (mis., C: \ Programfiles \ java \ jdk-17), thencreateasystemenvironmentvaria blenamedjava_homewiththatpath.next, updateThePathvariableByadding%java \ _home%\ bin, andverifythesetupingjava-versionandjavac-v

Bagaimana menangani transaksi di Java dengan JDBC? Bagaimana menangani transaksi di Java dengan JDBC? Aug 02, 2025 pm 12:29 PM

Untuk mengendalikan transaksi JDBC dengan betul, anda mesti terlebih dahulu mematikan mod komit automatik, kemudian melakukan pelbagai operasi, dan akhirnya melakukan atau mengembalikan semula hasilnya; 1. Panggil Conn.SetAutOcommit (palsu) untuk memulakan transaksi; 2. Melaksanakan pelbagai operasi SQL, seperti memasukkan dan mengemaskini; 3. Panggil Conn.Commit () jika semua operasi berjaya, dan hubungi conn.rollback () jika pengecualian berlaku untuk memastikan konsistensi data; Pada masa yang sama, cuba-dengan-sumber harus digunakan untuk menguruskan sumber, mengendalikan pengecualian dengan betul dan menutup sambungan untuk mengelakkan kebocoran sambungan; Di samping itu, adalah disyorkan untuk menggunakan kolam sambungan dan menetapkan mata simpan untuk mencapai rollback separa, dan menyimpan urus niaga sesingkat mungkin untuk meningkatkan prestasi.

Java Microservices Perkhidmatan Mesh Integrasi Java Microservices Perkhidmatan Mesh Integrasi Jul 21, 2025 am 03:16 AM

ServiceMesh adalah pilihan yang tidak dapat dielakkan untuk evolusi seni bina microservice Java, dan terasnya terletak pada decoupling logik rangkaian dan kod perniagaan. 1. ServiceMesh mengendalikan pengimbangan beban, fius, pemantauan dan fungsi lain melalui agen sidecar untuk memberi tumpuan kepada perniagaan; 2. INTOR ISTIO sesuai untuk projek sederhana dan besar, dan Linkerd lebih ringan dan sesuai untuk ujian berskala kecil; 3. Java microservices harus menutup, reben dan komponen lain dan menyerahkannya kepada Istiod untuk penemuan dan komunikasi; 4. Memastikan suntikan automatik sidecar semasa penempatan, perhatikan konfigurasi peraturan lalu lintas, keserasian protokol, dan pembinaan sistem penjejakan log, dan mengamalkan penghijrahan tambahan dan perancangan pemantauan pra-kawalan.

Membandingkan kerangka Java: Spring Boot vs Quarkus vs Micronaut Membandingkan kerangka Java: Spring Boot vs Quarkus vs Micronaut Aug 04, 2025 pm 12:48 PM

Pra-formancetartuptimemoryusage, quarkusandmicronautleadduetocompile-timeprocessingandgraalvsupport, withquarkusoftenperforminglightbetterine serverless scenarios.tyvelopecosyste,

Pengoptimuman Rangka Kerja Koleksi Lanjutan Pengoptimuman Rangka Kerja Koleksi Lanjutan Jul 20, 2025 am 03:48 AM

Untuk meningkatkan prestasi Rangka Kerja Koleksi Java, kami dapat mengoptimumkan dari empat mata berikut: 1. Pilih jenis yang sesuai mengikut senario, seperti akses rawak yang kerap ke ArrayList, carian cepat ke hashset, dan serentak untuk persekitaran serentak; 2. Menetapkan kapasiti dan faktor beban yang munasabah semasa permulaan untuk mengurangkan overhead pengembangan kapasiti, tetapi elakkan sisa memori; 3. Gunakan set yang tidak berubah (seperti list.of ()) untuk meningkatkan keselamatan dan prestasi, sesuai untuk data tetap atau baca sahaja; 4. Mencegah kebocoran memori, dan gunakan rujukan lemah atau perpustakaan cache profesional untuk menguruskan set survival jangka panjang. Butiran ini memberi kesan ketara kepada kestabilan dan kecekapan program.

Membina API Restful di Jawa dengan Jakarta EE Membina API Restful di Jawa dengan Jakarta EE Jul 30, 2025 am 03:05 AM

SetupaMaven/gradleprojectwithjax-rsdependencyiSejersey; 2.createarescresourceUsingAnnotationssuchas@pathand@get; 3.configuretheapplicationviaapplicationsubclassorweb.xml;

See all articles