Java的反射机制到底是什么?有什么用?

女爷i 2023-03-04 06:30 111阅读 0赞

Java反射机制

    • 1、Java 什么是反射机制
    • 2、反射能干啥
    • 3、怎样得到反射的类
    • 4、反射的优缺点

1、Java 什么是反射机制

在这里插入图片描述
Java反射机制是在运行状态中,对于任意一个类,都能知道这个类所有的属性和方法;
对于任意一个对象,都能调用任意一个属性和方法;
这种动态获取的信息以及动态调用对象的方法的功能称为Java语言的反射机制。

通俗的讲:反射就是把Java类中的各个部分,映射成一个个的Java对象,例如,一个类有:成员变量,方法,构造方法,等信息,利用反射技术咱们可以把这些组成部分映射成一个个对象,拿到这些对象后就可以做一些事情。

2、反射能干啥

一般来说反射是用来做框架的,我们自己平时的项目开发过程中,基本很少会直接用到反射机制,但很多设计开发都与反射机制有关,例如模块化的开发,通过反射机制去调用对应的字节码;动态代理设计模式也采用了反射机制,还有我们经常使用的Spring····等框架也大量使用到了反射机制。

举例:
1、我们在使用JDBC连接数据库使用Class.forName()通过反射记载数据库的驱动程序;
2、Spring配置文件里的常见的bean配置,可以用反射很轻易的就可以实现:解析xml然后把xml里的内容作为参数,利用反射创建对象。
3、动态配置实例的属性;
4、····

虽然反射在日常的开发中用到的不多,但是咱们还必须搞懂它,因为搞懂了反射以后,可以帮助咱们理解框架的一些原理。所以说有一句很经典的话:反射是框架设计的灵魂

3、怎样得到反射的类

反射相当于是对一个类进行解剖,想解剖一个东西,前提是首先你得拿到这个东西,那么怎么得到咱们想解剖的类呢?

首先我们知道,我们写的Java代码是 在 .java文件里,通过编译成 .class文件再执行。而Java这门面向对象的语言的宗旨是,一切皆对象,所以所以java认为 这些编译后的 class文件也是一种对象,它也给抽象成了一种类,这个类就是Class,可以再API里面查看。

在这里插入图片描述
有一个方法forName(String className); 而且是一个静态的方法,这样咱们就可以得到想反射的类了
在这里插入图片描述

  1. public static void main(String[] args) throws ClassNotFoundException {
  2. Class<?> aClass = Class.forName("com.kkb.quickstart.entity.User");
  3. }

我们知道一个类里一般有构造函数、方法、成员变量(字段/属性)这三部分组成

翻阅API文档,可以看到Class对象提供了如下常用方法:

  1. //得到构造方法,可以创建对象
  2. public Constructor getConstructor(Class<?>…parameterTypes)
  3. //得到方法
  4. public Method getMethod(String name,Class<?>… parameterTypes)
  5. //得到属性
  6. public Field getField(String name)
  7. //得到私有的构造函数
  8. public Constructor getDeclaredConstructor(Class<?>…parameterTypes)
  9. //得到私有的方法
  10. public Method getDeclaredMethod(String name,Class<?>… parameterTypes)
  11. //得到私有的属性
  12. public Field getDeclaredField(String name)
  13. //这些方法分别用于帮咱们从类中解剖出构造函数、方法和成员变量(属性)。

4、反射的优缺点

优点:
运行期类型的判断,动态加载类,提高代码灵活度
缺点:
1、性能瓶颈:反射相当于一系列解释操作,通知JVM要做的事情,性能比直接的Java代码要慢很多。
2、安全问题:让我们可以动态操作改变类的属性同时也增加了类的安全隐患。

发表评论

表情:
评论列表 (有 0 条评论,111人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Java反射机制什么

    [Java][]反射机制是 Java 语言的一个重要特性。 在学习 Java 反射机制前,大家应该先了解两个概念,编译期和运行期。 编译期是指把源码交给编译器编译成计算机可

    相关 TiDB 到底什么

    如今硬件的性价比越来越高,网络传输速度越来越快,数据库分层的趋势逐渐显现,人们已经不再强求用一个解决方案来解决所有的存储问题,而是通过分层,让缓存与数据库负责各自擅长的业务场景