在结束本章之前,我们列出了一些关于Java的常见误解,同时给出了解释。
1)Java是HTML的扩展。
Java是一种程序设计语言;HTML是一种描述网页结构的方式。除了用于在网页上放置Java applet的HTML扩展之外,两者没有任何共同之处。
2)使用XML,就不需要Java。
Java是一种程序设计语言;XML是一种描述数据的方式。可以使用任何一种程序设计语言处理XML数据,而Java API对XML处理提供了很好的支持。此外,许多重要的第三方XML工具采用Java编写。有关这方面更加详细的信息请参看卷II。
3)Java是一种非常容易学习的程序设计语言。
像Java这种功能强大的语言大都不太容易学习。首先,必须将编写玩具式程序的轻松和开发实际项目的艰难区分开来。需要注意的是:本书只用了4章讨论Java语言。在两卷中,其他的章节介绍如何使用Java类库将Java语言应用到实际中去。Java类库包含了数千种类和接口与几万个方法。幸运的是,并不需要知道它们中的每一个,然而,要想Java解决实际问题,还是需要了解不少内容的。
4)Java将成为适用于所有平台的通用性编程语言。
从理论上讲,这是完全有可能的。的确,除了微软之外的每一个厂商都希望如此。然而,有很多在桌面计算机上已经工作良好的应用程序,在其他设备上或浏览器中或许不能正常地工作。同时,在编写这些应用程序时,利用了相应处理器的速度和本地的用户接口库,而且它们已经移植到所有重要的平台上。这类应用程序包括:字处理程序、图片编辑器以及Web浏览器。它们通常是用C或C++编写的,采用Java语言重新编写似乎对最终的用户不会带来什么特别的好处。
5)Java只不过是另外一种程序设计语言。
Java是一种很好的程序设计语言,很多程序设计人员喜欢Java胜过C、C++或C#。有上百种好的程序设计语言没有广泛地流行,而带有明显缺陷的语言,如:C++和Visual Basic却大行其道。
这是为什么呢?程序设计语言的成功更多地取决于其支撑系统的能力,而不是优美的语法。人们主要关注:是否提供了易于实现某些功能的易用、便捷和标准的库?是否拥有强大的程序设计能力与调试工具?语言和工具是否能够与计算机的其他基础结构整合在一起?Java的成功源于其类库能够让人们轻松地完成原本有一定难度的事情。例如:联网和多线程。Java减少了指针错误,因此使用Java编程的效率更高。但这些并不是Java成功的全部原因。
6)现在有了C#,Java过时了。
C#借鉴了Java许多好的思想,例如:清晰的语言结构、虚拟机和垃圾收集。无论怎样,C#还是省去了一些好的特性,其中最重要的是安全性和平台无关性。如果确定使用Windows,C#就更有意义。但是,从求职广告判定,Java仍然是大多数开发者选择的语言。
7)Java是专用的,应该避免使用。
Sun Microsystems负责将Java的许可发放给销售者以及最终用户。尽管Sun公司通过Java Community Process最终控制着Java,但他们同时与许多其他的公司联手一起进行着语言修订版的开发及新类库的设计。虚拟机和类库的源代码都可以免费获取,但是,只能查阅,不能修改,也不能再发布。因此,Java是“闭源,但运转良好”。
这种状况在2007年发生了戏剧性的变化,Sun声称Java未来的版本将在General Public License下可用。Linux使用的是同一个开放源代码许可。Oracle一直致力于保持Java开源。只有一点美中不足——专利。根据GPL,任何人都可以得到专利许可,允许其使用和修改Java,不过仅限于桌面和服务器平台。如果你想在嵌入式系统中使用Java,就需要另外一个不同的许可,这很可能需要付费。不过,这些专利在未来十年就会到期,那时Java就完全免费了。
8)Java是解释型的,因此对于关键的应用程序速度太慢了。
早期的Java是解释型的。现在除了像手机这样的“微型”平台之外,Java虚拟机使用了即时编译器,因此采用Java编写的“热点”代码其运行速度与C++相差无几。
Java有一些C++没有的额外开销。虚拟机的启动时间要慢一些,并且Java GUI要比本地的GUI慢一些,这是因为它们采用了与平台无关的绘图方式。
对于Java比C++慢,人们已经抱怨很多年了。但是,今天的计算机速度远比人们发出抱怨的时候快了很多。一个较慢的Java程序与几年前相当快的C++程序相比还要快一些。就这一点来说,那些抱怨听起来有点像狐狸抱怨葡萄酸,有些人已经转过来攻击Java用户界面不够漂亮而不再攻击速度慢了。
9)所有的Java程序都是在网页中运行的。
所有的Java applet都是在网页浏览器中运行的。这也恰恰是applet的定义,即一种在网页中运行的Java程序。然而,大多数Java程序是运行在Web浏览器之外的独立应用程序。实际上,很多Java程序都在Web服务器上运行并生成用于网页的代码。
10)Java程序是主要的安全风险。
早期的Java,有过关于安全系统失效的报道,曾经一度引起公众哗然。大多数安全问题都存在于Java的特定浏览器中。研究人员将这视为一种挑战,即努力找出Java的漏洞,对applet安全模型的强度和复杂度发起挑战。随后,人们很快就解决了引发问题的所有技术因素。据我们所知,任何实用系统都有安全危机。想想看:毫不夸张地说,有数百万种病毒攻击着Windows的可执行文件和Word宏,这给系统造成了巨大的损害,但却很少有人批评被攻击平台的脆弱。同样,Internet Explorer中的ActiveX机制始终作为被攻击的目标,但由于阻止这种攻击非常简单,所以人们也就懒得将它们公布于众了。
有些系统程序员在公司的浏览器中禁用Java,却允许其用户下载可执行文件、ActiveX控件和Word文档。这是多么荒唐可笑啊!事实上这会带来更大的风险。尽管距离Java的诞生已经15年之久,但与其他常用的执行平台相比,还是Java安全得多。
11)JavaScript是Java的简易版。
JavaScript是一种在网页中使用的脚本语言,它是由Netscape发明的,原来的名字叫做LiveScript。JavaScript的语法类似Java,除此之外,两者无任何关系。当然,名字有些相像。JavaScript的一个子集已经标准化为ECMA-262。与Java applet相比,JavaScript更紧密地与浏览器集成在一起。特别是JavaScript程序可以修改正在显示的文档,而applet只能在有限的区域内控制外观。
12)使用Java可以用价值500美元的Internet设备取代电脑。
当Java刚刚发布的时候,一些人打赌:肯定会有这样的好事情发生。从本书的第1版开始,我们就已经认定“家庭用户将会放弃功能强大且便利的桌面系统,而使用没有本地存储的网络设备”是一种荒谬的想法。我们发现基于Java的网络计算机,对利用“零管理”降低计算机所有者的商业成本是一种很好的选择。即便如此,这种好事也没有发生。新一代的平板电脑并没有使用Java。