Java反射笔记

反射概述

反射(reflection library)提供了一个非常丰富工具集,以便编写能够动态操纵Java代码的程序。它是Java组件的体系结构。使用反射功能可以使得Java可以操作任意一个类,包括类的所有属性和方法,对于任意一个对象也可以去调用内部的属性和方法,这种动态获取类和对象属性的功能被称为反射机制。

反射机制又被称为框架设计的灵魂

Class类

在Java中要想通过反射来操作一个类首先要获得这个类的.class字节码文件,而在Java.lang包下就提供了一个Class类,用于将获取到每一个字节码文件对应的Class类型的对象,然后再使用反射机制的方法对其进行操作。

​ Class类构造器是私有的,所以只能通过forName()实例化这个对象

forName()方法

forName()方法的参数名称要写类的完整包路径。该方法只能用于获取引用类型的类类型对象。

Class<?> cl = Class.forName("java.lang.String");
System.out.println(cl.getName()); //打印为java.lang.String

也可以根据数据类型进行包路径的获取

String type = "char";
Class cl = type.getClass(); //获取类的字节码文件
System.out.println(cl.getName()); //打印为java.lang.String

Class获取自定义类对象的方式

  1. Class.forName(“类路径”),获取字节码文件返回Class对象
  2. 类名.class,通过类名的属性class获取
  3. 自定义对象.getClass(),getClass()方法是继承超类Object的
//通过Class.forName()方法
Class cl = Class.forName("reflect.User");
System.out.println(cl);

//通过自定义类名.class
Class cl2 = User.class;
System.out.println(cl2);

//通过对象.getClass()
User user = new User();
Class cl3 = user.getClass();
System.out.println(cl3);

输出结果:

在这里插入图片描述

三种方式都可以获取到自定义User类的全类路径

Class对象的功能

Class对象主要用于以下三种操作

  1. 获取成员方法
Field getField(String name)
Field[] getFields()
Field getDeclaredField(String name)    
Field[] getDeclaredFields()
  1. 获取构造方法
Constructor<?>[] getConstructors()
Constructor<T> getConstructor(Class<?>... parameterTypes)
Constructor<T> getDeclaredConstructor(Class<?>... parameterTypes)
Constructor<?>[] getDeclaredConstructors() 
  1. 获取成员方法
Method getMethod(String name, Class<?>... parameterTypes)
Method[] getMethods()
Method getDeclaredMethod(String name, Class<?>... parameterTypes)
Method[] getDeclaredMethods()

获取成员属性

通过以上三种方法操作指定对象的成员方法

首先定义一个User用户类,使用lombok提供构造和getset方法

@AllArgsConstructor //全参构造
@NoArgsConstructor //无参构造
@Data //get&set方法
@ToString //toString
public class User {
   
    //定义两个成员变量,为了方便后面测试,先将成员属性用public修饰
    public String name;
    public Integer age;
}

创建一个demo测试类操作User对象的成员变量

getField()
public class 
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值