参考博文:

(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. (简单广搜) Ice Cave -- codeforces -- 540C

    http://codeforces.com/problemset/problem/540/C You play a computer game. Your character stands on so ...

  2. MySQL连接查询(多表查询)

    基本含义 连接就是指两个或两个以上的表(数据源) “连接起来成为一个数据源”. 连接语法的基本形式:from 表1 [连接方式] join 表2 [on 连接条件]; 连接的结果可以当做一个“表”来使 ...

  3. POJ3255-Roadblocks(最短路)

    Description Bessie has moved to a small farm and sometimes enjoys returning to visit one of her best ...

  4. PAT甲级 1125. Chain the Ropes (25)

    1125. Chain the Ropes (25) 时间限制 200 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue Given ...

  5. UIKit-UIBezierPath

    UIBezierPath精讲 http://www.henishuo.com/uibezierpath-draw/ iOS UIBezierPath类 介绍 http://justsee.iteye. ...

  6. Javaweb异常提示信息统一处理

    Java异常封装(自己定义错误码和描述,附源码) 2016年01月29日 22:30:54 小宝鸽 阅读数:23262 标签: java异常 更多 个人分类: Java基础 所属专栏: Java工作实 ...

  7. 最大流Dinic算法

    嘿嘿嘿,时隔不久又见到了DInic,再次回顾一下吧 不过这次我倒是不想深究,而是想多做一些题,因为这几次比赛下来,算法不是重点,重点是题目如何转化,算法如何应用,这也是比赛为什么让你带着板子的原因吧, ...

  8. [Leedcode 169]Majority Element

    1 题目描述 Given an array of size n, find the majority element. The majority element is the element that ...

  9. [ASE][Daily Scrum]11.06

    我们的<坦克大战·无尽>正式开始动工了,今天的任务计划如下~ [Plan] View Shilin Liu 搭建好开发环境 收集素材         Control Jiafan Zhu ...

  10. Golang Email

    Backup Code I dont have chinese inputmethod now ( what the fuck about Linux KDE envirnment !) , so j ...