到此, 所有关于class文件格式的重要内容都已经讲解完了, 不敢说面面俱到, 但是敢说大部分重要的内容都包含在内了。前前后后用了9篇博客来专门讲解class文件结构, 为什么花那么多的时间和精力来介绍class文件呢? 简而言之,因为它很重要。在前面的文章中, 也讲到过为什么对于理解Java体系结构来说, 理解class文件的格式至关重要。 其实这篇短文也不是对class文件格式细节上的总结, 而是我在学习class文件和JVM的过程中的一些感悟和理解。

我们都知道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等语言的设计者已经在这么干了

深入理解 JVM Class文件格式(十)相关推荐

  1. 深入理解 JVM Class文件格式(九)

    经过前八篇关于class文件的博客, 关于class文件格式的内容也基本上讲完了. 本文是关于class文件格式的最后一篇. 在这篇博客中, 将会讲解关于方法的几个属性. 理解这篇博客的内容, 对于理 ...

  2. 深入理解 JVM Class文件格式(八)

    在本专栏的第一篇文章 深入理解Java虚拟机到底是什么 中, 我们主要讲解了什么是虚拟机, 这篇博客是对JVM的一个概述. 在随后的几篇文章中,一直在讲解class文件格式. 在今天这篇博客中, 将会 ...

  3. 深入理解 JVM Class文件格式(七)

    本专栏列前面的一系列博客, 对Class文件中的一部分数据项进行了介绍. 本文将会继续介绍class文件中未讲解的信息. 先回顾一下上面一篇文章. 在上一篇博客中, 我们介绍了: this_class ...

  4. 深入理解 JVM Class文件格式(五)

    (8) CONSTANT_Class_info 常量池中的一个CONSTANT_Class_info, 可以看做是CONSTANT_Class数据类型的一个实例. 他是对类或者接口的符号引用. 它描述 ...

  5. 深入理解 JVM Class文件格式(三)

    ** JVM常量池中各数据项类型详解 ** 关于常量池的大概内容, 已经在 深入理解 JVM Class文件格式(一) 中讲解过了, 这篇文章中还介绍了常量池中的11种数据类型. 本文的任务是详细讲解 ...

  6. 深入理解 JVM Class文件格式(六)

    经过前几篇文章, 终于将常量池介绍完了, 之所以花这么大的功夫介绍常量池, 是因为对于理解class文件格式,常量池是必须要了解的, 因为class文件中其他地方,大量引用了常量池中的数据项. 对于还 ...

  7. 深入理解JVM类文件格式

    我们知道Java最有名的宣传口号就是:"一次编写,到处运行(Write Once,Run Anywhere)",而其平台无关性则是依赖于JVM, 所有的java文件都被编译成字节码 ...

  8. 深入理解 JVM Class文件格式(二)

    ** class文件中的特殊字符串 ** 特殊字符串是常量池中符号引用的一部分,包括三种: 类的全限定名, 字段和方法的描述符, 特殊方法的方法名. 下面我们就分别介绍这三种特殊字符串. (1) 类的 ...

  9. 深入理解 JVM Class文件格式(一)

    ** 一.JVM体系结构 ** ** 二.class格式文件概述 ** class文件是一种8位字节的二进制流文件, 各个数据项按顺序紧密的从前向后排列, 相邻的项之间没有间隙, 这样可以使得clas ...

最新文章

  1. oracle存储过程 多条件,Oracle多条件查询实际分页存储过程实操
  2. PowerShell-2.解决禁止本地执行脚本
  3. [Medical Image Process] 3.3 Grayscale Morphology Application
  4. How Many Replication Method In SAP HANA
  5. spring 中 Hibernate 事务和JDBC事务嵌套问题
  6. 使用hotnode自动更新脚本(热发布)
  7. 执行后可以查看python的版本的是_windows肿么查看python opencv 版本
  8. postgresql9.6 的安装
  9. strike F1 to retry boot,F2 for setup utility
  10. 4款报表工具功能对比,哪款最实用?
  11. 在Android Studio上编写第一个安卓程序
  12. java线程之可重入锁
  13. 电脑保护眼睛的背景颜色
  14. Java中为按钮添加监听器(事件处理)四种形式总结
  15. 截取指定字符前面或后面的字符串
  16. JAVA   变量
  17. Django和layim实现websocket
  18. 消防设备电源监控系统在高层民用建筑内的应用
  19. RabbitMQ之web界面解析
  20. mete20可以升级鸿蒙,从微信小程序到鸿蒙js开发【12】——storage缓存自动登录

热门文章

  1. unity5.x C# 获取屏幕宽度 设置不受重力影响
  2. java 中字符串比较方法_java中常用的字符串的比较方法(两种)
  3. tcp udp区别优缺点_一文搞懂TCP与UDP的区别
  4. asp 强制转换浮点数值_C/C++中浮点数的编码存储
  5. php 怎么定义一个空对象,php定义空对象的方法
  6. 酸了!第一名+第三名的学霸情侣,分别直博清华、人大…
  7. 大数据告诉你:学历真的能改变命运!!
  8. C语言入门经典材料领走不谢!
  9. 数据可视化,带给你的惊艳并不止这一点!
  10. 给所有想从事软件研发的年轻工程师的忠告与建议