一劳永逸
劳苦一时,永远得到安逸。北魏·贾思勰《齐民要术·种苜蓿》:“长生种者,一劳永逸,都邑负郭,所宜种之。”汉·班固《封燕然山铭》:“兹所谓一劳而久逸,暂费而永宁者也。”唐·杜牧《贺平党项表》:“不暂费者不久宁,不一劳者不永逸。”
理解:人们对事务的理解都是做事需要不断的积累和努力,没有一劳永逸的事情。但是java的平台无关性真的是“一劳永逸”——一次编译,到处执行(Write Once ,Run Anywhere)。
平台无关性
平台无关性就是说一门语言的运行与计算机无关,他可以运行在计算机不同的系统,或者其他机器上。
java平台无关性的实现
计算机只识别0 1代码。所以真正被执行的其实是二进制文件。唯一不同的是不同的系统或者机器他们对同样的事物定义的二进制是不同的。java中实现平台无关性的三大重要角色:java编程规范、class文件、java虚拟机。
java编程规范定义数据类型和取值范围。举一个简单的例子,对于int类型,在Java中,int占4个字节,这是固定的。
但是在C++中却不是固定的了。在16位计算机上,和在32位的机器上他们的长度可能是不同的。
所有运行的Java文件都要被编译成class文件。
java虽然是平台无关性的,但是java虚拟机是跟平台有关的,不同的平台需要的java虚拟机也不同,所以java代码能够运行的条件是java虚拟机的存在,他们会将相同的class文件编译成当前系统能够正确解读的二进制文件。
编译
编译分为前端编译,和后端编译。
前端编译主要指与源语言有关但与目标机无关的部分。Java中,我们所熟知的javac的编译就是前端编译。除了这种以外,我们使用的很多IDE,如eclipse,idea等,都内置了前端编译器。主要功能就是把.java代码转换成.class代码。
后端编译主要是将中间代码再翻译成机器语言。Java中,这一步骤就是Java虚拟机来执行的。