在正式地学习Java之前,有必要了解一下Java程序的运行原理,毕竟磨刀不误砍柴功嘛。笔者之前学习的是C语言,编写的代码经过编译器的编译后,会直接生成计算机可识别运行的二进制文件也就是exe文件。但是由于不同平台的API(Application Programming Interface,应用程序编程接口)不同,C语言编写的程序不能跨平台使用,但源码可以。而Java语言却只需一次编译,就可以跨平台运行程序。而为什么Java可以做到跨平台运行呢?下面笔者就这个问题进行讨论:
先附上一张Java程序工作原理的流程图:
我相信大多数人编写的第一个Java程序都是“HelloWorld”吧。要编写这个程序,首先要在记事本或者其他文本编辑软件上编辑以下代码,最后将其命名为HelloWorld.java。
public class HelloWorld{
public static void main(String [] args){
System.out.println("HelloWorld");
}
然后打开cmd窗口使用javac指令将以上代码编译成二进制的HelloWorld.class字节码文件。而Java跨平台的实现,正是因为这个微不足道的字节码文件和接下来要说的JVM(Java Virtual Machine,Java虚拟机)。一般的高级语言如果要在不同的平台上运行,至少需要编译成不同的目标代码。而引入JVM后,Java语言在不同平台上运行时不需要重新编译,Java语言编译程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。
在JVM中,类装载器装载字节码文件HelloWorld.class,然后字节码校验器会校验代码的格式和语法等,之后解释器会将字节码转换成机器指令让cpu执行。