java 反射

11 篇文章 0 订阅

1.反射

 简介

反射就是在运行状态能够动态的获取该类的属性和方法,并且能够任意的使用该类的属性和方法,这种动态获取类信息以及动态的调用对象的方法的功能就是反射。

优点:

  1. 反射提高了程序的灵活性和扩展性。
  2. 降低耦合性,提高自适应能力。
  3. 它允许程序创建和控制任何类的对象,无需提前硬编码目标类。

缺点:

  1. 性能问题:使用反射基本上是一种解释操作,用于字段和方法接入时要远慢于直接代码。因此反射机制主要应用在对灵活性和拓展性要求很高的系统框架上,普通程序不建议使用。
  2. 使用反射会模糊程序内部逻辑;程序员希望在源代码中看到程序的逻辑,反射却绕过了源代码的技术,因而会带来维护的问题,反射代码比相应的直接代码更复杂。

反射实际应用

  1. 动态代理
  2. JDBC 的数据库的连接
  3. Spring 框架的使用

动态代理参考:https://blog.csdn.net/three_stand/article/details/100698723

对象识别

Java中我们在运行时识别对象和类的信息,也叫做RTTI,方式主要有来两种:

  • 传统的RTTI(Run-Time Type Information),RTTI称为运行时类型识别,传统的RTTI是在编译时就已经知道所有类型;
  • 反射机制:而反射机制则是在程序运行时才确定的类型信息。

对于反射的执行过程的原理,我这里画了一张图,以供大家参考理解。

我们看过JVM的相关书籍都会详细的了解到,Java文件首先要通过编译器编译,编译成Class文件,然后通过类加载器(ClassLoader)将class文件加载到JVM中。 

反射中常用的方法

  

getConstructors()

获取公共构造器

getDeclaredConstructors()

获取所有构造器

newInstance()

获取该类对象

getName()

获取类名包含包路径

getSimpleName()

获取类名不包含包路径

getFields()

获取类公共类型的所有属性

getDeclaredFields()

获取类的所有属性

getField(String name)

获取类公共类型的指定属性

getDeclaredField(String name)

获取类全部类型的指定属性

getMethods()

获取类公共类型的方法

getDeclaredMethods()

获取类的所有方法

getMethod(String name, Class[] parameterTypes)

获得类的特定公共类型方法

getDeclaredClasses()

获取内部类

getDeclaringClass()

获取外部类

getPackage()

获取所在包

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值