到此, 全部关于class文件格式的重要内容都已经讲解完了, 不敢说面面俱到, 可是敢说大部分重要的内容都包含在内了。前先后后用了9篇博客来专门讲解class文件结构, 为何花那么多的时间和精力来介绍class文件呢? 简而言之,由于它很重要。在前面的文章中, 也讲到过为何对于理解Java体系结构来讲, 理解class文件的格式相当重要。 其实这篇短文也不是对class文件格式细节上的总结, 而是我在学习class文件和JVM的过程当中的一些感悟和理解。 java
咱们都知道JVM可以识别的只有class格式的文件, 而源文件只是咱们人能识别的, 不能被JVM识别。 那咱们要在更深的层次上理解Java语言, 理解JVM, 只懂源文件是不够的, 由于虚拟机的不少的行为, 是在class文件中定义的, 而咱们要理解JVM的行为, 就必须也学会JVM能理解的“语言”, 那就是class文件格式 。 就像咱们想要深刻的了解一个外国人, 只站在本身的角度上是不可能了解他的, 只有你学会了他的语言, 才能对他更了解, 由于只有你理解了他说的话, 才能知道他作的事, 进而了解他的行事方式和性格特色。 固然, 也有另一个方式可让你了解外国人, 那就是让他学会中国话, 大家用中文交流。 可是在Java的世界里, 这是不可能的, 由于你不可能让JVM识别源文件, 因此, 只能你去学习JVM能理解的语言 ---- class文件。 学习
理解了class文件的格式, 不只对理解JVM的行为有指导性的意义, 它还能让咱们对Java代码有更加清晰深入的认识, 毕竟class文件是由咱们写的java代码“翻译”过来的。 明白了class文件的格式, 你就能知道方法是如何表示的, 字段是如何表示的, 继承是如何表示的 , 方法体是如何表示的, 等等。 全部源文件中的东西, 都会在class文件中有相应的描述形式。 这样会让咱们在写代码时作到成竹在胸。 当代码出了问题时, 也能更快的找出缘由所在,由于咱们能够把源码生成的class文件反编译出来, 看看它内部是如何实现的。 毕竟原理明白了, 源代码只是表象罢了。scala
此外, class文件不仅是能够由Java代码生成。 其余不少基于JVM的语言, 也是生成标准的class文件, 而后被虚拟机执行。 如我最近正在学习的scala语言, 它就是基于虚拟机的。 scalac编译器能够将scala代码编译成class文件。 这样的话, 了解class文件格式, 能够对学习其余基于JVM的语言起到很好的做用, 你会发现, 若是你对class文件和JVM足够了解的话, 学习这些语言会感到很是轻松。 class文件是JVM的一个接口, 无论你源文件中写的是什么代码, 不论是java仍是scala, 只要经过必定的方式, 让你写的代码能够转化成格式正确的class文件, 那么JVM就能替你执行。 若是你足够牛, 彻底能够本身建立一门语言, 实现一个针对这个语言的编译器, 将之编译成class, 那么虚拟机也能执行, 而且Scala,Groovy等语言的设计者已经在这么干了翻译