栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

反射潜入浅出

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

反射潜入浅出

反射

参考:
用最直接的大白话来聊一聊Java中的反射机制
java反射的原理,作用
面试官这样问我Java反射原理,我刚好都会

什么是反射

反射是将Java类中的各个部分(成员变量,方法,构造方法等信息),映射成一个个的Java对象。

Java反射机制是在运行状态中,对于任意一个类,能够知道这个类的所有属性和方法。对于任意一个对象,能够调用其任意一个属性和方法。这种动态获取信息以及动态调用对象方法的功能称为Java的反射基础。

如何得到想反射的类

我们编写的代码存储在后缀.java的文件中,最终会被编译为.class文件被执行。Java认为万物皆对象,这些编译后的.class文件也是一种对象,Java将其抽象成了一种类,这个类就是Class。

通过Class类可以得到我们想反射的类,想要反射第一步就是获得类的字节码,获得类的字节码方式有如下三种:

1.静态方法Class.forName("包类路径");
2.object.getClass(); 对象调用getClass()方法;
3.Class clazz = 类.class; 通过类.class获取;

反射原理

编译阶段:将类的源码通过Javac编译成字节码文件。

运行阶段:遇到了新建类的对象,触发了类加载器ClassLoader根据类的全限定名将类的字节码文件加载至JVM的方法区,然后将其转换成对应的Class对象实例至Java堆中,Java堆中。(反射就是在加载到jvm中的.class文件操作的)

Class类阶段(加载阶段):分别将成员变量Field[] fields、构造器Constructor[] cons、成员方法Method[] ms看做成对象。

常用函数

Field 成员变量

通过Class类的getDeclaredField(),getDeclaredFields()获取本类声明的字段。

Constructor 构造器

通过Class类实例的getConstructor(Class…parameterTypes)获取构造方法;

私有构造函数要设定Contructor实例.setAccessible(true);暴力反射获取。

Method 方法

包括类的静态方法和成员方法(包括抽象方法)。

通过Method类实例.invoke(Object obj,Object…args)完成方法调用。

通过public Method getMethod(String name,Class… parameterTypes)获取类的方法。

应用场景

1.Spring配置文件中bean生成对象实例,就是反射实现的。框架不知道类或对象的具体信息,将类的名称放在XMl文件中,属性和属性值也放在XML文件中。运行时再去读取XML文件并且动态获取类的信息,利用反射操作对象的set、get方法,将属性数据封装到Java对象中。

2.框架中的注解也是应用反射。

3.IDE自动提示功能应用反射。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/874281.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号