一文詳解Java中的反射api
更新時間:2025年02月05日 09:01:04 作者:會說法語的豬
這篇文章主要為大家詳細介紹了Java中的6個反射api,文中的示例代碼講解詳細,具有一定的借鑒價值,有需要的小伙伴可以跟隨小編一起學習一下
1. 調用無參數(shù)構造器得到一個類的對象返回
public static void main(String[] args) throws Exception { // 反射第一步先得到Class對象 Class c = Person.class; // 定位無參構造器對象 Constructor constructor = c.getDeclaredConstructor(); // 暴力打開私有構造器的訪問權限(如果是私有構造器、private 就可以使用setAccessible暴力打開) constructor.setAccessible(true); // 通過無參數(shù)構造器初始化對象返回 Person person = (Person) constructor.newInstance(); System.out.println(person); }
2. 調用有參數(shù)構造器得到一個類的對象返回
public static void main(String[] args) throws Exception { // 反射第一步先得到Class對象 Class c = Person.class; // 定位無參構造器對象 Constructor constructor = c.getDeclaredConstructor(String.class, Integer.class, String.class); // 暴力打開私有構造器的訪問權限(如果是私有構造器、private 就可以使用setAccessible暴力打開) // constructor.setAccessible(true); // 通過無參數(shù)構造器初始化對象返回 Person person = (Person) constructor.newInstance("WFT", 18, "1.88"); System.out.println(person); }
3. 獲取全部的成員變量
public static void main(String[] args) throws Exception { // 反射第一步先得到Class對象 Class c = Person.class; // 獲取全部聲明的成員變量對象 Field[] fields = c.getDeclaredFields(); for (Field field : fields) { System.out.println(field.getName() + "-->>" + field.getType()); } }
4. 獲取某個成員變量 并為其賦值
public static void main(String[] args) throws Exception { // 反射第一步先得到Class對象 Class c = Person.class; // 獲取全部聲明的成員變量對象 Field nameField = c.getDeclaredField("name"); System.out.println(nameField.getName() + "--->>" + nameField.getType()); Person person = new Person(); nameField.setAccessible(true); // 因為是私有屬性 采用暴力反射! /** * 參數(shù)1:被賦值的對象 * 參數(shù)2:該成員變量的值 */ nameField.set(person, "王大錘"); System.out.println(person); /** * 獲取改成員變量的值 */ String name = nameField.get(person) + ""; System.out.println(name); }
5. 獲取所有的methods方法
public static void main(String[] args) { // 反射第一步先得到Class對象 Class c = Person.class; // 獲取所有的方法 Method[] methods = c.getDeclaredMethods(); // 遍歷看一下 for (Method method : methods) { // 方法名稱 參數(shù)個數(shù) 返回值類型 System.out.println(method.getName() + "->" + method.getParameterCount() + "->" + method.getReturnType()); } }
6. 獲取某個methods方法并執(zhí)行
public static void main(String[] args) throws Exception { // 反射第一步先得到Class對象 Class c = Person.class; // 獲取setName方法 Method setName = c.getDeclaredMethod("setName", String.class); // 調用方法 Person person = new Person(); Object o = setName.invoke(person, "WFT"); // 如果方法沒有返回值 返回值為null System.out.println(o); System.out.println(person); }
到此這篇關于一文詳解Java中的反射api的文章就介紹到這了,更多相關Java反射api內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
使用Mybatis-plus實現(xiàn)對數(shù)據庫表的內部字段進行比較
這篇文章主要介紹了使用Mybatis-plus實現(xiàn)對數(shù)據庫表的內部字段進行比較方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-07-07kafka啟動報錯(Cluster ID)不匹配問題以及解決
這篇文章主要介紹了kafka啟動報錯(Cluster ID)不匹配問題以及解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-12-12springboot+mongodb 實現(xiàn)按日期分組分頁查詢功能
這篇文章主要介紹了springboot+mongodb 實現(xiàn)按日期分組分頁查詢功能,本文通過實例代碼給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下2018-07-07