Java反射机制

本文深入讲解Java反射机制,包括Class类的理解与应用、类加载机制、动态代理的实现等核心内容,并介绍了如何通过不同方式获取Class对象及使用其提供的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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类下的方法更重要。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值