天天看点

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