天天看點

JavaSEDemo20反射與内省簡介Method類的方法練習标準的JavaBeanjava的内省内省涉及到類和接口

文章目錄

  • 簡介
  • 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對象的三種方式

  1. Source源代碼階段

    Class.forName()

  2. Class類對象階段

    類名.Class

  3. 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内省有關的主要類與接口:

  1. 類:
  • java.beans.Introspector類:為獲得JavaBean屬性、事件、方法提供了标準方法;通常使用其中的getBeanInfo方法傳回BeanInfo對象
  • java.beans.PropertyDescriptor類:用來描述一個屬性,該屬性有Getter和Setter方法。
  1. 接口:
  • java.beans.BeanInfo接口:不能直接執行個體化,通常通過Introspector類傳回該類型對象,提供了傳回屬性描述對象(PropertyDescriptor)、方法描述對象(MethodDescriptor)、bean描述符(BeanDescriptor)對象的方法

Introspector類

内省涉及到類和接口

方法

内省确定屬性名的方法

從getXXX和setXXX方法的XXX 第一個字母小寫後确定屬性名

内省确定屬性名的方法

内省擷取屬性

用内省擷取屬性對應的getter和setter方法

内省屬性的注意事項

BeanUtils