读懂框架设计的灵魂 — Java
|
create2() 方法传入包名和类名,通过反射机制动态的加载指定的类,然后再实例化对象。 看完上面这个例子,相信诸位对反射有了一定的认识。反射拥有以下四大功能:
上述这种「动态获取信息、动态调用对象的方法」的功能称为 Java 语言的反射机制。 2. 理解 Class 类 要想理解反射,首先要理解 Class 类,因为 Class 类是反射实现的基础。程序运行期间,JVM 始终为所有的对象维护一个被称为「运行时的类型标识」,这个信息跟踪着每个对象所属的类的完整结构信息,包括包名、类名、实现的接口、拥有的方法和字段等。可以通过专门的 Java 类访问这些信息,这个类就是 Class类。我们可以把 Class 类理解为「类的类型」,一个 Class 对象,称为类的类型对象,「一个 Class 对象对应一个加载到 JVM 中的一个 .class 文件」。 在通常情况下,一定是先有类再有对象。以下面这段代码为例,类的正常加载过程是这样的:先 JVM 会将你的代码编译成一个 .class 字节码文件,然后被类加载器(Class Loader)加载进 JVM 的内存中,「同时会创建一个 Date 类的 Class 对象存到堆中」(注意这个不是 new 出来的对象,而是类的类型对象)。JVM 在创建 Date对象前,会先检查其类是否加载,寻找类对应的 Class 对象,若加载好,则为其分配内存,然后再进行初始化 new Date()。OK,那么在加载完一个类后,堆内存的方法区就产生了一个 Class 对象,这个对象就包含了完整的类的结构信息,「我们可以通过这个 Class 对象看到类的结构」,就好比一面镜子。所以我们形象的称之为:反射。
说的再详细点,再解释一下。上文说过,在通常情况下,一定是先有类再有对象,我们把这个通常情况称为 “正”。那么反射中的这个 “反” 我们就可以理解为根据对象找到对象所属的类(对象的出处) (编辑:烟台站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |


