Artikel ini menjelaskan penggunaan mekanisme refleksi pemrograman Java. Bagikan untuk referensi Anda, sebagai berikut:
Pendahuluan: Refleksi: Dapatkan secara dinamis kelas (file bytecode seperti orang.class dalam artikel ini) dan jalankan anggotanya. Refleksi mungkin sedikit lebih sedikit ditemui dalam pengembangan lapisan aplikasi Android, tetapi bagi mereka yang ingin melewati lapisan yang mendasarinya, mereka harus mahir menggunakannya.
Kelas Entitas
Orang.java
Paket com.sunwenou.reflect; // Nama Paket Public Class Person {Private String Name; usia int pribadi; orang publik () {// tidak ada parameter} orang publik (nama string, int usia) {// dengan parameter super (); this.name = name; this.age = usia; } public string getName () {return name; } public void setName (name string) {this.name = name; } public int getage () {usia kembali; } public void setage (int usia) {this.age = usia; } @Override Public String ToString () {return name+","+usia; } public void show () {// Parameter kosong System.out.println ("Show"); } public void fun (string ss) {// dengan parameter system.out.println (ss); } public static void function () {// static System.out.println ("static"); }}Metode untuk secara dinamis mendapatkan file bytecode
Untuk membuat posting blog terlihat ringkas, pengecualian dilemparkan dan impor dihilangkan, sama di bawah ini.
Paket com.sunwenou.reflect; kelas publik demo1 { /*** Metode untuk memperoleh file bytecode secara dinamis* 1: Gunakan metode kelas getClass () yang disediakan oleh kelas objek* Metode ini memerlukan objek* 2: setiap tipe data yang disediakan oleh class*. diperlukan string, yang terdiri dari nama paket + nama kelas*/public static void main (string [] args) melempar pengecualian {// getClaz (); // getCalz2 (); getClaz3 (); } // Gunakan metode forname () yang disediakan oleh kelas public static void getClaz3 () melempar pengecualian {class <?> Claz = class.forname ("com.sunwenou.reflect.person"); Kelas <?> Claz2 = class.forname ("com.sunwenou.reflect.person"); System.out.println (claz == claz2); } // Setiap tipe data memiliki atribut kelas statis statis public void getCalz2 () {class <fone> p1 = person.class; Kelas <fone> p2 = person.class; System.out.println (p1 == P2); } // Gunakan metode kelas getClass () yang disediakan oleh kelas objek public static void getClaz () {person person1 = orang baru (); Kelas <? Extends Person> claz = person1.getClass (); // person.class Person2 = orang baru (); Kelas <? memperluas orang> claz2 = person2.getClass (); // person.class system.out.println (claz == claz2); }}Secara dinamis dapatkan kelas dan buat objek
paket com.sunwenou.reflect; kelas publik demo2 {public static void main (string [] args) melempar pengecualian {// createobj (); createobj2 (); } public static void createobj2 () melempar Exception {// orang orang = orang baru ("lisi", 23); // Dapatkan kelas objek file bytecode <?> Claz = class.forname ("com.sunwenou.reflect.person"); //Person.class // Dapatkan objek dari tipe konstruktor yang dimiliki oleh metode konstruktor dengan parameter. Konstruktor konstruktor = claz.getConstructor (string.class, int.class); // Buat objek menggunakan metode membuat objek yang disediakan oleh class class class Person = (orang) constructor.newinstance ("lisi", 23); System.out.println (orang); } public static void createobj () melempar Exception {// orang orang = orang baru (); // Dapatkan kelas objek file bytecode <?> Claz = class.forname ("com.sunwenou.reflect.person"); Objek obj = claz.newInstance (); // Secara default, gunakan konstruktor parameter kosong untuk membuat sistem objek.out.println (obj); }}Secara dinamis dapatkan kelas dan tetapkan nilai ke variabel anggota
paket com.sunwenou.reflect; kelas publik demo3 {public static void main (string [] args) melempar pengecualian {// orang p = orang baru (); //p.name = "lisi"; // Dapatkan kelas objek file bytecode <?> claz = class.forname ("com.sunwenou.reflect.person"); // Dapatkan objek jenis bidang yang dimiliki oleh variabel anggota // bidang bidang = claz.getfield ("name"); // Dapatkan anggota dengan bidang izin publik = claz.getDeclaredfield ("name"); // Dapatkan semua bidang yang dinyatakan System.out.println (bidang); // Variabel anggota non-statis adalah objek tergantung pada objek obj = claz.newinstance (); field.setAccessible (true); // brute force retak, diatur ke field.set yang dapat diakses (OBJ, "Zhang San"); System.out.println (OBJ); }}Secara dinamis dapatkan kelas dan jalankan metode
paket com.sunwenou.reflect; kelas publik demo4 {public static void main (string [] args) melempar pengecualian {// method1 (); method2 (); method3 (); } public static void method3 () melempar Exception {// Dapatkan kelas objek file bytecode <?> claz = class.forname ("com.sunwenou.reflect.person"); Metode m = claz.getMethod ("function", null); M.Invoke (null, null); } //// Jalankan metode dengan parameter public static void method2 () melempar Exception {// Dapatkan kelas objek file bytecode <?> Claz = class.forname ("com.sunwenou.reflect.person"); Metode m = claz.getMethod ("fun", string.class); Objek obj = claz.newinstance (); m.invoke (obj, "halo"); } // Jalankan metode tanpa parameter public static void method1 () melempar Exception {// orang orang = orang baru (); orang.show (); // Dapatkan kelas objek file bytecode <?> Claz = class.forname ("com.sunwenou.reflect.person"); // Dapatkan objek file bytecode yang menjadi milik metode yang dieksekusi. Metode m = claz.getMethod ("show", null); // Metode non-statis adalah objek tergantung pada objek obj = claz.newinstance (); // Jalankan metode m.invoke (obj, null); }}Ini adalah penggunaan dasar refleksi. Kami dapat membuat objek melalui file bytecode objek ketika kami tidak dapat membuat objek secara normal dan menjalankannya. Sudahkah Anda belajar bagaimana melakukannya? ?
Untuk informasi lebih lanjut tentang konten terkait Java, silakan lihat topik-topik situs ini: "Pendahuluan dan Tutorial Lanjutan tentang Pemrograman Berorientasi Objek Java", "Tutorial tentang Struktur Data Java dan Algoritma", "Ringkasan Keterampilan Operasi Java Operasi", "Ringkasan File Java dan Keterampilan Operasi Operasi" dan Ringkasan Java Cache Cache Cache "Java Cache"
Saya harap artikel ini akan membantu pemrograman Java semua orang.