不足之处,欢迎专家、同行、读者批评指正。

Java的工作原理

Java程序从写代码到实际运行需要经过三个步骤:编写,编译、运行。在不同的阶段,分别生成了不同类型的文件。

在理解工作原理的时候,我们可以看:这个文件由谁产生,给谁使用,是什么类型的。

第一个阶段,编写。

这个阶段由程序员写代码(用什么写无所谓,用记事本写都可以。不过编辑器我推荐Sublime)。写出来以后,保存为“.java”后缀的文件。这个文件是准备给Java编译器的。

第二个阶段,编译。

由编译器,把刚刚写好的“.java”后缀的文件,编译成“.class”后缀的文件。当然不是换个后缀那么简单,点开“.class”看的话会发现是“乱码”,二进制文件——很正常,因为这本来就不是给人看的,是给Java解释器看的。另外,这个转换的过程,会对程序员写的“.java”后缀的文件进行查错,就像老师检查作业一样。如果中间有语法错误,会直接告诉程序员编译不通过,那就得debug了。

第三个阶段,运行。

在此之前,回顾一下“跨平台”的概念。我们知道,Java是跨平台的,然后这个“跨”是通过Java虚拟机实现的。但是这个Java虚拟机在不同的操作系统中是不一样的,那到底是什么东西真正在“跨”呢?就是上一步生成的“.class”文件。这个是给虚拟机用的。不同操作系统的虚拟机,运行相同的“.class”文件,效果是一样的,所以说它跨平台了。这就是所谓的二进制代码级别的跨平台移植。

回来说说运行。运行是由Java解释器,把“.class”文件翻译成机器代码,一边执行一边显示结果的过程。这个Java解释器是上文我提到的Java虚拟机中的一部分。

关于“边解释边运行”,可以说一下。这个其实不是绝对的。因为Java解释器其实 不止一种,我们是可以选择的。另外,字节码其实也不是必须的,只不过字节码对于虚拟机来说读起来更快。字节码甚至可以由其他的语言生成,这就涉及到不同语言的混编了。