第十五章-class类文件结构
参考博文:
(2)关于访问标识
(4)附录1 常量池解析
(5)附录2 方法解析
(6)Class文件结构
(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类文件结构的更多相关文章
- CSS3秘笈复习:十三章&十四章&十五章&十六章&十七章
第十三章 1.在使用浮动时,源代码的顺序非常重要.浮动元素的HTML必须处在要包围它的元素的HTML之前. 2.清楚浮动: (1).在外围div的底部添加一个清除元素:clear属性可以防止元素包围浮 ...
- Gradle 1.12用户指南翻译——第四十五章. 应用程序插件
本文由CSDN博客貌似掉线翻译,其他章节的翻译请参见: http://blog.csdn.net/column/details/gradle-translation.html 翻译项目请关注Githu ...
- Gradle 1.12用户指南翻译——第二十五章. Scala 插件
其他章节的翻译请参见: http://blog.csdn.net/column/details/gradle-translation.html 翻译项目请关注Github上的地址: https://g ...
- Gradle 1.12用户指南翻译——第三十五章. Sonar 插件
本文由CSDN博客万一博主翻译,其他章节的翻译请参见: http://blog.csdn.net/column/details/gradle-translation.html 翻译项目请关注Githu ...
- C++ Primer Plus学习:第十五章
第十五章 友元.异常和其他 友元 友元类 表 0-1 class Tv { public: friend class Remote; } Remote类可以使用Tv的数据成员,Remote类在Tv类后 ...
- “全栈2019”Java第三十五章:面向对象
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...
- 进击的Python【第十五章】:Web前端基础之DOM
进击的Python[第十五章]:Web前端基础之DOM 简介:文档对象模型(Document Object Model,DOM)是一种用于HTML和XML文档的编程接口.它给文档提供了一种结构化的表示 ...
- python 教程 第十五章、 结构布局
第十五章. 结构布局 #!/usr/bin/env python #(1)起始行 "this is a module" #(2)模块文档 import sys #(3)模块导入 d ...
- 第十五章、Python多线程之信号量和GIL
目录 第十五章.Python多线程之信号量和GIL 1. 信号量(Semaphore) 2. GIL 说明: 第十五章.Python多线程之信号量和GIL 1. 信号量(Semaphore) 信号量用 ...
随机推荐
- Redis的appendfsync参数详解
redis.conf中的appendfysnc是对redis性能有重要影响的参数之一.可取三种值:always.everysec和no. 设置为always时,会极大消弱Redis的性能,因为这种模式 ...
- Java类、超类、包
定义和实例化与C#相同 特殊变量 super当前对象的父类,用于调用父类的变量和方法 this当前类对象 存取限制有3个 没有C#的inter ...
- STM32F10X-定时器/计数器
1.STM32F10X的计数器与定时器关系 当时钟连接外脉冲时是计数器:当时钟采用系统内部时钟时是定时器! 2.STM32F10X定时器的时钟源 STM32F10X定时器的时钟不是直接来至于APB1和 ...
- 个人理解的int数组和char数组
char数组中不论是一维还是二维的,在程序执行时每一块的分离依据都是以提供的起始地址到'\0'为一个处理的字符串.所以关于char[]的函数都是只提供相应起始地址作为形参就可以. char[]互相交换 ...
- 网络timeout区分
ConnectTimeout 连接建立时间,三次握手完成时间 SocketTimeout 数据传输过程中数据包之间间隔的最大时间 下面重点说下SocketTimeout,比如有如下图所示的http请求 ...
- codeforces966 A
这题主要就是考虑y1两侧的最近的电梯和楼梯 当时主要是考虑 如果电梯在y1和y2中间的话 那么直接做电梯就是最优解 如果在y2右边就用abs去算 然后发现其实只考虑 y1的左右两边的电梯和楼 ...
- 马士兵hibernate(原始笔记)
马士兵hibernate(原始笔记) 课程内容 1 HelloWorld a) Xml b) annotation 2 Hibernate原理模拟 - 什么是O/R ...
- C++中的四种类型转换
//1.常见的类型转换,使用static_cast float f = 1.234; int i =static_cast<int>(f);//等价于 int i = (int)f; // ...
- 12.Scrapy与mongodb交互和设置中间键
反反爬虫相关机制 Some websites implement certain measures to prevent bots from crawling them, with varying d ...
- 10.Date对象
Date()对象 Date对象用于处理日期和时间. Math对象 ◆Math.ceil() 天花板函数 向上取整 ★如果是整数,取整之后是这个数本身 ★如果是小数,对数进行向上舍入. ◆Ma ...