Java 反射的实现三种方式

Java是静态语言,并且是强类型语言,为了实现动态编译,Java引入了反射机制。

一、什么是反射?

反射是框架设计的灵魂,反射机制是指在程序的运行状态中,可以构造任意一个类的对象,可以了解任意一个对象所属的类,可以了解任意一个类的成员变量和方法,可以调用任意一个对象的属性和方法。这种动态获取程序信息以及动态调用对象的功能称为Java语言的反射机制。反射是java实现动态编译的关键。

二、反射的特性

  1. 在运行时判断任意一个对象所属的类;

  1. 在运行时构造任意一个类的对象;

  1. 在运行时判断任意一个类所具有的成员变量和方法;

  1. 在运行时调用任意一个对象的方法;

  1. 生成动态代理。

三、反射的使用场景

Java编码时知道类和对象的具体信息,此时直接对类和对象进行操作即可,无需反射

如果编码时不知道类或者对象的具体信息,此时应该使用反射来实现

比如类的名称放在XML文件中,属性和属性值放在XML文件中,需要在运行时读取XML文件,动态获取类的信息

在编译时根本无法知道该对象或类可能属于哪些类,程序只依靠运行时信息来发现该对象和类的真实信息

四、反射实现的三种方式

第一种:通过Object类的getClass方法

第二种:通过对象实例方法获取对象

第三种:通过Class.forName方式

package com.angyan.tool.tools;

/**
 * @author Evan Walker
 * @version 1.0
 * @desc 昂焱数据:https://www.ayshuju.com
 * @date 2023/03/15 09:41:57
 */
public class ReflectTest {

    public static void main(String[] args) throws Exception{

        // 第一种:通过类名.class
        Class clazz1 = Dog.class;
        System.out.println(clazz1.getName());

        // 第二种:通过对象实例方法获取对象
        Dog dog = new Dog();
        Class<?> clazz2 = dog.getClass();
        System.out.println(clazz2.getName());

        // 第三种:通过Class.forName方式
        Class clazz3 = Class.forName("com.angyan.tool.tools.Dog");
        System.out.println(clazz3.getName());

    }
}

class Dog {
}

PS:枚举类不能使用反射

五、反射的优点和缺点

优点:

  1. 可拓展性和解耦性。反射机制极大的提高了程序的灵活性和扩展性,降低模块的耦合性,提高自身的适应能力。

  1. 灵活性(动态编译性)。通过反射机制可以让程序创建和控制任何类的对象,无需提前硬编码目标类。使用反射机制能够在运行时构造一个类的对象、判断一个类所具有的成员变量和方法、调用一个对象的方法。

  1. 框架基石。反射机制是构建框架技术的基础所在,使用反射可以避免将代码写死在框架中。

缺点:

1、性能问题。Java反射机制中包含了一些动态类型,所以Java虚拟机不能够对这些动态代码进行优化。因此,反射操作的效率要比正常操作效率低很多。应避免在对性能要求很高的程序或经常被执行的代码中使用反射,且如何使用反射决定了性能的高低。如果反射作为程序中较少运行的部分,性能将不会成为一个问题。

2、安全限制。使用反射通常需要程序的运行没有安全方面的限制。如果一个程序对安全性提出要求,则最好不要使用反射。

  1. 程序健壮性。反射允许代码执行一些通常不被允许的操作,所以使用反射有可能会导致意想不到的后果。反射代码破坏了Java程序结构的抽象性,所以当程序运行的平台发生变化的时候,由于抽象的逻辑结构不能被识别,代码产生的效果与之前会产生差异。

更多消息资讯,请访问昂焱数据。https://www.ayshuju.com

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值