本文出自java疯狂讲义,主要概述java运行机制
众所周知java是跨平台的,但是为什么跨平台呢?这就需要了解java程序运行过程
无论通过什么编辑器编写完java程序,保存的文件都是【.java】的格式表示这是java的源程序,相当于C中的【.o】
然后通过javac命令进行编译,编译生成与平台无关的的字节码文件【bytecode】,这种字节码文件只是一个中间代码,不能被执行,必须使用java虚拟机来解释执行,也就是直接通过java命令执行.class文件
通过具体一个例子,解释java运行过程
public class Test {
public static void main(String[] args) {
System.out.println("Hello World");
}
}
这一段是很简单的一个java代码,此时文件名是.java(java源代码文件)
根据上面所说,应该将其转化为与平台无关的字节码,可以通过javac命令
通过命令行进入此java文件的路径,输入命令
javac Test.java
然后可以查看到Test.java后面多了一个文件【Test.class】也就是字节码文件,在输入命令
java Test
就可以看到输出内容,也就是入门的Hello World了。
Java语言负责执行字节码文件的是JVM(java虚拟机,JAVA Virtual Machine),JVM是可以运行字节码文件的虚拟计算机,所有的字节码文件都是面向JVM的,不同平台的JVM是不同的(如Windows,Linux等),但是不同的JVM向编译器提供的接口相同,因此编写的java代码编译生成的字节码可以在所有的JVM上解释运行,这样就实现了一次编写到处运行(关键点是JVM)
可能这样解释有些太抽象,举一个书中具体的例子
把所有的操作系统(平台)当做是笔,不同的笔,而所有的字节码文件当成笔盖,笔盖相同的情况下,想把这些笔盖盖在不同的笔上面显然是不可能的,因此需要一个转换器,这个转化器(也就是JVM)向上提供相同的接口,也就是说所有的笔盖都能放在这个转换器上,向下根据不同的笔产生不同的接口,对于粗的笔则产生粗的接口,细的笔则产生细的接口,这样就能将所有的笔盖放在所有的笔上了
还有一个很简单的例子,有些老电脑只提供VGA接口,但是现在普遍使用的是HDMI的线(信号好),但是老电脑就无法使用,因此需要一个转接头,将转接头的一头用于连接老电脑的VGA,另一头链接HDMI,这样就可以完成链接了,这个转接头就相当于JVM了