摘要:知識點總結反射通過反射操作類的屬性和方法知識點總結反射使用反射操作類的屬性和方法通過反射調用構造方法,構造對象其實調用無參構造器張三調用有參構造器李四通過反射調用普通方法獲取方法激活方法王武王武通過反射操作屬性是屬性,如果不寫會這個私有屬
Java知識點總結(反射-通過反射操作類的屬性和方法 )
@(Java知識點總結)[Java, 反射]
使用反射操作類的屬性和方法:
import java.lang.reflect.Constructor; import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; public class Test03 { // 通過反射API調用構造方法,構造對象 public static void getInstance(Class clazz){ Student student; try { student = (Student) clazz.newInstance(); // 其實調用無參構造器 student.setName("張三"); System.out.println(student.getName()); } catch (InstantiationException | IllegalAccessException e) { e.printStackTrace(); } try { Constructor c = clazz.getDeclaredConstructor(int.class, String.class);// 調用有參構造器 Student student2 = (Student) c.newInstance(1, "李四"); System.out.println(student2.getName()); } catch (NoSuchMethodException | SecurityException | InstantiationException | IllegalAccessException | IllegalArgumentException | InvocationTargetException e) { e.printStackTrace(); } } // 通過反射API調用普通方法 public static void method(Class clazz) { try { Student student = (Student) clazz.newInstance(); // 獲取方法 Method method = clazz.getDeclaredMethod("setName", String.class); // 激活方法 method.invoke(student, "王武"); // student.setName("王武"); System.out.println(student.getName()); } catch (InstantiationException | IllegalAccessException | NoSuchMethodException | SecurityException | IllegalArgumentException | InvocationTargetException e) { e.printStackTrace(); } } //通過反射API操作屬性 public static void field(Class clazz){ try { Student student = (Student) clazz.newInstance(); Field f1 = clazz.getDeclaredField("name"); // name 是private屬性,如果不寫會:IllegalAccessException f1.setAccessible(true); // 這個私有屬性不用做安全檢查了,可以直接訪問 f1.set(student, "趙六"); Field f2 = clazz.getDeclaredField("sex"); // sex 是public 屬性,不用忽略安全檢查 f2.set(student, "男"); for (Field f : clazz.getDeclaredFields()) { f.setAccessible(true); System.out.println(f.get(student)); //注意參數是對象名,而不是屬性名 } } catch (NoSuchFieldException | SecurityException | IllegalArgumentException | IllegalAccessException | InstantiationException e) { e.printStackTrace(); } } public static void main(String[] args) { String path = "com.gs.Student"; try { Class clazz = Class.forName(path); //getInstance(clazz); //method(clazz); field(clazz); } catch (Exception e) { e.printStackTrace(); } } }
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/71577.html
摘要:知識點總結反射介紹知識點總結反射反射程序在運行狀態中,可以動態加載一個只有名稱的類動態調用類的所有屬性和方法加載完類之后,在堆內存中,就產生了一個類型的對象一個類只有一個對象。 Java知識點總結(反射-介紹) @(Java知識點總結)[Java, 反射] 反射 程序在 運行狀態中 ,可以動態加載一個只有名稱的類 (動態調用類的所有屬性和方法)Class c = Class.for...
摘要:知識點總結反射獲取類的信息知識點總結反射應用反射的,獲取類的信息類的名字屬性方法構造器等獲取類名類的全路徑名稱類名獲取屬性信息只能獲取的屬性獲取所有的屬性根據屬性名稱獲取屬性根據屬性名稱獲取屬性獲取方法信息獲取所有的方法,包括父類的方法獲 Java知識點總結(反射-獲取類的信息) @(Java知識點總結)[Java, 反射] 應用反射的API,獲取類的信息(類的名字、屬性、方法、構造器...
摘要:通過反射獲取無參構造方法并使用得到無參構造方法獲取所有的修飾的構造方法。如果方法沒有返回值,返回的是反射獲取空參數成員方法并運行代碼演示反射獲取成員方法并運行獲取對象中的成員方法獲取的是文件中的所有公共成員方法包括繼承的類是描述 01類加載器 * A.類的加載 當程序要使用某個類時,如果該類還未被加載到內存中,則系統會通過加載,連接,初始化三步來實現對這個類進行初始化。 ? ...
摘要:通過反射獲取帶參無返回值成員方法并使用設置安全檢查,訪問私有構造函數必須創建實例這種不行,注意和方法需要傳遞參數測試復制這個功能獲取私有方法,同樣注意和的區別賦予訪問權限調用方法。 反射 目錄介紹 1.反射概述 1.1 反射概述 1.2 獲取class文件對象的三種方式 1.3 反射常用的方法介紹 1.4 反射的定義 1.5 反射的組成 1.6 反射的作用有哪些 2.反射的...
摘要:與都繼承自類,在中也是使用字符數組保存字符串,,這兩種對象都是可變的。采用字節碼的好處語言通過字節碼的方式,在一定程度上解決了傳統解釋型語言執行效率低的問題,同時又保留了解釋型語言可移植的特點。 String和StringBuffer、StringBuilder的區別是什么?String為什么是不可變的? String和StringBuffer、StringBuilder的區別 可變性...
閱讀 641·2021-09-22 10:02
閱讀 6380·2021-09-03 10:49
閱讀 568·2021-09-02 09:47
閱讀 2154·2019-08-30 15:53
閱讀 2932·2019-08-30 15:44
閱讀 904·2019-08-30 13:20
閱讀 1817·2019-08-29 16:32
閱讀 893·2019-08-29 12:46