原文:https://juejin.im/book/5c25811a6fb9a049ec6b23ee/section/5ccc66dd518825403b5975fb import java.lang.invoke.MethodHandle;import java.lang.invoke.MethodHandles;import java.lang.invoke.MethodType; public class Foo { public void print(String s, String a…
只需看看今天Groovy语言实现机制.在此之前,是第一个推倒静态类型与动态类型语言在实现上面的一些差异. 静态类型 vs. 动态类型 看以下这个简单的栗子. def addtwo(a, b) { return a + b; } 静态类型语言与动态类型语言对于上面这个简单的加法实现全然不同.静态类型语言.比如Java.语言的编译器在编译时就已经进行类型检查,所以能够将+运算符编译成特定的指令.语言的runtime系统能够直接执行该指令.比如javac会将两个int类型的+运算编译成iadd指令,执…
一个 Class 文件描述了类或接口的字段,方法,父类,访问权限等全部信息.其实,它只是一种能被 JVM 识别的数据格式,就和 UDP 8字节头部一样,这就是规范,标准!所谓"不闻不若闻之,闻之不若见之,见之不若知之,知之不若行之,学至于行而止矣,行之,明也".本文最后将动手分析一个 Class 文件的字节和反编译后的伪汇编语言,来探讨其结构. 本文将介绍: Class 头部信息 Class 常量池信息 Class 父类,访问权限和接口信息 Class 字段及其属性 Class 方法及…