反射机制:反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为语言的反射机制。
Reflection 是 Java 程序开发语言的特征之一,它允许运行中的 Java 程序对自身进行检查,或者说”自审”,并能直接操作程序的内部属性。即可以在运行时加载、探知、使用编译期间完全未知的classes。换句话说,Java程序可以加载一个运行时才得知名称的class,获悉其完整构造(但不包括methods定义),并生成其对象实体、或对其fields设值、或唤起其methods 即有类似如下语句
ClassA objA = ReflexCreat("ClassA")
这也是程序序列化的关键,可以吧相关的类对象以字符串的形式存贮到磁盘,然后利用反射机制读取序列化文件还原系统状态
然而遗憾的是 C++ 并不支持这一机制,但是在实际使用中这是一个很nice的功能,对与 C++ 的fans来说这个可是一个不怎么好的消息
java反射机制有三个动态特性:
(1)运行时生成对象实例
(2)运行时调用方法.
(3)运行时更改属性。
使用反射虽然会很大程度上提高代码灵活性,但不能滥用反射,因为 通过反射创建对象时性能稍微低一些。实际上,只有当程序需要动态创建某个类的对象时才会考虑使用反射。通常在开发通用性比较广的框架,基础平台时可能大量使用反射。
C++并不支持反射机制,但C++对象总是要序列化的,序列化就是存储到磁盘上,将对象变成一定格式的二进制编码,然后要用的时候再将保存在磁盘上的二进制编码转化成一个内存中的对象,这个过程中总是需要有一个指示来告诉编译器要生成什么样的