反射和委托是什么?
在计算机编程中,反射(Reflection)和委托(Delegation)是两个重要的概念。
反射是指在运行时动态地获取、检查和修改类或对象的信息。它允许程序在运行时检查和操作其他代码(包括自身)的结构、属性和行为,而不需要事先知道这些代码的具体细节。通过反射,程序可以在运行时获取类的成员(如属性、方法、构造函数)并调用它们,获取和修改对象的字段值,创建新的对象实例等。反射在某些情况下非常有用,比如动态加载类、解析配置文件、编写通用框架和工具等。
委托是一种将方法作为参数传递、存储和调用的机制。它允许程序定义一个委托对象,该对象可以持有对一个或多个方法的引用,并且可以通过调用委托对象来执行这些方法。委托提供了一种灵活的方式来实现回调和事件处理机制,它将方法的执行交给了委托对象,使得方法的调用可以在运行时决定,从而增加了代码的灵活性和可扩展性。委托是面向对象编程中的一种重要概念,它在许多编程语言中都有支持,比如C#、Java、Python等。
总结起来,反射是一种在运行时动态获取和操作类或对象的信息的能力,而委托是一种将方法作为参数传递、存储和调用的机制,用于实现回调和事件处理。它们都为程序提供了更高的灵活性和可扩展性
关于jar动态加载?
您可以使用URLClassLoader动态加载指定路径的jar文件,然后以loadClass("类名")的方式载入具体Class。获得Class对象后,就可以按照标准的Java反射方式进行操作了。相关API的详细调用方式,您可以阅读javadoc,或者直接搜索相关方法名,就会看到不少的示例。这里篇幅有限,不方便赘述
语言反射意义?
反射就是自我感知,自我控制。说白了就是编程语言可以获取到自身的一些对象,对象的属性和方法。面向对象系统比较容易支持反射,比如JAVA。但是反射有两个问题,①是性能比较差。②是可读性差,IDE支持也差。所以尽量少用反射,最好别用。
JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。
java反射创建对象的效率是怎样的呢?
Java中,反射是会比直接通过 new 创建对象实例来的慢,这是因为JVM 针对其做的优化,和直接创建对象是不一样的。但是下面是几个要注意的点
在最新版本的JVM上,反射的效率已经得到了比较大的提升。
Knuth说过,"We should forget about small efficiencies, say about 97% of the time: premature optimization is the root of all evil" () , Performance tuning必须是基于相应的应用场景,实际的测试数据和明确的优化目标而进行的。
在反射的执行过程中,对于类及对象的定义元数据的寻找效率是比其实际执行的效率低很多的,因此这里的瓶颈在于,如何一次性的,在配置而非运行时,将相关的元数据尽早读取到系统中来,这就引出了下面一点:
一般来说,大部分的反射构建对象元数据应该发生在系统配置阶段,比如在系统启动阶段,使用反射将系统运行所需要的相关配置及动态数据读进内存,然后在运行时,使用这些存放在内存中的元数据进行处理。
在最新的JVM中的hotspot优化,可以针对多次运行的Java Class进行有针对性的优化,因此理论上来说,Java代码执行的次数越多,则针对其的优化效果也越明显。