1、Java反射与自定义注解底层原理
2023-09-16 20:08:28 2 举报
Java反射与自定义注解底层原理
作者其他创作
大纲/内容
题外话,我们知道反射只能在运行时才可以使用,那为什么不是编译时呢,或者说什么是编译时,什么又是运行时呢?1、词法分析:将Java源代码一个字节一个字节的读出来,根据关键字,分辨出符合规范的Token流。也就是把一段代码分解成一个个单独的词。2、语法分析:语法分析器会读取Token流,组建成更加结构化的语法书。也就是将这些Token流中的单词组装成一句话,然后生成一颗语法树。3、语义分析:这个阶段就是编译器对代码的各种检查和优化,编译器首先对代码进行一些检查,保证代码符合java语言规范4、JVM是一种规范,不是什么具体的设备,它是Java语言能够跨平台的关键,即一次代码编译,处处运行。
1、类加载的最终产物是java.lang.Class对象,其可以理解为就是.class文件在JVM内存中的一个快照(类的模板),JVM将从字节码文件中解析出来的常量池、类字段、类方法等信息存储到Class对象中,这样JVM在运行期便能通过该Class对象获取到Java类中的任意信息,能够对Java类的成员变量进行遍历,也能进行Java方法的调用。反射机制就是基于这来实现的。2、在JDK7及6的版本中,Class对象及静态变量是存放在永久代中的;JDK8及之后,Class对象及静态变量就被转移到堆区了。(永久代物理上属于堆的一部分,和新生代、老年代地址是连续的,而元空间属于本地内存,大小仅受本地内存容量的限制)3、jdk6及之前版本中,(字符串,运行时,静态)常量池是存放在永久代(方法区)中的,jdk7将字符串常量池转移到了堆区,jdk8及之后取消了永久代,改为元空间,运行时和静态常量池改为存放在元空间(物理内存)上,而字符串常量池仍然存储在堆区。
1、反射一词用在物理上就是一种光学现象。指光在传播到不同物质时,在分界面上改变传播方向又返回原来物质中的现象;2、在Java中,反射就是能够让程序透过本质进行自我审视能力的一种强有力的工具,借助反射,程序可以知道自己具有哪些特性(比如具有哪些字段、哪些构造器、哪些方法、自己是否是抽象的、是否是接口类型的,父类有哪些等),并可以在程序运行时动态的修改自身的状态和行为。
gitee代码仓库:https://gitee.com/appleyk/spring-ioc-sample
0 条评论
下一页