Java反射机制

来源:互联网 发布:琼恩 龙母 知乎 编辑:程序博客网 时间:2024/06/05 06:28

Java反射机制

目标

1.理解Class类2.理解Java的类加载机制3.学会使用ClassLoader进行加载4.理解反射机制5.掌握Constructor、Method、Field6.理解并掌握动态代理

介绍

说实话反射用在编程语言中确实让人很难理解也很抽象。可以这么理解:为了能够动态(运行期)获得类的信息,因此java提供了反射机制。 Java正因为拥有反射机制所以说Java具备动态语言的特性,此动态非动态语言的动态特性。所谓的反射机制就是java语言在运行时拥有一项自观的能力。通过这种能力可以彻底的了解自身的情况为下一步的动作做准备。每个类在JVM中都有且只有一个Class实例对象

方法介绍和使用

获得类对应的Class对象的三种方式

//1、通过Class.forName(全限定名)Class clazz1 = Class.forName("com.xuyi.usemaven.javase.ref.User");//2、通过类的class属性获取Class clazz2 = User.class;//3、通过实例对象的getClass()方法获取User user = new User();Class clazz3 = user.getClass();//备注:以上三种获取Class对象方式中,第一种方式是使用最多的,反射的目的就是为了动态获取,后面两种方式没有体现动态的特性。Class.forName方式通常除了加载类通常还会初始化类,当然可以设置是否需要初始化。

Class对象主要方法

获得属性    //获得属性数组    getFields()&getDeclaredFields()    //获得某个具体属性    getField(String name)&getDeclaredField(String name)

获得方法    //获得方法数组    getMethods()&getDeclaredMethods()    //获得某个具体方法    getMethod(String name, Class<?>... parameterTypes)&    getDeclaredMethod(String name, Class<?>... parameterTypes)

获得构造方法    //获得构造方法数组    getConstructors()&getDeclaredConstructors()    //获得某个具体构造方法    getConstructor(Class<?>... parameterTypes)&    getDeclaredConstructor(Class<?>... parameterTypes)

备注:通常有Declared修饰的方法表示可以获得private修饰的属性/方法,无Declared修饰的方法通常表示只能获取public修饰的属性/方法。备注:通常由private修饰的属性/方法使用前需要调用setAccessible(true),设置访问属性。

总结

JDK的反射机制在日常开发中我们可能遇到和使用的机会并不多,但是很多的框架设计与实现都是基于反射机制来实现的。基于JDK的动态代理实现就是借助反射机制实现的。理解反射机制比记住Class类下的方法更重要。
0 0
原创粉丝点击