您好,登錄后才能下訂單哦!
這篇文章主要介紹“Java反射機制的功能以及舉例”,在日常操作中,相信很多人在Java反射機制的功能以及舉例問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”Java反射機制的功能以及舉例”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
1) 獲得類
A. 運用getClass() (每個class都有此函數)
i. String str = "abc";
ii. Class c1 = str.getClass();
B. 運用Class.forName() (static method 最常被使用)
i. Class c1 = Class.forName ("java.lang.String");
ii. Class c2 = Class.forName ("java.awt.Button");
C. 運用 .class 語法
i. Class c1 = String.class;
ii. Class c2 = java.awt.Button.class;
iii. Class c4 = int.class;
iv. Class c5 = int[].class;
D. 運用 TYPE語法 ( primitive wrapper classes 基本數據類型包裝類的 TYPE語法)
i. Class c1 = Boolean.TYPE;
2) 獲得屬性
以下四個方法可以獲得屬性,主要參見的是Java.lang.class
|
|
|
|
|
|
|
|
3) 獲得方法()
以下四個方法可以獲得方法,要參見的是Java.lang.class
public Method getMethod(String name, ... ) | 返回一個 Method 對象,它反映此 Class 對象所表示的類或接口的指定公共成員方法 |
public Method[] getMethods() | 返回一個包含某些 Method 對象的數組,這些對象反映此 Class 對象所表示的類或接口(包括那些由該類或接口聲明的以及從超類和超接口繼承的那些的類或接口)的公共 member 方法 |
public Method getDeclaredMethod(String name,…) | 返回一個 Method 對象,該對象反映此 Class 對象所表示的類或接口的指定已聲明方法 |
public Method[] getDeclaredMethods() | 返回 Method 對象的一個數組,這些對象反映此 Class 對象表示的類或接口聲明的所有方法,包括公共、保護、默認(包)訪問和私有方法,但不包括繼承的方法 |
4) 獲取類的構造器
以下四個方法可以獲得方法,要參見的是Java.lang.class
public Constructor getConstructor(Class<?>... ) | 返回一個 Constructor 對象,它反映此 Class 對象所表示的類的指定公共構造方法 |
public Constructor<?>[] getConstructors() | 返回一個包含某些 Constructor 對象的數組,這些對象反映此 Class 對象所表示的類的所有公共構造方法 |
Public Constructor<T> getDeclaredConstructor(Class<?>...) | 返回一個 Constructor 對象,該對象反映此 Class 對象所表示的類或接口的指定構造方法 |
public Constructor<?>[] getDeclaredConstructors() | 返回 Constructor 對象的一個數組,這些對象反映此 Class 對象表示的類聲明的所有構造方法。它們是公共、保護、默認(包)訪問和私有構造方法 |
示例代碼:
import java.lang.reflect.Constructor; public class TestConstructor { /** * @param args * @throws ClassNotFoundException * @throws SecurityException * @throws NoSuchMethodException */ public static void main(String[] args) throws Exception { // TODO Auto-generated method stub Class classType=Class.forName(args[0]); Constructor Constructor= classType.getConstructor(); System.out.println(Constructor.toString()); } }
5) 新建類的實例
調用類的Class對象的newInstance方法
import java.lang.reflect.Constructor; public class TestConstructor { /** * @param args * @throws ClassNotFoundException * @throws SecurityException * @throws NoSuchMethodException */ public static void main(String[] args) throws Exception { // TODO Auto-generated method stub Class classType=Class.forName(args[0]); //Constructor Constructor= classType.getConstructor(); Object inst=classType.newInstance(); System.out.println(inst); } }
調用默認Constructor對象的newInstance方法
import java.lang.reflect.Constructor; public class TestConstructor { /** * @param args * @throws ClassNotFoundException * @throws SecurityException * @throws NoSuchMethodException */ public static void main(String[] args) throws Exception { // TODO Auto-generated method stub Class classType=Class.forName(args[0]); Constructor Constructor= classType.getConstructor(); Object inst=Constructor.newInstance(); System.out.println(inst); } }
調用帶參數Constructor對象的newInstance方法
Class classType=User.class Constructor constructor2 = classType.getDeclaredConstructor(int.class, String.class); Object inst = constructor2.newInstance(1, "123"); System.out.println(inst);
到此,關于“Java反射機制的功能以及舉例”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。