参考博文:

(1)关于class的签名Signature

(2)关于访问标识

(3)关于Class中的Signature属性

(4)附录1 常量池解析

(5)附录2 方法解析

(6)Class文件结构

(7)关于class的签名Signature

(8)

1、简介

Java是一门跨平台的语言,可以做到“一次编写,到处运行(Write Once Run Anywhere)。这其中字节码(ByteCode)起到了至关重要的作用。Java虚拟机并没有和任何特定的语言绑定,但是要求运行在虚拟机这上的语言如Java、Scala等按照Java虚拟机规范《The Java Virutal Machine Specification》的要求,生成二进制Class文件格式者可以正常运行到虚拟机之上。例如,Java按照自己的语言规范《The Java Language Specification》将源代码翻译为Class文件格式。

其它的语言也能做到到处运行,但做不到一次编写,例如C语言在Linux平台上与Windows平台上创建线程时有不同的写法:

又或者编写了涉及到基本类型的位操作,C语言在不同平台、不同的操作系统数下其基本类型所占的字节是不同的。而Java无论在任何的平台下,其类型所占用的字节数是平定的,这得益于Java虚拟机为我们屏蔽了硬件差异。这大大简化了Java语言的使用。

2、Class文件头及常量池

2.1 魔术与版本

所有的Class文件开始的4个字节被称为魔术,其值是0xCAFFBABY,主要是起到标识作用。其它许多文件都会规定满足特定格式必须以某几个固定字节开头,如ZIP文件以2字节"PK"(0x504B)开头,因为Jar也是一种压缩文件,同样以"PK"字节开头。如果开始4字节不为0xCAFFBABY,则JVM将会认为该文件不是Class文件而拒绝解析。

魔术之后紧跟着Class文件的次版本号和主版本号。其中第5和第6个字节表示次版本号,第7和第8个字节表示主版本号。

2.2 常量池

3、访问标识与继承

4、字段及方法定义

5、Javac读取class文件

6、Javac生成class文件

第十五章-class类文件结构的更多相关文章

  1. CSS3秘笈复习:十三章&十四章&十五章&十六章&十七章

    第十三章 1.在使用浮动时,源代码的顺序非常重要.浮动元素的HTML必须处在要包围它的元素的HTML之前. 2.清楚浮动: (1).在外围div的底部添加一个清除元素:clear属性可以防止元素包围浮 ...

  2. Gradle 1.12用户指南翻译——第四十五章. 应用程序插件

    本文由CSDN博客貌似掉线翻译,其他章节的翻译请参见: http://blog.csdn.net/column/details/gradle-translation.html 翻译项目请关注Githu ...

  3. Gradle 1.12用户指南翻译——第二十五章. Scala 插件

    其他章节的翻译请参见: http://blog.csdn.net/column/details/gradle-translation.html 翻译项目请关注Github上的地址: https://g ...

  4. Gradle 1.12用户指南翻译——第三十五章. Sonar 插件

    本文由CSDN博客万一博主翻译,其他章节的翻译请参见: http://blog.csdn.net/column/details/gradle-translation.html 翻译项目请关注Githu ...

  5. C++ Primer Plus学习:第十五章

    第十五章 友元.异常和其他 友元 友元类 表 0-1 class Tv { public: friend class Remote; } Remote类可以使用Tv的数据成员,Remote类在Tv类后 ...

  6. “全栈2019”Java第三十五章:面向对象

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

  7. 进击的Python【第十五章】:Web前端基础之DOM

    进击的Python[第十五章]:Web前端基础之DOM 简介:文档对象模型(Document Object Model,DOM)是一种用于HTML和XML文档的编程接口.它给文档提供了一种结构化的表示 ...

  8. python 教程 第十五章、 结构布局

    第十五章. 结构布局 #!/usr/bin/env python #(1)起始行 "this is a module" #(2)模块文档 import sys #(3)模块导入 d ...

  9. 第十五章、Python多线程之信号量和GIL

    目录 第十五章.Python多线程之信号量和GIL 1. 信号量(Semaphore) 2. GIL 说明: 第十五章.Python多线程之信号量和GIL 1. 信号量(Semaphore) 信号量用 ...

随机推荐

  1. [待完善]mycat分布式架构部署

    mycat介绍:http://mycat.org.cn/ mycat分布式架构部署

  2. 阿里云对象存储oss上传文件夹

    最近公司做工程项目,实现文件夹云存储上传. 网上找了一天,发现网上很多代码都存在相似问题,最后终于找到了一个满足我需求的项目. 工程如下: 这里对项目的大文件传输功能做出分析,怎么实现文件夹上传的,如 ...

  3. Redis模块开发示例

    实现一个Redis module,支持两个扩展命令: 1) 可同时对hash的多个field进行incr操作: 2) incrby同时设置一个key的过期时间 在没有module之前,需要借助eval ...

  4. maven之web工程的搭建

    参考之前jave application的工程创建的步骤,我们只需要修改最后一步 这样就创建了个web maven工程 与java application应用程序的区别,还有别的区别这里不做多的阐述. ...

  5. java静态代码块、普通代码

    参考文章:http://www.cnblogs.com/qinpengming/p/5227227.html Java中经常有一些静态块,这是用来在生成类之前进行的初始化,无论java还C++语言中的 ...

  6. js反选

    <!DOCTYPE html><html> <head> <meta charset="UTF-8"> <title>& ...

  7. RxSwift学习笔记1:RxSwift的编程风格

    第一天:简单体验与RxSwift的编程风格 import UIKit//导入Rx相关框架 import RxSwift import RxCocoa struct Music { let name:S ...

  8. cpu信息查看

    # 总核数 = 物理CPU个数 X 每颗物理CPU的核数 # 总逻辑CPU数 = 物理CPU个数 X 每颗物理CPU的核数 X 超线程数 # 查看物理CPU个数 cat /proc/cpuinfo| ...

  9. delphi char数组、string和Pchar的相互转换

    因为要调用windows的api或者给vc++写接口,很多地方都要用到pchar,现在将char数组.string和pchar之间的相互转换都列出来,都是网上找的资料,我总结一下,先直接上代码,再讲原 ...

  10. [模板]最小割树(Gomory-Hu Tree)(luogu4897)

    给定一个\(n\)个点\(m\)条边的无向连通图,多次询问两点之间的最小割 两点间的最小割是这样定义的:原图的每条边有一个割断它的代价,你需要用最小的代价使得这两个点不连通 Input 第一行两个数\ ...