Java语言是一种特殊的高级语言,Java程序(.java)需要经过先编译,生成一种与平台无关的字节码文件(.class);后解释两个步骤,由JVM解释执行。因此Java语言既具有解释型语言的特征,也具有编译型语言的特征。
计算机高级语言按程序执行方式可以分为以下3种:
编译型语言:C、C++、Objective-C、Pascal等
解释型语言:ruby、Python、JavaScript等
混合型:Java、C#
Java程序的运行机制分为两种:
- 编译型
- 解释型
个人理解为如下:
举个例子:
-
编译型:张三是个英国人,他想看中国的作家写的小说,由于书本的内容全都是中文,他根本看不懂。
但是过了一两天,那位中国的作家将自己的小说整本翻译成了多种语言,例如有英语、法语、德语、日语等
语言,并准备发行、出售。张三非常激动,说终于可以看到中国作家写的英文版的小说了。 -
解释型:由于张三以前十分努力地工作,他现在开了一家公司,年薪几百万,很有钱,为了陶冶自己的情操,
他决定请一个翻译官在自己身边实时为他翻译一位中国作家写的小说。张三看一段,翻译官直接翻译一段。
如果张三想把看过的内容再看一遍,那么翻译官就得重新翻译一遍。有钱人的生活,往往就是这么朴实无华,且枯燥。
从上面举的例子可以看出,所谓的编译型就是将整个要编译的源文件编译一次(就像翻译一本书),然后进行校验、解释给操作系统运行(就像给张三看并且他能看懂)。
那么解释型就是仅仅编译当前要执行的一段代码,执行完成之后再进行下一段代码的编译,也就是编译一段,运行一段(就像张三的翻译官在一段一段地翻译给张三听)。
由于编译型的效率比较高,在很多高级计算机语言都适用,例如 C语言、C++、Java、Python等等。
那么解释型对速度要求不是很高,例如在JavaScript脚本语言中比较有用。
当然,我当前所学习的Java语言是编译型和解释型都适应的语言。
如上图所示:
这是Java的编译源代码和运行的过程。如果要编译一个Java程序,首先Java编译器会把.java源文件编译成一个字节码.class文件,
然后进行类装载、再进行字节码校验,所谓的字节码校验,就是检查我写的代码有没有错误,如果有错误,校验过程就会停留在此处,
然后要自己去寻找错误并改正;如果所有的代码都没有问题,字节码就会通过解释器来一段一段地告诉操作系统改如何进行运作这个
程序,最后,就是Java程序运行成功的结果。
这就是Java程序的编译和运行过程。可以看出Java语言是真的很万能呢!