Java反射机制总结

当程序主动使用某个类时,如果该类还未被加载到内存中,则系统会通过加载连接初始化3个步骤来对该类进行初始化。

类加载指的是将类的class文件读入内存,并为之创建一个java.lang.Class对象。系统中的所有类实际上都是java.lang.Class的实例。

在Java中获得Class对象通常有如下3种方式。

1. 使用Class.forName(String clazzName)静态方法。该字符串参数的值是某个类的全限定类名(必须添加完整包名)。

2. 调用类的class属性获取该类对应的Class对象。例如MainActivity.class。

3. 调用对象的getClass()方法。该方法是java.lang.Object类中的一个方法,所以所有的Java对象都可以调用该方法,该方法将会返回该对象所属类对应的Class对象。

第2种方式有如下优势。

1. 代码更安全。程序在编译阶段可以检查需要访问的Class对象是否存在。

2. 程序性能更好。


Java反射机制就是通过类对应的Class对象在运行时获取类的信息,如类构造方法、方法、成员变量、注解、内部类、外部类、接口、超类Class对象、修饰符、包、类名。


Class类的方法

1. 获取构造方法

Constructor<T> getConstructor(Class<?>... parameterType); 返回此Class对象对应类的指定public构造器。

Constructor<T>[] getConstructors(); 返回此Class对象对应类的所有public构造器。

getDeclaredConstructor(Class<?>... parameterType); 返回此Class对象对应类的指定构造器,与构造器访问权限无关。

getDeclaredConstructors(); 返回此Class对象对应类的所有构造器,与构造器访问权限无关。


2. 获取方法

Method getMethod(String name, Class<?>... parameterTypes);

Method[] getMethods();

Method getDeclaredMethod(Strinig name, Class<?>... parameterTypes); 返回此Class对象对应类的指定方法,与方法的访问权限无关。

Method getDeclaredMethods();


3. 获取Field

Field getField(String name);

Field[] getFields();

Field getDeclaredField(String name);

Field[] getDeclaredFields();


通过上述方法可以获取非public方法和非public Field,使用java.lang.reflect.AccessibleObject.setAccessible(boolean flag)设置为可访问,这样就可以访问非public方法。


4. 获取Annotation

<A extends Annotation> A get getAnnotation(Class<A> annotationClass);

Annotation[] getAnnotations();

Annotation[] getDeclaredAnnotations();


5. 创建对象

T newInstance(); 相当于使用无参构造器new一个对象,若无参构造器不可访问,则抛出IllegalAccessException异常,若没有无参构造器,则抛出InstantiationException异常。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值