Java class文件格式总结_动力节点Java学院整理
我们都知道JVM能够识别的只有class格式的文件,而源文件只是我们人能识别的,不能被JVM识别。那我们要在更深的层次上理解Java语言,理解JVM,只懂源文件是不够的,因为虚拟机的很多的行为,是在class文件中定义的,而我们要理解JVM的行为,就必须也学会JVM能理解的“语言”,那就是class文件格式。就像我们想要深入的了解一个外国人,只站在自己的角度上是不可能了解他的,只有你学会了他的语言,才能对他更了解,因为只有你理解了他说的话,才能知道他做的事,进而了解他的行事方式和性格特点。当然,也有另外一个方式可以让你了解外国人,那就是让他学会中国话,你们用中文交流。但是在Java的世界里,这是不可能的,因为你不可能让JVM识别源文件,所以,只能你去学习JVM能理解的语言----class文件。
理解了class文件的格式,不仅对理解JVM的行为有指导性的意义,它还能让我们对Java代码有更加清晰深刻的认识,毕竟class文件是由我们写的java代码“翻译”过来的。明白了class文件的格式,你就能知道方法是如何表示的,字段是如何表示的,继承是如何表示的,方法体是如何表示的,等等。所有源文件中的东西,都会在class文件中有相应的描述形式。这样会让我们在写代码时做到胸有成竹。当代码出了问题时,也能更快的找出原因所在,因为我们可以把源码生成的class文件反编译出来,看看它内部是如何实现的。毕竟原理明白了,源代码只是表象罢了。
此外,class文件不只是可以由Java代码生成。其他很多基于JVM的语言,也是生成标准的class文件,然后被虚拟机执行。如我最近正在学习的scala语言,它就是基于虚拟机的。 scalac编译器可以将scala代码编译成class文件。这样的话,了解class文件格式,可以对学习其他基于JVM的语言起到很好的作用,你会发现,如果你对class文件和JVM足够了解的话,学习这些语言会感到非常轻松。class文件是JVM的一个接口,不管你源文件中写的是什么代码,不管是java还是scala,只要通过一定的方式,让你写的代码可以转化成格式正确的class文件,那么JVM就能替你执行。如果你足够牛,完全可以自己创建一门语言,实现一个针对这个语言的编译器,将之编译成class,那么虚拟机也能执行,并且Scala,Groovy等语言的设计者已经在这么干了。