您的位置:首页 > 编程语言 > Java开发

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类下的方法更重要。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java class 反射机制