• 高级java每日一道面试题-2024年7月14日


    面试官: 你对java反射了解多少?

    我回答

    什么是java反射:

    Java反射机制是一种强大的运行时自省机制,允许程序在运行时检查和操作类、接口、构造器、方法和字段等类型信息。通过反射,Java程序可以在运行时动态地加载类、创建对象、调用方法、获取和设置字段值,甚至修改访问权限。这种能力使Java程序具有高度的灵活性和扩展性。

    反射的主要用途:

    1. 动态创建实例:通过Class对象的newInstance()方法创建一个对象实例。
    2. 访问和修改私有成员:可以获取并访问一个类的私有字段、私有方法等。
    3. 调用方法:通过Method对象的invoke()方法调用一个对象的方法。
    4. 获取类信息:包括类名、父类、接口、字段、方法等。

    反射的核心类

    1. Class类:反射的核心类,代表正在运行的Java应用程序中的类和接口。通过Class对象,可以获取类的信息,如成员变量、方法、构造器等。
    2. Field类:提供有关类和接口的属性信息,以及对它的动态访问权限。
    3. Method类:提供类或接口中某个方法的信息,并可以执行该方法。
    4. Constructor类:提供关于类的单个构造方法的信息以及它的访问权限,并可以创建类的实例。

    反射的基本操作:

    获取Class对象
    • 使用类名直接获取,如String.class
    • 使用对象的getClass()方法,如new String().getClass()
    • 使用Class.forName()方法,传入类的全限定名,如Class.forName("java.lang.String")
    获取构造器(Constructors)
    • 使用Class对象的getDeclaredConstructors()getConstructors()方法。前者返回所有声明的构造器,包括私有的;后者只返回public的构造器。
    获取方法(Methods)
    • 使用Class对象的getDeclaredMethods()getMethods()方法。同样,前者返回所有声明的方法,后者只返回public的方法。
    获取字段(Fields)
    • 使用Class对象的getDeclaredFields()getFields()方法。前者返回所有声明的字段,后者只返回public的字段。

    反射的优缺点

    优点
    1. 提高灵活性:可以在运行时动态地创建对象、调用方法、访问属性等,提高了程序的灵活性。
    2. 与动态编译结合:可以与动态编译技术结合,实现更强大的功能。
    缺点
    1. 性能较低:反射需要解析字节码,将内存中的对象进行解析,因此性能较低。
    2. 破坏封装性:通过反射可以访问类的私有成员,破坏了类的封装性。
    3. 安全性问题:如果过度使用反射,可能会带来安全问题,如允许非法访问类的内部信息等。

    反射的注意事项:

    • 性能:反射操作比直接的Java代码要慢,因为它涉及额外的运行时查询。
    • 安全性:使用反射可以破坏封装性和安全性,比如访问私有成员。
    • 异常处理:反射操作经常抛出ClassNotFoundExceptionNoSuchMethodExceptionIllegalAccessExceptionInvocationTargetException等异常,需要妥善处理。

    反射的应用场景:

    • 框架开发:Spring框架大量使用反射来实现依赖注入。
    • 动态代理:JDK动态代理、CGLIB等基于反射实现。
    • 测试:单元测试中,反射可以用来访问和修改私有状态。
    • 代码解析:IDE和代码分析工具会使用反射来获取类的信息。
  • 相关阅读:
    【React】第一部分 React 基本使用
    Linunx搜索,查找类
    python中setattr()函数用法详解
    ZooKeeper设置ACL权限控制,删除权限
    4D 语义分割——SpSequenceNet
    C. String Equality(思维)
    (附源码)基于ssm的模具配件账单管理系统 毕业设计 081848
    【数字信号调制】16QAM信号调制解调【含Matlab源码 2050期】
    信息安全服务资质认证CCRC证书‖中国网络安全审查技术与认证中心
    python 将一个文件中的空格替换成逗号 写入新文件
  • 原文地址:https://blog.csdn.net/qq_43071699/article/details/140411466