查看类信息(反射的基础)

当无法确定调用哪一个子类(子类名作为参数传递)的某一个方法时,也许会用到反射。反射可以获取到类的所有信息。

反射的思路:

通过类加载器加载类,类被加载后就会创建一个该类的类对象在内存中,获取到这个类对象就可以调用方法获得类信息了(类对象与实例对象不一样)。

获取类对象的方法有三种:

1.Class.forName("完整包名"):Class.forName(“pacage.A”)。需要捕捉ClassNotFoundException异常

2.调用某给类的class属性:Person.class.  建议用这个方法,可以在编译阶段判断是否有这个类,安全且高效。

3.调用类实例对象的getClass()方法获取Class对象。

api:

获取构造器:Constructor<T> getConstructor(Class<?>...):返回此Class对象缩表示的类的指定的public构造器

                     Constructor<?>[] getConstructors():返回Class对象表示类的所有public构造器

扫描二维码关注公众号,回复: 5428584 查看本文章

                     Constructor<T> getDeclaredConstructor(Class<?>...):返回此Class对象缩表示的类的指定的构造器,与访问级别无关

                     Constructor<?>[] getDeclaredConstructors():返回Class对象表示类的所有构造器,与访问级别无关

获取方法:Method getMethod(String name,Class<?>...),返回public方法

                 Method[] getMethods(),返回所有public方法

                 Method getDeclaredMethod(String name,Class<?>...) 返回指定方法,与方法的访问级别无关

                 Method getDeclaredMethods() 返回所有方法,与方法的访问级别无关

解释:这些方法的参数后面有一个Class<?>...  是因为有重载的方法,要加上参数的类对象,如String.class

获取属性:Field getField(String name):获取对应的public属性

                  Field getFields():获取所有public属性

                  Field getDeclaredField(String name):获取对应的属性,与级别无关

                  Field getDeclaredFields():获取所有属性,与级别无关

还有获取包名,构造器,注解等等方法。

Constructor Method Field 方法均是反射包的类

猜你喜欢

转载自blog.csdn.net/u011862930/article/details/88140906