文章目錄
- 簡介
- Method類的方法
-
- String getName()得到方法名字
- Class<?> getReturnType() 得到傳回值類型
- Class<?>[ ] get
- 練習
-
- 練習1: 寫出擷取Class對象的三種方式
- 練習2: 寫出三種建立user對象的方式
- 練習3: 調用User對象的eat()方法的2種方式
- 練習4: 設定user對象的name屬性的值的2種方法
- 練習5: 得到user對象的name屬性的值的2種方法
- 練習6: 動态查找調用Java類中的方法
- 标準的JavaBean
- java的内省
-
- 概念
- 内省涉及到類和接口
-
- Introspector類
- 方法
- 内省确定屬性名的方法
- 内省擷取屬性
- 用内省擷取屬性對應的getter和setter方法
- 内省屬性的注意事項
- BeanUtils
簡介
- 本文是2021/04/19整理的筆記
- 贅述可能有點多,還請各位朋友耐心閱讀
- 本人的内容和答案不一定是最好最正确的,歡迎各位朋友評論區指正改進
Method類的方法
String getName()得到方法名字
Class<?> getReturnType() 得到傳回值類型
Class<?>[ ] get
invoke方法的傳回值就是調用的方法的傳回值
練習
練習1: 寫出擷取Class對象的三種方式
-
Source源代碼階段
Class.forName()
-
Class類對象階段
類名.Class
-
Runtime運作時階段
對象名.getClass
練習2: 寫出三種建立user對象的方式
new直接建立
newInstance
constructor
練習3: 調用User對象的eat()方法的2種方式
public class Test{
public static void main(String[] args) throws
NoSuchMethodException, IllegalAccessException,
InstantiationException, InvocationTargetException {
//第一種調用方法
User user1 = new User();
user1.eat();
//第二種調用方法
User user2 = User.class.newInstance();
Method method = User.class.getMethod("eat");
Object o = method.invoke(user2);
System.out.println("o = " + o);
}
}
練習4: 設定user對象的name屬性的值的2種方法
//設定student對象的name屬性的值的2種方法
public class Test{
public static void main(String[] args) throws
IllegalAccessException, InstantiationException, NoSuchFieldException {
//第一種
User user1 = User.class.newInstance();
user1.setName("張三");
//第二種
User user2 = new User();
Field name = User.class.getDeclaredField("name");
name.setAccessible(true);
name.set(user2,"李四");
}
}
練習5: 得到user對象的name屬性的值的2種方法
練習6: 動态查找調用Java類中的方法
标準的JavaBean
三個特征:
屬性都是私有的
無參public構造
公有的getXXX以及setXXX方法。
java的内省
概念
内省(Inspector)機制就是基于反射的基礎,Java 語言對 Bean 類屬性、事件的一種預設處
理方法.
内省涉及到類和接口
與Java内省有關的主要類與接口:
- 類:
- java.beans.Introspector類:為獲得JavaBean屬性、事件、方法提供了标準方法;通常使用其中的getBeanInfo方法傳回BeanInfo對象
- java.beans.PropertyDescriptor類:用來描述一個屬性,該屬性有Getter和Setter方法。
- 接口:
- java.beans.BeanInfo接口:不能直接執行個體化,通常通過Introspector類傳回該類型對象,提供了傳回屬性描述對象(PropertyDescriptor)、方法描述對象(MethodDescriptor)、bean描述符(BeanDescriptor)對象的方法
Introspector類
内省涉及到類和接口
方法
内省确定屬性名的方法
從getXXX和setXXX方法的XXX 第一個字母小寫後确定屬性名