数据结构-反射

反射

在程序运行过程中,动态获取一个类中的属性/方法,把这种机制称为反射机制。
JVM中,每个类都有一个唯一的class对象,描述该属性/方法等内容,每个类的class对象有且只有一个由JVM产生。 每个类加载到JVM之后,由JVM产生这个类的class对象,程序获取该class对象的三种方式:
Class.forName("类的全名称")
②通过类名称.class
③通过该类的任意对象调用getClass成员方法获取class对象
在这里插入图片描述
反射的四大核心类

一.Class类:反射的核心类,反射的入口

方法用途
getClassLoader()获得类的加载器
getDeclaredClasses()返回一个数组,数组中包含该类中所有类和接口类的对象(包括私有的)
forName(String className)根据类名返回类的对象
newInstance()创建类的实例
getName()获得类的完整路径名字

二.Field类 :代表类的成员变量/类的属性

方法用途
getField(String name)获得某个公有的属性对象
getFields()获得所有公有的属性对象
getDeclaredField(String name)获得某个属性对象
getDeclaredFields()获得所有属性对象

三.Method类:代表类的方法

方法用途
getMethod(String name, Class…<?> parameterTypes)获得该类某个公有的方法
getMethods()获得该类所有公有的方法
getDeclaredMethod(String name, Class…<?> parameterTypes)获得该类某个方法
getDeclaredMethods()获得该类所有方法

四.Constructor类:代表类的构造方法

方法用途
getConstructor(Class…<?> parameterTypes)获得该类中与参数类型匹配的公有构造方法
getConstructors()获得该类的所有公有构造方法
getDeclaredConstructor(Class…<?> parameterTypes)获得该类中与参数类型匹配的构造方法
getDeclaredConstructors()获得该类所有构造方法

反射的应用

1.通过反射产生对象
方法1:通过Class类的newInstance()方法,此时默认调用Student类的public权限的无参构造。
在这里插入图片描述
方法2:通过Constructor类来调用构造方法产生对象。Constructor类是Java中利用反射操作构造方法的类,getDeclaredConstructors(参数):获取该类的所有权限的构造方法,包括私有权限,
在这里插入图片描述
获取私有的有参构造:
在这里插入图片描述

2.通过反射操作类中的方法
getMethods():获取类中所有的公共方法;getDeclaredMethods():获取该类的所有方法。
在这里插入图片描述
调用普通方法:
在这里插入图片描述
调用静态方法:
在这里插入图片描述

3.通过反射操作类中的属性:具体方法在Filed类中

总结:
优点: 对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法;增加程序的灵活性和扩展性,降低耦合性,提高自适应能力。
缺点:
反射会破坏封装性,在当前JVM进程中可见;反射技术绕过了源代码的技术,因而会带来维护问题。反射代码比相应的直接代码更复杂 。

继续努力!!!
在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值