• 【Java面试】Java反射优缺点


    什么是反射机制?

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

    静态编译和动态编译
    静态编译:在编译时确定类型,绑定对象
    动态编译:运行时确定类型,绑定对象

    反射机制优缺点
    优点:

    • 运行期类型的判断,动态加载类,提高代码灵活度。
    • 提高代码复用率,比如动态代理就是用了反射实现
    • 可以在运行时获取任意一个类的方法,属性,并且还能通过反射动态调用

    缺点:

    • 反射相当于一系列解释操作,通知 JVM 要做的事情,反射会涉及到动态类型的解析,所以JVM无法对这些代码做优化,所以性能会降低。
    • 使用反射后,代码可读性会下降
    • 反射亦可以绕过一些限制访问的属性和方法,可能破坏了代码本身的封装性和抽象性

    说一说你对Java反射机制的理解

    Java程序中的对象在运行时可以表现为两种类型,即编译时类型和运行时类型。例如 Person p = new Student(); ,这行代码将会生成一个p变量,该变量的编译时类型为Person,运行时类型为Student。

    有时,程序在运行时接收到外部传入的一个对象,该对象的编译时类型是Object,但程序又需要调用该对象的运行时类型的方法。这就要求程序需要在运行时发现对象和类的真实信息,而解决这个问题有以下两种做法:

    第一种做法是假设在编译时和运行时都完全知道类型的具体信息,在这种情况下,可以先使用instanceof运算符进行判断,再利用强制类型转换将其转换成其运行时类型的变量即可。

    第二种做法是编译时根本无法预知该对象和类可能属于哪些类,程序只依靠运行时信息来发现该对象和类的真实信息,这就必须使用反射。

    具体来说,通过反射机制,我们可以实现如下的操作:

    程序运行时,可以通过反射获得任意一个类的Class对象,并通过这个对象查看这个类的信息;

    程序运行时,可以通过反射创建任意一个类的实例,并访问该实例的成员;

    程序运行时,可以通过反射机制生成一个类的动态代理类或动态代理对象。

    Java反射在实际项目中有哪些应用场景?

    Java的反射机制在实际项目中应用广泛,常见的应用场景有:

    使用JDBC时,如果要创建数据库的连接,则需要先通过反射机制加载数据库的驱动程序;

    多数框架都支持注解/XML配置,从配置中解析出来的类是字符串,需要利用反射机制实例化;

    面向切面编程(AOP)的实现方案,是在程序运行时创建目标对象的代理类,这必须由反射机制来实现。

  • 相关阅读:
    嵌入式人工智能(2-树莓派4B开发板硬件环境搭建)
    @ResponseBody 和 @RequestBody以及@PathVariable的作用
    异常处理流程
    mac 安装cnpm 淘宝镜像记录
    数据结构之链表(单链表)
    定义表格标签(table)
    MQTT-轻量级的物联网消息传输协议
    Tomcat 启动闪退的通用解决方案
    基于离散Markov模型的Web用户行为预测算法的研究
    批量导出 PPT的备注到一个txt文本中
  • 原文地址:https://blog.csdn.net/Zhangsama1/article/details/128117859