美文网首页
java 反射初识

java 反射初识

作者: 三十五岁养老 | 来源:发表于2022-03-02 15:42 被阅读0次

反射是Java中的一个重要的特性,使用反射可以在运行时动态生成对象、获取对象属性以及调用对象方法。与编译期的静态行为相对,所有的静态型操作都在编译期完成,而反射的所有行为基本都是在运行时进行的,这是一个很重要的特性。它让Java有了动态特性,可以让程序更加灵活强大

反射的背景和应用

反射大量运用在框架代码和工具代码中,因为这类工程项目往往对于灵活性的要求较高,在实际的业务代码中我们其实使用反射并不多。因此这也就引出了,大部分时候做业务的我们为什么要学习反射原理的原因:为了更加深刻地理解我们所用的工具和框架,了解了反射原理,我们能够在使用框架时优化出更好的性能

原理

java程序在编译完成后,会把所有class文件中所包含的类的基本元信息装载到JVM内存中,以Class类的形式保存,每一个Class类对象代表一个具体类的基本元信息。我们的反射就是在Class类的基础上进行的,Class类对象存储着类的所有相关信息,就像镜子,故称“反射”。

反射总体流程:

准备阶段:编译期装载所有的类,将每个类的元信息保存至Class类对象中,每一个类对应一个Class对象

获取Class对象:调用x.class/x.getClass()/Class.forName() 获取x的Class对象clz(这些方法的底层都是native方法,是在JVM底层编写好的,涉及到了JVM底层,就先不进行探究了)

进行实际反射操作:通过clz对象获取Field/Method/Constructor对象进行进一步操作

class类 :代表一个类,是Java反射机制的起源和入口

用于获取与类相关的各种信息, 提供了获取类信息的相关方法

Class类继承自Object类

Class类是所有类的共同的图纸

每个类有自己的对象,同时每个类也看做是一个对象,有共同的图纸Class,存放类的结构信息,能够通过相应方法取出相应的信息:类的名字、属性、方法、构造方法、父类和接口。

反射提供的功能

在运行时判断任意一个对象所属的类

在运行时构造任意一个类的对象

在运行时判断任意一个类所具有的成员变量和方法

在运行时调用任意一个对象的方法

反射的使用

通过Class.forName("全类名")

Class actionClass=Class.forName(“MyClass”);

Object action=actionClass.newInstance();

Method method = actionClass.getMethod(“myMethod”,null);

method.invoke(action,null)

反射效率提升

缓存重复用到的对象

void createInstance(String className){

cachedClass = cache.get(className);

if (cachedClass == null){

cachedClass = Class.forName(className);

cache.set(className, cachedClass); }

return cachedClass.newInstance();


setAccessible(true)

accessible 标志被设置为true,那么反射对象在使用的时候,不会去检查Java语言权限控制(private之类的)

使用高效率反射框架

EventBus原理

https://www.jianshu.com/p/d9516884dbd4

相关文章

  • 初识java反射

    1、首先一个问题,什么是类,类是不是对象? 我们总是说我们new一个对象出来 那么我们还没有new的时候,建造的那...

  • Java反射初识

    前言 反射作为java基础体系里非常重要的一环,我们在日常的编码过程中很难触碰到这一块,虽然触碰比较少但是不代表它...

  • java反射初识

    反射 反射的优缺点 优点 缺点 反射主要的api

  • java 反射初识

    反射是Java中的一个重要的特性,使用反射可以在运行时动态生成对象、获取对象属性以及调用对象方法。与编译期的静态行...

  • 博客地址

    java注解-01、java注解-02、Git面试资源java反射-01、java反射-02、java反射-03为...

  • Java反射机制入门

    Java反射机制入门 一、什么是反射 JAVA反射机制(The JAVA reflection mechanism...

  • Java基础之反射

    Java基础之—反射(非常重要)Java中反射机制详解Java进阶之reflection(反射机制)——反射概念与...

  • 初识反射

    Java类的加载,连接和初始化 当程序主动使用某个类时,如果该类还未被加载到内存中,则系统会通过加载、连接、初始化...

  • 反射之一

    总结内容源自一下文章粗浅看java反射机制反射机制应用实践谈谈java反射机制Java Reflection(反射...

  • 反射之二

    总结内容源自一下文章粗浅看java反射机制反射机制应用实践谈谈java反射机制Java Reflection(反射...

网友评论

      本文标题:java 反射初识

      本文链接:https://www.haomeiwen.com/subject/tulpqrtx.html