Java class文件格式总结_动力节点Java学院整理

 更新时间:2017年06月15日 15:12:20   投稿:mrr  
这篇文章主要介绍了Java class文件格式总结的相关资料,非常不错,具有参考借鉴价值,需要的的朋友参考下吧

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

相关文章

  • 详解java爬虫jsoup解析多空格class数据

    详解java爬虫jsoup解析多空格class数据

    在本篇内容中小编给大家分享了java爬虫jsoup怎么解析多空格class数据的方法和技巧,需要的朋友们跟着学习下。
    2018-12-12
  • Mybatis动态SQL之if、choose、where、set、trim、foreach标记实例详解

    Mybatis动态SQL之if、choose、where、set、trim、foreach标记实例详解

    动态SQL就是动态的生成SQL。接下来通过本文给大家介绍Mybatis动态SQL之if、choose、where、set、trim、foreach标记实例详解的相关知识,感兴趣的朋友一起看看吧
    2016-09-09
  • Mybatis的sql语句执行异常后打印到日志问题

    Mybatis的sql语句执行异常后打印到日志问题

    文章介绍了一种Mybatis异常日志打印方案,主要通过Mybatis拦截器获取执行的sql语句,并利用ThreadLocal存储,以避免多线程下的sql语句覆盖问题,当异常发生时,从ThreadLocal中取出sql语句并打印到单独的日志文件中,方便数据恢复,该方案经过压力测试
    2024-10-10
  • Java Maven Settings配置参考教程

    Java Maven Settings配置参考教程

    这篇文章主要介绍了Java Maven Settings配置参考,本文通过示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-09-09
  • Java高性能缓存框架之Caffeine详解

    Java高性能缓存框架之Caffeine详解

    这篇文章主要介绍了Java高性能缓存框架之Caffeine详解,Caffeine是一个基于Java8的高性能缓存框架,号称趋于完美,Caffeine受启发于Guava Cache的API,使用API和Guava是一致的,需要的朋友可以参考下
    2023-12-12
  • 通过代码实例深入解析Java重写和重载

    通过代码实例深入解析Java重写和重载

    这篇文章主要介绍了通过代码实例深入解析Java重写和重载,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-11-11
  • Java  Object类中的常用API介绍

    Java  Object类中的常用API介绍

    这篇文章主要介绍了Java  Object类中的常用API介绍,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-11-11
  • 带你了解Java数据结构和算法之队列

    带你了解Java数据结构和算法之队列

    这篇文章主要为大家介绍了Java数据结构和算法之队列,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-01-01
  • Spring概述和快速构建的方式

    Spring概述和快速构建的方式

    Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器(框架),Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情,本文给大家介绍spring概述和快速构建方式,一起看看吧
    2021-06-06
  • 为什么在重写 equals方法的同时必须重写 hashcode方法

    为什么在重写 equals方法的同时必须重写 hashcode方法

    Object 类是所有类的父类,其 equals 方法比较的是两个对象的引用指向的地址,hashcode 是一个本地方法,返回的是对象地址值。他们都是通过比较地址来比较对象是否相等的
    2016-07-07

最新评论