Demo Refleksi Kelas
Copy kode kodenya sebagai berikut:
paket Refleksi;
@Tidak digunakan lagi
Demo Refleksi kelas publik {
String pribadi pri_field;
String publik pub_field;
RefleksiDemo publik(){}
ReflectionDemo publik(Nama string){}
ReflectionDemo pribadi(Nama string,int int1){}
public void ReflectMethod(){}
public void ReflectMethod(String str){}
metode refleksi kekosongan pribadi(int int1){}
kelas innerclss_Refection{}
}
Tes kelasRefleksiDemoTest
Copy kode kodenya sebagai berikut:
paket Refleksi;
import java.lang.annotation.Annotation;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
kelas publik ReflectionDemoTest {
public static void main(String[] args) {
//Buat objek kelas dan gunakan modifikasi umum untuk menghindari transfer paksa
Kelas cla=RefleksiDemo.kelas;
//Metode untuk mendapatkan semua kolom publik
Bidang[] bidang=cla.getFields();
for(Bidang f:bidang){
System.out.println("Metode untuk mendapatkan semua kolom publik:"+f.toString());
}
//Metode untuk mendapatkan domain publik tertentu
mencoba {
Bidang bidang1=cla.getField("pub_field");
System.out.println("Metode untuk mendapatkan kolom publik yang ditentukan:"+field1.toString());
} tangkapan (SecurityException e) {
// TODO Blok tangkapan yang dibuat secara otomatis
e.printStackTrace();
} tangkapan (NoSuchFieldException e) {
// TODO Blok tangkapan yang dibuat secara otomatis
e.printStackTrace();
}
//Metode untuk mendapatkan semua domain (termasuk domain pribadi), Deklarasikan
Bidang[] bidang2=cla.getDeclaredFields();
untuk(Bidang f:bidang2){
System.out.println("Metode untuk mendapatkan semua field (termasuk field pribadi):"+f.toString());
}
//Metode untuk mendapatkan domain yang ditentukan (termasuk domain pribadi)
mencoba {
Bidang field3=cla.getDeclaredField("pri_field");
System.out.println("Metode untuk mendapatkan field yang ditentukan (termasuk field pribadi):"+field3.toString());
} tangkapan (SecurityException e) {
// TODO Blok tangkapan yang dibuat secara otomatis
e.printStackTrace();
} tangkapan (NoSuchFieldException e) {
// TODO Blok tangkapan yang dibuat secara otomatis
e.printStackTrace();
}
//Dapatkan semua metode publik (termasuk kelas induk)
Metode[] metode=cla.getMethods();
untuk(Metode m:metode){
System.out.println("Dapatkan semua metode publik:"+m.toString());
}
mencoba {
//Dapatkan metode tanpa parameter yang ditentukan
//Parameter kedua menunjukkan tipe parameter, dan parameter NUll menunjukkan metode tanpa parameter.
Metode metode1=cla.getMethod("ReflectMethod", null);
System.out.println("Dapatkan metode metode publik tanpa parameter:"+method1.toString());
} tangkapan (SecurityException e) {
// TODO Blok tangkapan yang dibuat secara otomatis
e.printStackTrace();
} tangkapan (NoSuchMethodException e) {
// TODO Blok tangkapan yang dibuat secara otomatis
e.printStackTrace();
}
//Metode untuk mendapatkan semua metode kelas ini (tidak termasuk kelas induk)
Metode[] metode2=cla.getDeclaredMethods();
untuk(Metode m:metode2){
System.out.println("Dapatkan semua metode (termasuk kelas induk):"+m.toString());
}
//Dapatkan metode dari metode yang ditentukan di kelas ini (tidak termasuk kelas induk)
//Parameter pertama adalah nama metode, parameter kedua adalah tipe pengembalian metode, dan NULL adalah metode tanpa parameter.
mencoba {
Metode metode3=cla.getDeclaredMethod("ReflectMethod",int.class);
System.out.println("Dapatkan metode dari metode yang ditentukan kelas ini (tidak termasuk kelas induk):"+metode3);
} tangkapan (SecurityException e) {
// TODO Blok tangkapan yang dibuat secara otomatis
e.printStackTrace();
} tangkapan (NoSuchMethodException e) {
// TODO Blok tangkapan yang dibuat secara otomatis
e.printStackTrace();
}
//Dapatkan konstruktor publik
//Dapatkan konstruktor publik tanpa parameter
mencoba {
Konstruktor cs=cla.getConstructor(null);
System.out.println("Dapatkan konstruktor tanpa parameter:"+cs);
} tangkapan (SecurityException e) {
// TODO Blok tangkapan yang dibuat secara otomatis
e.printStackTrace();
} tangkapan (NoSuchMethodException e) {
// TODO Blok tangkapan yang dibuat secara otomatis
e.printStackTrace();
}
//Dapatkan konstruktor publik dengan parameter
//Jika ada konstruktor dengan banyak parameter, ada banyak konstruktor. Perhatikan urutannya.
mencoba {
Konstruktor cs=cla.getConstructor(String.class);
System.out.println("Dapatkan konstruktor berparameter:"+cs);
} tangkapan (SecurityException e) {
// TODO Blok tangkapan yang dibuat secara otomatis
e.printStackTrace();
} tangkapan (NoSuchMethodException e) {
// TODO Blok tangkapan yang dibuat secara otomatis
e.printStackTrace();
}
//Dapatkan semua metode konstruksi
mencoba {
Konstruktor[] cs=cla.getDeclaredConstructors();
for(Konstruktor c:cs){
System.out.println("Dapatkan semua metode konstruksi:"+c);
}
} tangkapan (SecurityException e) {
// TODO Blok tangkapan yang dibuat secara otomatis
e.printStackTrace();
}
//Dapatkan nama paketnya
Paket paket=cla.getPackage();
System.out.println("Dapatkan nama paket saat ini:"+paket);
//Dapatkan komentar
Anotasi[] ann=cla.getAnnotations();
for(Anotasi an:ann){
Sistem.keluar.println(an.toString());
}
//Dapatkan kelas induk
Kelas supercla=cla.getSuperclass();
System.out.println(supercla);
//Dapatkan kelas dalam
Kelas[] innercla=cla.getDeclaredClasses();
for(Kelas cl:innercla){
Sistem.keluar.println(cl);
}
}
}
Ringkasan: Langkah-langkah untuk mendapatkan informasi tentang objek Kelas:
1. Buat objek Kelas. Metode 1 Kelas cla=Class.forName(“PATH”) Metode 2 CLASs cla=Instance.getclass(); Metode 3 Kelas cla=Class.class
2. Gunakan Bidang, Metode, Konstruktor, Paket, dan Anotasi untuk memperoleh informasi yang relevan dengan memanggil metode cla.getXXXX.
3. Metode memperoleh kelas induk dan kelas dalam sedikit berbeda.
4. Saat menggunakan cla.getMethods, semua metode publik dari kelas dan kelas induk dipanggil.
5. Saat menggunakan Declared, semua metode kelas, termasuk metode privat, dipanggil.
6. Jika kelas refleksi tidak memiliki konstruktor publik dan tidak dapat menggunakan metode newInstance secara langsung, gunakan
Metode cs=cla.getMethod("getInstance",null);//Dapatkan metodenya
Kalender kalender=(Kalender) cs.invoke(cla, null);//Jalankan metode yang diperoleh, parameter 1 adalah objek metode eksekusi, parameter 2 mewakili parameter metode
Tanggal df=kalender.getTime();
Sistem.keluar.println(df.toString());
untuk mendapatkan.