Java基础之-反射

这篇博客介绍了Java反射机制,包括获取Class对象的三种方法,通过Class对象构造对象,获取构造函数,设置accessible,获取类中的函数和字段,以及获取父类、接口和注解等操作。反射机制允许在运行时动态获取类信息并调用方法和属性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

0.什么是反射

JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。

1.获取Class对象

反射的第一步,就是去获取Class对象,而我们获取Class对象有三种方法,下面一一说明。

1.1方法一
Class<?> clz = User.class;
1.2方法二
User user = new User(1,"quanshijie");
Class<?> clz = user.getClass();
1.3方法三
        try {
            Class<?> clz = Class.forName("com.example.User");
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
2.通过Class对象构造目标类型的对象
            Class clz = Class.forName("com.example.User");
            //获取对应的构造函数 这里的构造函数参数为 int,String
            Constructor constructor = clz.getConstructor(int.class,String.class);
            //利用构造函数生成对象
            User user = (User) constructor.newInstance(1,"username");
            user.toString();
  • 先获取Class对象
  • 在获取构造函数,注意参数类型 ‘
  • 利用构造函数构造对象

当然,这里通过另外两种方式也是一样的。我们看下控制台的输出。
这里写图片描述

3.获取构造函数

上面的小例子中,我们获取了构造函数。通常我们有两种获取构造函数的方法。

  • 通过指定参数class获取 getConstructor
  • 获取所有构造函数 getConstructors
4.设置accessible

我们通过设置accessible为true来提升反射的速度。

constructor.setAccessible(true);
5.获取类中的函数

我们通常有四中方法来获取。

  • getMethod 只能获取public
  • getMethods 只能获取public
  • getDeclaredMethods 获取所有方法
  • getDeclaredMethod 获取当前父类的。
Method method = clz.getDeclaredMethod("setName",String.class);
method.invoke(user,"change");
  • 通过方法名和参数类型获取方法
  • 在通过invoke在修改

我们看下控制台输出结果。
这里写图片描述

6.获取类中的字段

好吧,这里有两种方法。

  • getField 获取指定字段,只能获取public的
  • getFields
  • getDeclaredField 获取指定
  • getDeclaredFields
Field field = clz.getDeclaredField("name");
field.set(user,"change field");

结果如下:
这里写图片描述

7. 获取父类、接口、注解等

这部分内容相对来说我们用的比较少,所以给出用法。

获取父类

clz.getSuperclass();

获取接口

clz.getInterfaces()

获取注解

clz.getAnnotations();

当然,内容不止这么点,剩下的就自己探索吧。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值