【java 反射】

java 反射小栗子

在这里插入图片描述

什么是反射?

Java的反射是指在运行时动态地获取类的信息(比如类的方法、字段、构造函数等),并且可以 在运行时创建对象、调用方法、访问字段等。通过反射,我们可以在运行时分析和操作类的结构和行为,而不需要在编译时知道类的具体信息。

Java反射的好处包括:
  1. 动态创建对象:在编译时无法确定需要创建的类的具体类型时,可以使用反射动态创建对象。
  2. 动态调用方法:可以在运行时根据需要调用特定的方法。
  3. 访问私有成员:可以通过反射访问和操作类的私有字段和方法。
  4. 框架和工具的设计:许多框架和工具(比如Spring、Hibernate)使用反射来实现动态的行为和扩展性。
在以下情况下可以使用Java反射:
  1. 当需要在运行时动态地创建对象,而不需要在编译时知道类的具体类型。
  2. 当需要在运行时动态地调用类的方法,而不需要在编译时知道方法的签名。
  3. 当需要在运行时检查和操作类的字段和方法,比如序列化和反序列化对象,或者进行单元测试。
  4. 当需要设计具有灵活性和可扩展性的框架和工具。
  • 下面是一个简单的Java反射示例,它使用反射来获取类的信息并调用类的方法:

      /**
       *  java反射赋值的代码
       *
       * 在这个示例中,我们使用Class.forName方法获取了一个类的Class对象,
       * 然后使用getMethod方法获取了类的方法。接着,我们使用newInstance方法创建了类的实例,
       * 并使用invoke方法调用了类的方法。这就是一个简单的Java反射示例。
       */
    
public class Mian {

    public static void main(String[] args) {

        try {
            MyClass myObject = new MyClass();
            // 获取类的Class对象
            Class<?> myClass = Class.forName("com.example.MyClass");
            // 获取类的方法
            Method myMethod = myClass.getMethod("setName", String.class);
            // 调用类的方法
            myMethod.invoke(myObject, "Hello, World!");

        } catch (Exception e) {
            e.printStackTrace();
        }
}
  • 下面是一个简单的Java反射示例,它使用反射来获取类的信息并调用类的方法:

      /**
       * java反射取得值的代码
       *
       * 在这个例子中,我们使用反射来获取私有字段myField的值,并打印出来。
       * 首先,我们通过getClass()方法获取MyClass的Class对象。
       * 然后,我们使用getDeclaredField()方法获取myField字段,并通过setAccessible(true)设置字段为可访问。
       * 最后,我们使用get()方法获取字段的值并打印出来。
       */
    
public class Mian {

    public static void main(String[] args) {

        MyClass myObject = new MyClass();
        Class<?> myClass = myObject.getClass();
        try {
            // 获取私有字段myField的值
            Field myField = myClass.getDeclaredField("myField");
            // setAccessible(true)设置字段为可访问
            myField.setAccessible(true);
            // 我们使用get()方法获取字段的值并打印出来
            Object value = myField.get(myObject);

            System.out.println("Value of myField: " + value);
        } catch (NoSuchFieldException | IllegalAccessException e) {
            e.printStackTrace();
        }
    }
}
  • 7
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

篮球小童_

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

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

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

打赏作者

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

抵扣说明:

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

余额充值