Java的反射机制和应用

1. 反射机制的概念

  • 是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法
  • 对于任意一个对象,都能够调用它的任意属性和方法
  • 利用反射调用类中的属性和方法时,无视修饰符

这种动态获取信息以及动态调用对象方法的功能称为Java语言的反射机制

2. 反射机制的应用

使用反射首先需要获取Class类对象(三种方式)

  • 类名.class
  • 对象名.getClass()
  • Class.forName(全类名)

2.1 反射获取构造方法并使用

获取构造方法对象的方法有很多,详情参考官方文档

  • 获取指定的公共构造方法

    //获取Class对象
    Class aClass = Class.forName("cn.yulufox.pojo.User");
    //获取无参构造方法对象
    Constructor cons1 = aClass.getConstructor();
    //获取有参构造,方法参数需要与构造方法的形参保持一致
    Constructor cons2 = aClass.getConstructor(Long.class, String.class, String.class);
    
  • 获取指定的私有构造方法

    //获取Class对象
    Class aClass = Class.forName("cn.yulufox.pojo.User");
    //获取无参私有构造方法对象
    Constructor constructor = aClass.getDeclaredConstructor();
    

使用Constructor类创建对象

  • 使用公共构造方法创建对象

    //获取Class对象
    Class aClass = Class.forName("cn.yulufox.pojo.User");
    //获取无参构造方法对象
    Constructor constructor = aClass.getConstructor();
    //创建对象,向下转型
    User user = (User) constructor.newInstance();
    
  • 使用私有构造方法创建对象

    //获取Class对象
    Class aClass = Class.forName("cn.yulufox.pojo.User");
    //获取无参私有构造方法对象
    Constructor constructor = aClass.getDeclaredConstructor();
    //被private修饰的成员,不能直接使用的
    //如果用反射强行获取并使用,需要临时取消访问检查
    constructor.setAccessible(true);
    //创建对象,向下转型
    User user = (User) constructor.newInstance();
    

2.2 反射获取成员变量并使用

Class aClass = Class.forName("cn.yulufox.pojo.User");
Constructor constructor = aClass.getConstructor();
User user = (User) constructor.newInstance();

//获取私有成员变量 mobile
Field mobile = aClass.getDeclaredField("mobile");
//取消一下访问检查
mobile.setAccessible(true);
//给指定对象的mobile属性赋值
mobile.set(user,"12345678900");
//获取指定对象的mobile值
Object o = mobile.get(user);

2.3 反射获取成员方法并使用

//获取类对象
Class aClass = Class.forName("cn.yulufox.pojo.User");
//获取成员方法对象
Method showAndReturn = aClass.getDeclaredMethod("showAndReturn", String.class);
//获取方法的调用者,简写方式
User user = (User) aClass.newInstance();
//运行方法,接收返回值
Object poem = showAndReturn.invoke(user, "争渡!争渡!惊起一滩鸥鹭!");
//打印返回值
System.out.println(poem);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

羽露风

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值