五、什么是java反射?如何使用它?有哪些例子?

Java反射机制允许程序在运行时动态获取类的信息并调用其方法。它提供了获取类的属性、方法、构造器等的API。反射的优点包括提高灵活性和扩展性,但也有消耗资源和可能破坏封装性的缺点。Spring框架利用反射进行IOC和AOP操作,如动态加载Bean和处理注解。

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

目录

一.什么是Java反射?

二、反射优缺点

三、如何使用反射?

四、spring用到反射的场景


一.什么是Java反射?

        Java 反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;这种动态获取信息以及动态调用对象方法的功能称为 Java 语言的反射机制。简单来说,反射机制指的是程序在运行时能够获取自身的信息。在 Java 中,只要给定类的名字,就可以通过反射机制来获得类的所有信息

表 1 反射可访问的常用信息
类型访问方法返回值类型说明
包路径getPackage()Package 对象获取该类的存放路径
类名称getName()String 对象获取该类的名称
继承类getSuperclass()Class 对象获取该类继承的类
实现接口getlnterfaces()Class 型数组获取该类实现的所有接口
构造方法getConstructors()Constructor 型数组获取所有权限为 public 的构造方法
getDeclaredContruectors()Constructor 对象获取当前对象的所有构造方法
方法getMethods()Methods 型数组获取所有权限为 public 的方法
getDeclaredMethods()Methods 对象获取当前对象的所有方法
成员变量getFields()Field 型数组获取所有权限为 public 的成员变量
getDeclareFileds()Field 对象获取当前对象的所有成员变量
内部类getClasses()Class 型数组获取所有权限为 public 的内部类
getDeclaredClasses()Class 型数组获取所有内部类
内部类的声明类getDeclaringClass()Class 对象如果该类为内部类,则返回它的成员类,否则返回 null

 

二、反射优缺点

优点:

  • 能够运行时动态获取类的实例,大大提高系统的灵活性和扩展性。
  • 与 Java 动态编译相结合,可以实现无比强大的功能。
  • 对于 Java 这种先编译再运行的语言,能够让我们很方便的创建灵活的代码,这些代码可以在运行时装配,无需在组件之间进行源代码的链接,更加容易实现面向对象。


缺点:

  • 反射会消耗一定的系统资源,因此,如果不需要动态地创建一个对象,那么就不需要用反射;
  • 反射调用方法时可以忽略权限检查,获取这个类的私有方法和属性,因此可能会破坏类的封装性而导致安全问题。

 

 三、如何使用反射?

 

 

  1. 数据类型.class,如int.class,String.class,任何数据类型都有.class,可以直接调用
  2. 对象.getClass(),如String str=new Stirng(); Class c=str.getClass();
  3. Class.forName("完整类名")
public class demo  {
    public static void main(String[] args) throws ClassNotFoundException {

        //方法1
        Class string = String.class;

        //方法2
        String s = "hello";
        Class string2 = s.getClass();

        //方法3
        Class string3 = Class.forName("java.lang.String");



    }
}



 四、spring用到反射的场景

1.我们在使用JDBC连接数据库时使用class.forName()通过反射加载数据库的驱动程序
2.Spring框架的IOC(动态加载管理Bean)创建对象以及AOP功能都和反射有联系
3.各类注解都是通过反射机制实现

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值