首页 理论教育 Java类加载机制与反射机制解析

Java类加载机制与反射机制解析

时间:2023-11-05 理论教育 版权反馈
【摘要】:反射机制是Java程序开发语言的特征之一,它允许运行中的Java程序对自身进行检查,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法。这种动态获取的信息及动态调用对象的方法的功能称为Java语言的反射机制。在做Web服务的类型映射的时候,由于对象的内容是动态生成的,所以不能事先在WSDL文档中建立映射,解决办法就是传递这些对象字段的字符串形式。

Java类加载机制与反射机制解析

Java中类文件加载是动态的。JVM指令是被封装在了.class文件里面,而.class文件的加载过程是动态的,也就是说,当用到的时候才会去加载,如果不用,就不会去加载类。这里用到两种方式:第一种就是实例化一个对象的时候,这个时候要特别注意,当设计到多态的时候,就会有一点点变化,这时编译器会做一些优化,这样当加载时,会提前加载涉及的类,关于这一点,可用代码范例5.1来说明;另一种就是当一个类的静态代码被调用的时候。

代码范例5.1:

上述代码中不管注释行是否注释,结果都会是:

可以看出,当将子类对象赋值给父类时,编译器会做一点优化,于是加载器在还没有实例化子类对象时,就已经加载了父类及子类;当不存在多态时,当要new Dog()时,才会加载Dog及父类。无论何种方式,在实例化之前,类确实已经加载到了内存中。(www.xing528.com)

反射机制(Reflection)是Java程序开发语言的特征之一,它允许运行中的Java程序对自身进行检查,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法。这种动态获取的信息及动态调用对象的方法的功能称为Java语言的反射机制。

Java反射机制主要提供了以下功能:在运行时判断任意一个对象所属的类;在运行时构造任意一个类的对象;在运行时判断任意一个类所具有的成员变量和方法;在运行时调用任意一个对象的方法;生成动态代理(Spring框架中的AOP原理就是基于动态代理)。

那么为什么使用反射机制呢?在做Web服务的类型映射的时候,由于对象的内容是动态生成的,所以不能事先在WSDL文档中建立映射,解决办法就是传递这些对象字段的字符串形式。在客户端,通过另外的Web服务可以得到每种类型的Class类,然后动态地生成相应对象。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈