1.3 什么是Java
Java不仅仅是一种程序设计语言,它还是一种新的“生活方式”。首先,大多数的程序设计语言用编译或者解释的方法处理代码,而Java同时使用这两种方法。在图1.3中你可以看到,在最初的编译阶段将源代码(.java文件)翻译成叫作Java字节码的中间语言(.class文件)。字节码接下来可以在一个特殊的虚拟计算机——JVM(Java虚拟机)中运行(解释方式)。

图1.3 Java代码的执行分两步:编译和解释执行
Java虚拟机是一个“模拟”的计算机,所有的字节码指令可以在上面运行,即JVM使Java可以在大量的、不同的平台上运行,因为JVM担当了一个字节码和真实机器指令间的一个统一界面,在运行的时候,JVM将字节码翻译成特定机器的指令。
编译成的字节码是Java“编写一次,到处运行”的灵活性背后的动力。正像在图1.4中看到的,一个目标平台需要的所有东西就是一个JVM,它有能力去执行Java应用程序,而不管它们最初是在什么平台上面编译的。
然而,为了成功地做到这些,我们不仅仅需要一种程序设计语言,还需要一个程序设计平台。Java平台由3个重要的部分组成:
v Java编译器和工具。
v Java虚拟机。
v Java的API。

图1.4 Java字节码在JVM上运行,这使得它成为可移植的程序
Java和C++的对比
既然大多数的游戏程序员都是C++编程人员,下面简要列举一下Jave和C++主要的 区别。
Java是基于C++的,实际上James Gosling用C++实现了Java最初的版本。但是James找机会用Java独特的语言模型,改造了它的结构,使得它对程序员更加友好。
首先主要的区别是内存管理。不像C++,在Java中,基本上不能自己分配和释放内 存——那是JVM的工作。我们可以控制对象的创建,但是没有任何一种方法可以控制对象的销毁。我们不能做任何指针运算;这里没有对象在内存中的地址的概念。因此那些悬指针、内存泄漏、蓝屏的事件就不会发生。
同时,Java和C++还有以下显著的区别:
● 在Java中没有对源文件的预处理。
● 不像C++,Java没有分为接口(.h)和实现(.cpp)。在Java中只有一个源文件。
● 任何东西在Java中都是以类的形式存在的对象,这也就意味着没有全局变量。
● Java中没有类型自动转换,必须明确进行。
● Java有一个简单的对象模型;它不支持多重继承、模板和操作符重载。
作为一个C++程序员,笔者对Java的最初印象是它是C++的简化版本。C++给了更多在内存和运行方面的控制,在Java中找不到模板、预处理的技巧和操作符重载。然而在使用Java一些年后,笔者不得不公正地说,在对性能要求不是那么苛刻的地方,不用关心这些区别。Java代码一般执行得比较好,错误也比较少。Java API具有大量丰富的功能,而且它的性能在大多数的情况下和C++一样,或者优于C++——这也是因为笔者可以花一些时间来改进自己的代码。
JVM的目标是提供一个底层设备的接口,Java API向Java应用程序提供一个这些功能的有限接口。在这种方式下,JVM是法官、陪审团和程序代码的执行者。
Java API是一个覆盖众多功能的Java类的集合,这些功能包括容器、数据管理、通信、输入输出、安全性和其他的一些功能。现在已经有几千个类在Java平台上可以供使用。






