Java的反射主要和Class类相关,首先什么是Class类?在面向对象的编程语言中万事万物皆对象,所以类本身也是一个对象,类是一个Class类的实例对象,比如我们写的Material类就是一个Class类的实例对象,而这个Material类对象的类型就是一个Class类型,称之为类类型,任何一个类都是一个Class类的实例对象。
在了解了什么是Class类后,那么怎么去获取一个类Class类对象?有三种方法:
第一种:类名.class 直接使用类的class静态对象来取得
第二种:类的实例对象.getClass() 通过使用类的实例对象调用getClass方法取得
第三种:Class.forName("包名+类名") Class类的forName静态方法通过类的完整名称(包含包名)来取得
这三种方法得到的类的Class类实例对象是相同的,需要根据不同的场景来选择使用的方法。
通过Class类对象的内部方法和属性我们可以获取对象的方法和属性的相关信息,我们可以通过.getMethods()方法获取所有的公有方法包括从父类继承的公有方法,还能通过getDeclaredMethods()获取子类所有的声明方法。其他的内容请参考JDK文档,此处不再赘述。
要使用反射的方式调用类的公有方法可以通过Method对象(使用getMethods()或者getDeclaredMethods()方法返回的是一个Method对象数组)的invoke()方法来调用,具体的操作方法请参考JDK文档。
本文出自 “技术不宅” 博客,请务必保留此出处http://chrischen.blog.51cto.com/9954795/1685819
原文地址:http://chrischen.blog.51cto.com/9954795/1685819