编程语言中高级特性:反射

反射机制

这里以java反射机制加以说明,其他编程语言基本类似。

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

反射机制应用场景

  • 通过配置信息调用类的方法
  • 结合注解实现特殊功能
  • 按需加载jar包或class
  • 逆向代码 ,例如反编译

可以说反射是框架设计的灵魂。

反射机制优缺点

优点:

自由,使用灵活,不受类的访问权限限制。可以根据指定类名、方法名来实现方法调用,非常适合实现业务的灵活配置。在框架开发方面也有非常广泛的应用,特别是结合注解的使用。

缺点:

也正因为反射不受类的访问权限限制,其安全性低,很大部分的java安全问题都是反射导致的。
相对于正常的对象的访问调用,反射因为存在类和方法的实例化过程,性能也相对较低
破坏java类封装性,类的信息隐藏性和边界被破坏

反射有哪些功能

  • 获取Class对象,注意不是类。
  • Class对象动态生成
  • 获取类名、修饰符、包信息、属性、方法、构造函数等,包括私有属性和方法。
  • 访问类注解信息
  • 获取泛型信息,及参数类型。
  • 动态调用类方法

python中的反射

Python中的反射和其他编程语言不同,Python中不管变量还是方法都是属性

import types

class Test:
    vars = "11"
    def ff1(self):
        print(f"ff1方法..")
    def ff2(self):
        print(f"ff2方法..")

cls = Test()
for attr in dir(cls):
    mothod = getattr(cls, attr)
    if type(mothod) is types.MethodType:
        mothod()

# 输出:
# ff1方法..
# ff2方法..

图文详解java反射机制及常用应用场景
Java反射(通俗易懂)

此处评论已关闭