Java反射机制
2016-09-07 21:37
190 查看
Java反射机制
目标
1.理解Class类 2.理解Java的类加载机制 3.学会使用ClassLoader进行加载 4.理解反射机制 5.掌握Constructor、Method、Field 6.理解并掌握动态代理
介绍
说实话反射用在编程语言中确实让人很难理解也很抽象。可以这么理解:为了能够动态(运行期)获得类的信息,因此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类下的方法更重要。