— 本文参照 Learn Java for Android Development (第三版)
java是一个平台
java平台是由虚拟机和可执行环境组成。听起来好奇怪的样子是不是?再往下看看是怎么回事。这个虚拟机就是基于软件处理器的一堆指令集,通常被大家叫做java虚拟机。可执行环境主要是指一些库,用来协助一些应用程序并且跟底层系统交互。有点中间件的意思。
这个可执行环境是是一个庞大的类库。主要就是把一些常用的功能预编译好了然后我们开发者就可以直接使用了。比如把一些通用的数学操作(三角函数之类的)或者一些通用的网络通信相关的功能预编译好。这些预编译好的库我们把它叫做标准类库。
java程序跟其他的程序相比是有一点特殊的。C/C++程序通过编译器编译的结果都是生成一些可执行程序。但是java编译器是把我们的源码编译成了一堆目标代码。听起来好像有点陌生。怎么是把代码继续编译成了代码。目标代码是什么东东呢。作者的解释是:目标代码是由指令集构成的,目标代码需要java虚拟机和相关数据才能执行。这些指令集我们通常说的字节码。好有一点混乱的感觉啊,各种码码码。但是这在我们学习之前重要吗?难道程序员们在跑helloworld之前都搞清楚了每种语言的编译细节?学习应该是一个不断前进、反思、累积的过程。所以不要心急,不要心急,不要心急。以上这一大堆解释其实可以用下面这个图来直接清楚地表示:
java编译器把源码转化成目标代码,目标代码就是字节码(指令集)和数据集 编译器是以文件的形式存放程序的字节码和数据,而这种文件一般后缀名是.class。这种文件也就是我们通常说的类文件,因为他们存放的就是已经编译好的类。在第三章会详细讨论跟这相关的一些细节。既然说到了类文件,下面也给出一个类文件的结构图:
类文件就是由这些东西构成的:魔法数(不明所以的数)、版本号、常量池、访问标志、当前类、超类、接口、域、方法、类或者接口的属性 不要过于担心去怎么去拿下这些跟类文件相关的知识。作者他只不过是想满足一下那些有好奇心的人的欲望,所以才会在这么开头向我们展示了这么复杂的东西。