cari
RumahJavajavaTutorialPrinsip asas dan kaedah panggilan refleksi Java

Prinsip asas dan kaedah panggilan refleksi Java

Dec 23, 2023 am 09:01 AM
refleksiprinsipdoa kaedah

. Melalui refleksi, kita boleh mencipta objek secara dinamik, kaedah panggilan, dapatkan/tetapkan sifat, dsb. pada masa jalan, yang meningkatkan fleksibiliti dan kebolehskalaan program. Artikel ini akan memperkenalkan prinsip asas refleksi Java dan memberikan contoh kod khusus.

Prinsip asas dan kaedah panggilan refleksi Java1. Prinsip asas refleksi

Pelaksanaan refleksi Java adalah berdasarkan kelas Kelas, yang merupakan kelas teras refleksi Java. Setiap kelas Java akan menjana objek Kelas yang sepadan selepas kompilasi maklumat Kelas boleh diperolehi melalui objek Kelas, dan operasi kelas boleh dilakukan melalui maklumat kelas.

Refleksi Java terutamanya mempunyai kelas teras dan antara muka berikut:


Kelas kelas: mewakili jenis kelas, yang merupakan titik masuk refleksi Java.


Kelas medan: mewakili pembolehubah ahli kelas.

Kelas kaedah: mewakili kaedah ahli kelas.

    Kelas pembina: Mewakili kaedah pembina kelas.
  1. Prinsip asas refleksi Java adalah seperti berikut: Pertama, dapatkan objek Kelas yang sepadan melalui nama kelas yang layak sepenuhnya atau kaedah getClass() objek kemudian, melalui beberapa kaedah kelas Kelas, seperti getFields(), getMethods(), dsb. Dapatkan Medan, Kaedah, Pembina dan objek lain akhirnya, lakukan operasi khusus melalui objek ini, seperti mendapatkan/menetapkan nilai harta, kaedah memanggil, mencipta objek, dsb.
  2. 2. Kaedah panggilan Refleksi
  3. 2.1 Dapatkan objek Kelas
  4. Objek Kelas yang sepadan boleh diperolehi melalui nama kelas yang layak sepenuhnya atau kaedah getClass() objek.
Kod sampel adalah seperti berikut:

// 通过类的全限定名获取Class对象
Class<?> clazz1 = Class.forName("com.example.User");

// 通过对象的getClass()方法获取Class对象
User user = new User();
Class<?> clazz2 = user.getClass();

2.2 Mendapatkan nilai atribut

Nilai atribut objek boleh diperoleh melalui kaedah get() kelas Medan.

Kod sampel adalah seperti berikut:

// 获取public属性值
Field field = clazz.getDeclaredField("name");
String name = (String) field.get(user);

// 获取private属性值
Field privateField = clazz.getDeclaredField("age");
privateField.setAccessible(true); // 设置private属性的访问权限
int age = (int) privateField.get(user);

2.3 Menetapkan nilai atribut

Nilai atribut objek boleh ditetapkan melalui kaedah set() kelas Medan.


Kod sampel adalah seperti berikut:

// 设置public属性值
Field field = clazz.getDeclaredField("name");
field.set(user, "Tom");

// 设置private属性值
Field privateField = clazz.getDeclaredField("age");
privateField.setAccessible(true); // 设置private属性的访问权限
privateField.set(user, 20);

2.4 Kaedah panggilan

Kaedah objek boleh dipanggil melalui kaedah invoke() kelas Kaedah.


Kod sampel adalah seperti berikut:

// 调用无参方法
Method method1 = clazz.getDeclaredMethod("sayHello");
method1.invoke(user);

// 调用带参方法
Method method2 = clazz.getDeclaredMethod("sayHi", String.class);
method2.invoke(user, "Jack");

2.5 Mencipta objek

Objek boleh dibuat melalui kaedah newInstance() kelas Pembina.


Kod sampel adalah seperti berikut:

Constructor<?> constructor = clazz.getDeclaredConstructor(String.class, int.class);
User newUser = (User) constructor.newInstance("Lucy", 25);

Ringkasan:

Refleksi Java ialah ciri berkuasa dalam bahasa Java, yang boleh memperoleh maklumat kelas secara dinamik dan mengendalikan ahli kelas pada masa jalan. Prinsip asas refleksi adalah untuk mendapatkan maklumat kelas melalui kelas Kelas dan melaksanakan operasi khusus melalui Medan, Kaedah, Pembina dan objek lain. Dalam aplikasi sebenar, kami boleh menggunakan mekanisme refleksi untuk merealisasikan pelbagai keperluan dinamik dan meningkatkan fleksibiliti dan skalabiliti program.

Atas ialah kandungan terperinci Prinsip asas dan kaedah panggilan refleksi Java. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan
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

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.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SecLists

SecLists

SecLists ialah rakan penguji keselamatan muktamad. Ia ialah koleksi pelbagai jenis senarai yang kerap digunakan semasa penilaian keselamatan, semuanya di satu tempat. SecLists membantu menjadikan ujian keselamatan lebih cekap dan produktif dengan menyediakan semua senarai yang mungkin diperlukan oleh penguji keselamatan dengan mudah. Jenis senarai termasuk nama pengguna, kata laluan, URL, muatan kabur, corak data sensitif, cangkerang web dan banyak lagi. Penguji hanya boleh menarik repositori ini ke mesin ujian baharu dan dia akan mempunyai akses kepada setiap jenis senarai yang dia perlukan.

PhpStorm versi Mac

PhpStorm versi Mac

Alat pembangunan bersepadu PHP profesional terkini (2018.2.1).

Muat turun versi mac editor Atom

Muat turun versi mac editor Atom

Editor sumber terbuka yang paling popular

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

Persekitaran pembangunan bersepadu PHP yang berkuasa