一文詳解Java中的反射api
更新時間:2025年02月05日 09:01:04 作者:會說法語的豬
這篇文章主要為大家詳細介紹了Java中的6個反射api,文中的示例代碼講解詳細,具有一定的借鑒價值,有需要的小伙伴可以跟隨小編一起學(xué)習(xí)一下
1. 調(diào)用無參數(shù)構(gòu)造器得到一個類的對象返回
public static void main(String[] args) throws Exception {
// 反射第一步先得到Class對象
Class c = Person.class;
// 定位無參構(gòu)造器對象
Constructor constructor = c.getDeclaredConstructor();
// 暴力打開私有構(gòu)造器的訪問權(quán)限(如果是私有構(gòu)造器、private 就可以使用setAccessible暴力打開)
constructor.setAccessible(true);
// 通過無參數(shù)構(gòu)造器初始化對象返回
Person person = (Person) constructor.newInstance();
System.out.println(person);
}
2. 調(diào)用有參數(shù)構(gòu)造器得到一個類的對象返回
public static void main(String[] args) throws Exception {
// 反射第一步先得到Class對象
Class c = Person.class;
// 定位無參構(gòu)造器對象
Constructor constructor = c.getDeclaredConstructor(String.class, Integer.class, String.class);
// 暴力打開私有構(gòu)造器的訪問權(quán)限(如果是私有構(gòu)造器、private 就可以使用setAccessible暴力打開)
// constructor.setAccessible(true);
// 通過無參數(shù)構(gòu)造器初始化對象返回
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);
// 調(diào)用方法
Person person = new Person();
Object o = setName.invoke(person, "WFT"); // 如果方法沒有返回值 返回值為null
System.out.println(o);
System.out.println(person);
}到此這篇關(guān)于一文詳解Java中的反射api的文章就介紹到這了,更多相關(guān)Java反射api內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java UUID 五個版本的區(qū)別及使用場景小結(jié)
在Java中,UUID是一個128位的唯一標識符,廣泛應(yīng)用于生成唯一標識符、分布式系統(tǒng)唯一鍵等場景,Java提供的java.util.UUID類支持五種UUID版本,每種具有不同的生成方式和使用場景,本文就來介紹一下如何使用,感興趣的可以了解一下2024-11-11
System.currentTimeMillis()計算方式與時間的單位轉(zhuǎn)換詳解
這篇文章主要介紹了System.currentTimeMillis()計算方式與時間的單位轉(zhuǎn)換詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-05-05
Java使用Jsoup實現(xiàn)將瀏覽器書簽HTML轉(zhuǎn)換為JSON
這篇文章主要介紹了如何使用Jsoup和Fastjson2將瀏覽器導(dǎo)出的書簽HTML文件解析為層級化的JSON結(jié)構(gòu),文中的示例代碼講解詳細,具有一定的借鑒價值,有需要的小伙伴可以了解下2026-01-01

