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


    什么是反射机制?

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

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

    反射机制优缺点
    优点:

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

    缺点:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  • 相关阅读:
    【Web开发】Golang实现Web服务器
    开发人员必备常用工具
    ubuntu中使用QT、C++使用redis、hiredis记录
    Scala爬虫实战:采集网易云音乐热门歌单数据
    VSCODE 配置远程调试环境
    yum小bug
    一文彻底搞懂Mybatis系列(六)之在WEB应用中使用Mybatis
    MySQL优化(三)回表详解
    MASA Framework - DDD设计(1)
    用于可扩展、可重用和优雅的代码的Python工厂
  • 原文地址:https://blog.csdn.net/Zhangsama1/article/details/128117859