龙空技术网

Java程序设计概述:设计平台+关键术语+发展简史+常见误解

程序员高级码农II 228

前言:

眼前你们对“java旅游项目的简介”大体比较着重,我们都想要了解一些“java旅游项目的简介”的相关知识。那么小编同时在网络上汇集了一些对于“java旅游项目的简介””的相关内容,希望大家能喜欢,兄弟们一起来了解一下吧!

前言

1996年Java第一次发布就引起了人们的极大兴趣。关注Java的人士不仅限于计算机出版界,还有诸如《纽约时报》、《华盛顿邮报》、《商业周刊》这样的主流媒体。Java是第一种也是唯一一种在National Public Radio 上占用了10分钟时间进行介绍的程序设计语言,并且还得到了$100 000 000的风险投资基金。这些基金全部用来支持用这种特别的计算机语言开发的产品。重温那些令人兴奋的日子是很有意思的。在这一章中,将简要介绍Java语言的发展历史。

Java程序设计平台

在本文的第一版中,对Java是这样描写的:“作为一种计算机语言,Java的广告词实在有点夸大其辞。然而,Java确实是一种优秀的程序设计语言。对于一个名副其实的程序设计人员来说,使用Java无疑是一个好的选择。有人认为:Java将有望成为一种最优秀的程序设计语言,但还需要一个相当长的发展时期。一旦一种语言应用于某个领域,与现存代码的相容性问题就摆在了人们的面前。”

我们的编辑手中有许多这样的广告词。这是Sun公司高层的某位不愿透露姓名的人士提供的。

然而,现在看起来,当初的这些预测还是有一定准确程度的。Java有许多非常优秀的语言特性,在本章稍后将会详细地讨论这些特性。由于相容性这个严峻的问题确实存在于现实中,所以或多或少会有一些“累赘”被添加到语言中,这就导致Java并不如想象中的那样完美无瑕。

但是,正像我们在第1版中已经指出的那样,Java并不只是一种语言。在此之前出现的那么多种语言也没有能够引起那么大的轰动。Java是一个完整的平台,有一个庞大的库,其中包含很多可重用的代码和一个提供诸如安全性、跨操作系统的可移植性以及自动垃圾回收等服务的执行环境。

作为一名程序设计人员,常常希望能够有一种语言,它具有令人赏心悦目的语法和易于理解的语义(C++不是这样的)。与许多其他的优秀语言一样,Java恰恰满足了这些要求。有些语言提供了可移植性、垃圾回收等等,但是,没有提供一个大型的库,如果想要有奇特的绘图功能、网络连接功能和数据库存取功能就必须自己动手编写代码。Java这种功能齐全的出色语言,具有高质量的执行环境以及庞大的库。正是因为它集多种优势于一身,所以对于广大的程序设计人员来说有着不可抗拒的吸引力。

1.2 Java“白皮书”的关键术语

Java的设计者已经编写了颇有影响力的“白皮书”,用来解释设计的初衷以及完成的情况,并且发布了一个简短的摘要。该摘要用下面11个关键术语进行组织:

简单性 可移植性

面向对象 解释型

分布式 高性能

健壮性 多线程

安全性 动态性

体系结构中立

在本节中,将论述下面两个问题:

• 给出白皮书中对每个关键术语的概述,这是Java设计者对相关术语的论述。

• 凭借Java当前版本的使用经验,给出对于这些术语的理解。

1.2.1 简单性

人们希望构建一个无需深奥的专业训练就可以进行编程的系统,并且要符合当今的标准惯例。因此,尽管人们发现C++不太适用,但在设计Java的时候还是尽可能地接近C++,以便系统更易于理解。Java剔除了C++中许多很少使用、难以理解、易混淆的特性。在目前看来,这些特性带来的麻烦远远大于带来的好处。

的确,Java语法是C++语法的一个“纯净”版本。这里没有头文件、指针运算(甚至指针语法)、结构、联合、操作符重载、虚基类等等。(请参看本书各个章节给出的C++注释,那里比较详细地解释了Java与C++之间的区别。)然而,设计者并没有试图清除C++中所有不适当的特性。例如,switch语句的语法在Java中就没有改变。如果熟悉C++就会发现可以轻而易举地将它转换成Java。如果已经习惯于可视化的编程环境(例如Visual Basic),就不会觉得Java简单了。Java有许多奇怪的语法(尽管掌握其要领并不需要很长时间),更重要的是,使用Java需要自己编写大量的程序。Visual Basic的魅力在于它的可视化设计环境几乎自动地为应用程序提供了大量的基础结构。而使用Java实现同样的功能却需要手工地编制代码,通常代码量还相当大。然而,已经有一些支持“拖放”风格程序开发的第三方开发环境。

简单性的另一个方面是小。Java的目标之一是支持开发能够在小型机器上独立运行的软件。基本的解释器以及类支持大约仅为40KB;再加上基础的标准类库和对线程的支持(基本上是一个自含的微内核)大约需要增加175KB。

这是一个了不起的成就。然而,需要注意的是支持图形用户界面(GUI)的类库相当大。

1.2.2 面向对象

简单地讲,面向对象设计是一种程序设计技术。它将重点放在数据(即对象)和对象的接口上。用木匠来打一个比方,一个“面向对象的”木匠始终关注的是所制作的椅子,第二位才是所使用的工具;一个“非面向对象的”木匠则首先考虑的是所用的工具。在本质上,Java的面向对象能力与C++是一样的。

在过去的30年里,面向对象已经证明了自身的价值,一种现代的程序设计语言不使用面向对象技术简直让人难以置信。的确,Java的面向对象特性与C++旗鼓相当。Java与C++的主要不同点在于多继承,在Java中,取而代之的是简单的接口概念,以及Java的元类(metaclass)模型。反射机制(请参看第5章)以及对象序列化特性(请参看第12章)使得Java更加容易实现持久对象和GUI构建器(可以整合外来组件)。

1.2.3 分布式

Java有一个扩展的例程库,用于处理像HTTP 和 FTP这类的TCP/IP协议。Java应用程序能够通过URL打开和访问网络上的对象,其便利程度如同访问本地文件系统一样。

人们已经看到Java的网络能力强大且易于使用。任何曾经试图使用其他语言进行网络编程的人都会惊呼Java竟然把类似打开socket连接这类繁重的任务都变得如此简单。(在本书的卷II中介绍网络连接。)另外,远程方法调用机制使得分布式对象之间可以进行通信。(也将在卷II中介绍。)现在有一种独立的体系结构,Java 2企业版(J2EE),它支持大规模的分布式应用。

1.2.4 健壮性

Java的设计目标之一在于使用Java编写的程序具有多方面的可靠性。Java投入了大量的精力进行早期的问题检测、后期动态的(运行时)检测,并消除了有出错倾向的状态……Java和C++最大的不同在于Java采用的指针模型可以消除重写内存和损坏数据的可能性。

这个特性非常有用。Java编译器能够检测许多在其他语言中仅在运行时刻才能够检测出来的问题。至于第二点,对于曾经花费几个小时来检查由于指针bug而引起内存冲突的人来说,一定很喜欢Java的这一特性。

如果曾经只使用过Visual Basic这类没有显式指针的语言,就会感觉这么说似乎有些小题大做。然而,C程序员就没有这样幸运了。他们需要利用指针来存取串、数组、对象,甚至文件。在Visual Basic中,根本不必使用指针来访问这些实体,也不必关心有关内存分配的问题。另一方面,在没有指针的语言中,许多数据结构很难实现。Java具有双方的优势。它不需要使用指针构造诸如串、数组这样的结构。如果需要,也能够具有指针的能力,如链表。Java绝对是安全的,其原因是永远不会存取一个“坏的”指针,造成内存分配的错误,也不必防范内存泄漏。

1.2.5 安全性

Java适用于网络/分布式环境。为了达到这个目标,在安全方面投入了很大精力。

使用Java可以构建防病毒、防篡改的系统。

在本书的第1版中,曾经说过:“永远不要把话说绝!”事实证明这是正确的。在Java开发工具箱第1版启用后不久,普林斯顿大学的一些安全专家们发现了在Java 1.0中的某些安全特性方面存在着一些非常隐蔽的bug。Sun Microsystems 大力支持对Java的安全性的研究,制定了供人们使用的规范,实现了虚拟机和安全库,并迅速地处理了所有已知的安全bug。在任何情况下,蒙骗Java的安全机制都是十分困难的。现在,发现bug所需的技术性越来越强,数目越来越少。

从一开始,Java就被设计成能够防范各种袭击,包括:

• 禁止运行时堆栈溢出。例如,蠕虫等病毒常用的袭击手段。

• 禁止在自己的处理空间之外破坏内存。

• 未经授权禁止读写文件。

许多安全特性相继不断地被加入Java中。自从Java 1.1问世以来,Java就有了数字签名类(digitally signed class)的概念(请参看卷II)。通过数字签名类,可以确定类的作者。如果信任这个类的作者,这个类就可以在你的机器上拥有更多的权限。

1.2.6 体系结构中立

编译器生成一个体系结构中立的目标文件格式,这是一种编译过的代码,只要有Java运行时系统,就可以在许多处理器上运行。Java编译器通过生成与特定的计算机体系结构无关的字节码指令来实现这一特性。精心设计的字节码不仅可以很容易地在任何机器上被解释执行,而且还可以迅速地翻译成本地机器的代码。

这并不是什么新的思想。20多年以前,Niklaus Wirth最初实现的Pascal以及UCSD Pascal系统都使用了这种技术。

当然,解释字节码肯定要比全速地运行机器指令慢很多。所以说,这是不是一个好的思想还很难讲!然而,虚拟机有一个选项,它可以将执行最频繁的字节码序列翻译成机器码,这一过程被称为即时编译。这一策略已经被证明十分有效,致使微软的.NET平台也依赖于虚拟机。虚拟机还有一些其他的优点。虚拟机可以检测指令序列的行为,以增强其安全性。有些程序甚至能够快速地生成字节码,并动态地增强所运行程序的处理能力。

1.2.7 可移植性

与C和C++不同,Java规范中没有“依赖具体实现”的地方。基本数据类型的大小以及有关算法都做了明确的说明。

例如,Java中的int永远为32位的整数,而在C/C++中,int可能是16位整数、32位整数,也可能是编译器提供商指定的其他大小。唯一的限制只是int类型的大小不能低于short int,并且不能高于long int。在Java中,数据类型具有固定的大小,消除了代码移植时令人头痛的主要问题。二进制数据以固定的格式存储和传输,消除了字节顺序的困扰。字符串是用标准的Unicode格式存储的。作为系统的组成部分的类库,定义了可移植的接口。例如,有一个抽象的Window类给出了在UNIX、Windows和Macintosh环境下的不同实现。

凡是尝试过的人都知道,要编写一个在Windows、Macintosh和10种不同风格的、在UNIX上看起来都不错的程序有多么困难。Java 1.0就尝试着做了这么一个壮举,发布了一个将常用的用户界面元素映射到不同平台上的简单工具箱。遗憾的是,花费了大量的心血,却构建了一个在各个系统上都难以让人接受的库(而且,在不同平台的图形实现中有不同的bug)。不过,这毕竟是个开端。对于许多应用问题来说,可移植性比花枝招展的用户界面更加重要。而且这些应用程序从Java的早期版本中获益匪浅。现在,用户界面工具箱已经完全被重写了,不再依赖于主机的用户接口。现在的Java版本比早期版本更加稳定,更加吸引人。

1.2.8 解释型

Java解释器可以在任何移植了解释器的机器上执行Java字节码。由于链接是一个更加增量且简便的过程,所以开发过程也变得更加快捷,更加具有探索性。

增量链接有其优势,但给开发过程带来的好处显然是言过其实了。在任何情况下,都会觉得Java开发工具的速度相当慢。如果习惯于经典的Microsoft Visual C++环境的速度,就会对Java开发环境的性能感到失望。(但是,Visual Studio的当前版本不像经典的环境那样快捷。无论用什么语言编写程序,都需要向老板申请一台速度更快的计算机,以便运行最新的开发环境。)

1.2.9 高性能

尽管对解释后的字节码性能已经比较满意,但在有些情况下却需要更加高效的性能。字节码可以(在运行时刻)被快速地翻译成运行该应用程序的特定CPU的机器码。

如果使用解释器执行字节码,根本就不可能用术语“高性能”。然而,在许多平台上,还有另一种编译形式,这就是即时编译器(JIT编译器)。它的基本工作方式是一次把字节码编译为本地代码,并将结果缓存起来。在需要的时候重新调用。由于这种方式只需要进行一次解释,从而极大地提高了常用代码的运行速度。虽然,即时编译器仍然比真正的本地代码编译器慢一些,但是对某些程序来说,能够提高10倍乃至20倍的速度,而且几乎在任何情况下,都比解释器的速度快得多。这个技术始终在不断完善着,或许有一天它能够达到传统编译系统所无法匹敌的性能。

例如,即时编译器可以监视哪些代码被频繁地执行,并对其进行优化,以提高程序的运行速度。

1.2.10 多线程

多线程可以带来更好的交互响应和实时行为(behavior)。

如果曾经使用过其他语言编写多线程的应用程序,就会对Java多线程处理的便捷性惊叹不已。

只要操作系统支持,Java中的线程就可以利用多个处理器。在底层,主流平台的线程实现机制各不相同,Java并没有花费太大的力气对此实现平台无关性。在不同的机器上,只是调用多线程的代码完全相同;Java把多线程的实现交给了底层的操作系统或线程库来完成。(有关线程的详细内容将在卷II中介绍。)尽管如此,多线程的简单性是Java成为颇具魅力的服务器端开发语言的主要原因之一。

1.2.11 动态性

从各种角度看,Java与C或C++相比更加具有动态性。它能够适应不断发展的环境。

库中可以自由地添加新方法和实例变量,而对客户端却没有任何影响。在Java中找出运行时刻类型信息十分直观。

当需要将某些代码添加到正在运行的程序中时,动态性将是一个非常重要的特性。一个很好的例子是:从Internet上下载代码,然后在浏览器上运行。在Java 1.0中,不能直接地获取运行时类型信息,而Java的当前版本允许程序员知晓对象的结构和行为。这对于必须在运行时分析对的系统来说非常有用。这些系统有:Java GUI 构建器、智能调试器、可插入组件以及对象数据库。

Java与Internet

这里的思想很简单:用户将从Internet下载Java字节码,并在自己的机器上运行。在网页中运行的Java程序称为applet。为了使用applet,需要一个启用Java的Web浏览器来执行字节码。因为Sun公司只负责发放Java源代码的许可证,并坚持不允许对语言和基本类库的结构做出任何修改,因此,Java的applet应该可以运行在任何启用Java浏览器上。遗憾的是,实际情况并非如此。

各个版本的Netscape(网景浏览器)和Internet Explorer(IE浏览器)运行着不同版本的Java,其中有些早已过时。这种糟糕的情况导致更加难于利用Java最新版本来开发applet。为了摆脱这种局面,Sun开发了Java插件。这就使得Netscape和Internet Explorer都可以利用最新的Java运行时环境(参看第10章)。

用户下载一个applet 就如同在网页中嵌入一幅图片。applet成为了页面的一部分。文本环绕着applet所占据的空间周围。关键一点是图片为活动的。它可以对用户命令做出响应,改变外观,在运行它的计算机与提供它的计算机之间传递数据。

图1-1展示了一个很好的动态网页的实例,applet显示了分子结构,这将需要相当复杂的计算。在这个网页中,可以利用鼠标进行旋转,调整焦距等操作,以便能够更好地理解分子结构。用静态网页将无法实现这种直接操作,而applet却可以达到此目的。(可以在forge.net上找到该applet。)

可以借助applet在网页上增加按钮和输入框。但是,通过拨号连接下载这样的applet速度相当慢。除此之外,还可以使用Dynamic HTML、HTML表单和某种脚本语言(如JavaScript)完成这类操作。当然,早期的applet主要用于动画,如大家熟悉的旋转球、跳动的卡通字符、疯狂文字等都是用applet实现的。然而,GIF也可以实现动画效果。因此,applet不是用来设计普通网页的,而是用来实现具有丰富交互性的网页的。

由于浏览器相互不兼容,而且在低速连接网络上下载applet代码的不便性,所以它在Internet网页上并没有获得巨大的成功。在企业内部网上,情况则完全不同。在这里根本不存在带宽问题,所以applet的下载时间也无需考虑。并且,在企业内部网上,可以控制浏览器的类型,或者统一地使用Java插件。这样一来,雇员在每次使用时不可能把网上发布的程序放错地方,或者进行错误的配置,系统管理员也不必忙于为客户机上的代码进行升级。许多公司已经开发了一些程序,如库存检查、假期计划、旅行报销等,它们都是以浏览器作为发布平台的applet。

在编写这个版本的时候,Java开发的重心已经从客户机端开发转移到服务器端开发。特别是,应用服务器可以使用Java虚拟机的监测能力来执行自动负载平衡、数据库连接池、对象同步、安全关机与重新启动以及其他的服务(这些服务对于可伸缩的服务器应用来说是需要的,但众所周知,正确地实现却是相当困难的)。因此,应用程序员宁愿购买它们,也不愿自己创建这些复杂的机制。这样做将可以提高程序员的编程效率,使程序员的注意力集中到核心功能和程序的业务逻辑上,而不必为服务器的性能操心。

1.4 Java发展简史

这一节将介绍Java的发展简史。这些参考资料来源于多方面的出版物(最重要的是SunWorld的在线杂志1995年7月对Java创建者的专访)。

Java的历史要追溯到1991年,由Patrick Naughton及其伙伴James Gosling(一个全能的计算机奇才)带领的Sun公司的工程师小组想要设计一种小型的计算机语言主要用于像有线电视转换盒这类的消费设备。由于这些消费设备的处理能力和内存都很有限,所以语言必须非常小且能够生成非常紧凑的代码。另外,由于不同的厂商会选择不同的中央处理器(CPU),因此,该语言的关键是不能与任何特定的体系结构捆绑在一起。这个项目被命名为“Green”。

代码应该短小、紧凑且与平台无关,这些要求促使开发团队联想起很早以前的一种模型,某些Pascal的实现曾经在早期的PC上尝试过这种模型。以Pascal的发明者Niklaus Wirth为先驱,率先设计出一种为假想的机器生成中间代码的可移植语言。(假想的机器被称为虚拟机—Java虚拟机即JVM的命名由此而来。)这种中间代码可以应用于所有已经正确安装解释器的机器上。

Green项目工程师也使用了虚拟机,从而解决了课题中的主要问题。

不过,Sun公司的人都有UNIX的背景。因此,所开发的语言以C++为基础,而不是Pascal。

特别是这种语言是面向对象的,而不是面向过程的。就像Gosling在专访中谈到的:“毕竟,语言只是实现目标的工具,而不是目标本身。”Gosling把这种语言称为“Oak”(这么起名的原因大概是因为他非常喜欢Sun公司办公室外的橡树)。Sun公司的人后来发现Oak是一种已有的计算机语言的名字,于是将其改名为Java。事实证明这是一种极好的选择。

1992年,Green项目发布了它的第一个产品,称之为“*7”。该产品具有非常智能的远程控制(其能力相当于长6英寸 、宽4英寸、高4英寸的SPARC工作站)。遗憾的是,Sun公司对生产这个产品并不感兴趣,Green项目组的人员必须找出其他的方法来把他们的技术推向市场。然而,没有一个标准消费品电子公司对此感兴趣。于是,Green项目组竞标了一个提供视频点播等新型服务的有线电视盒的项目,但没有成功。(有趣的是,得到这个项目的公司的领导恰恰是开创Netscape公司的Jim Clark。Netscape公司后来对Java的成功给予了很大的帮助。)

Green项目(这时换了一个新名字—“First Person公司”)花费了1993年一整年以及1994年的上半年,一直在苦苦寻求购买其技术者。然而,一个也没有找到。(Patrick Naughton,项目组的创立人之一,也是此项目营销工作收尾的人,声称为了销售这项技术,他们累计飞行了300 000英里 。)1994年First Person公司解散了。

当这一切在Sun公司中继续进行着的时候,Internet的万维网也日渐发展壮大。Web 的关键是把超文本页面转换到屏幕上的浏览器。1994年大多数人都在使用Mosaic,这是1993年出自伊利诺斯大学超级计算中心的非商业化的Web浏览器。(Mosaic的一部分是由Marc Andreessen编写的。

当时,他作为一名参加一个半工半读项目的本科生,编写了这个软件,每小时的薪水只有6.85美元。他后来成为了Netscape公司的创始人之一和技术总监,可谓名利双收。)

在接受SunWorld采访的时候,Gosling 说在1994年中期,Java语言的开发者意识到:“我们能够建立一个最酷的浏览器。这是客户机/服务器主流模型所需要的较为困难的几件事情之一,现在我们有了体系结构中立、实时、可靠、安全,这些问题在工作站环境并没有这么重要,所以,我们决定开发浏览器。”

实际的浏览器是由Patrick Naughton和Jonathan Payne创建的,并演化成了HotJava浏览器。为了炫耀Java语言强大的功能,HotJava浏览器采用Java编写。但是,设计者也非常清楚现在称其为applet的威力,因而,他们让HotJava浏览器具有执行网页中内嵌代码的能力。这一“技术印证”在1995年5月23日的SunWorld上得以展示,同时引发了人们沿续至今的对Java的狂热追逐。

1996年初,Sun发布了Java的第1版。人们很快地意识到Java 1.0不能用来进行真正的应用开发。的确,可以使用Java 1.0来实现在画布上随机跳动的nervous文本applet,但它却没有提供打印功能。坦率地讲,Java 1.0的确没有为其黄金时期的到来做好准备。后来的Java 1.1弥补了其中的大多部分明显的缺陷,大大改进了反映能力,并为GUI编程增加了新的事件处理模型。尽管它仍然具有很大的局限性。

1998年JavaOne会议的头号新闻就是发布Java 1.2。该版本取代了早期玩具式的GUI,并且它的图形工具箱更加精细且具有可伸缩性,更加接近“一次编写,随处运行”的承诺。在1998年12月Java 1.2发布三天之后,Sun公司市场部将其名称改为更加吸引人的“Java 2标准版软件开发工具箱1.2版。”

除了“标准版”之外,还推出了两个其他的版本:一个是用于手机等嵌入式设备的“微型版”;另一个是用于服务器端处理的“企业版”。本书主要讲述标准版。

标准版的1.3和1.4版本对最初的Java 2版本给予了某些改进,扩展了标准类库,提高了系统性能。当然,还修正了一些bug。在此期间,Java applet采用低调姿态,并淡化了客户机端的应用,但却成为服务器端应用的首选平台。

5.0版是自1.1版以来第一个对Java语言做出重大改进的版本(这一版本原来被命名为1.5版,在2004年的JavaOne会议之后,版本数字升至5.0)。经历多年的研究,这个版本添加了泛型类型(generic type)(类似于C++的模板),其挑战性在于添加这一特性并无需对虚拟机做出任何修改。另外,还有几个来源于C#的很有用的语言特性:“for each”循环、自动打包和元数据。语言的修改总会引起兼容性的问题,然而,这几个新的语言特性如此地诱人,它们必定会被程序设计人员所接受。表1-1展示了Java语言的发展过程。

表1-2展示了这些年来Java类库的扩展情况。可以看到,应用程序编程接口(API)有了惊人的扩展

1.5 关于Java的常见误解

在结束本章之前,列出了一些关于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#还是保持了一些好的特性,其中最重要的是安全性和平台无关性。人们普遍认为,C#最大的优势是其优良的开发环境。如果再能够与Windows捆绑在一起,就更加具有现实意义了。但是,从广告来判定,Java仍然是大多数开发者选择的语言。

7)Java有专利,应该避免使用。

每个人都需要为这个问题做出决定。有时候会因为Java的某些问题而感到沮丧,并希望能够拥有一个完全开放的源代码的团队给予救助方案。然而,情况没有这么简单。

尽管Sun公司最终控制着Java,但是他们通过“Java Community Process”已经与许多其他的公司联手进行语言修订版的开发及新类库的设计。虚拟机和类库的源代码都可以免费获取,但是只能够查阅,而不能修改,也不能再发布。

想一想开放源代码的那些语言,其实很难说清楚这样做是否更好。最为流行的是“LAMP”(Linux、Apache、MySQL和Perl/PHP/Python)中的三个“P”。这些语言固然有它们的好处,但同时它们混乱的版本变化、有限的类库和开发工具的匮乏也带来了一定的困扰。

另一方面,C++和C #已经独立于厂商的标准协会标准化。我们认为这一过程比JavaCommunity Process更加透明。然而,结果并不像想象的那样有用。仅仅标准化语言和基类库是不够的。对于实际的程序设计来说,很快会超出字符串、集合和文件的处理范围。对于C#,微软一再重申:他们将保持大部分的类库不做标准化处理。

或许未来的Java会采用开放源代码方式。但是,就此而言,许多人都相信Sun公司是Java最可信赖的管理员。

8)Java是解释型的,因此对于正式的应用程序而言太慢了。

早期的Java是解释型的。现在除了像手机这样的“微型”平台之外,Java虚拟机使用了即时编译器,因此采用Java编写的“热点”代码其运行速度与C++相当。

Java有一些C++没有的且与虚拟机无关的额外开销。垃圾回收会比手工内存管理稍微慢一些,并且实现同样的功能,Java程序需要的内存量要比C++程序大。程序启动可能也会慢一些,特别是大型的程序。另外,Java GUI要比本地的GUI慢一些,因为它们采用与平台无关的方式绘制图形。人们抱怨Java比C++慢已经有好多年了。但是,今天的计算机比人们发出抱怨的时候已经快了很多很多。一个慢的Java程序与几年前相当快的C++程序相比还是要快一些的。就这一点来说,那些抱怨听起来像狐狸抱怨葡萄酸,并且一些诽谤者已经转过来攻击Java用户界面不漂亮而不是攻击速度慢了。

9)所有的Java程序都是在网页中运行的。

所有的Java applet都是在网页浏览器中运行的。这也恰恰是applet的定义,即一种在网页中运行的Java程序。同时,也完全可以编写一个独立的、不依赖于Web浏览器运行的Java程序,并且十分有用。这些程序(通常称为应用程序)是完全可移植的。把代码移到另一台机器上直接运行就行了。由于Java与不够成熟的C++相比更加便利、出错的可能性更小,因而对于程序设计来说,可谓一种上好的选择。在使用JDBC(请参看卷II)这类的数据库存取工具时,Java语言就更是责无旁贷了。毫无疑问,Java是学习程序设计的首选语言。

本书的大多数程序都是独立的程序。applet诚然有趣,但是独立的Java程序在实践中更加重要,也更加有用。

10)Java程序是主要的安全风险。

早期的Java,有过关于安全系统失效的报道,曾经引起过公众的哗然。大多数安全问题都存在于Java的特定浏览器中。研究人员将这视为一种挑战,其含义是努力找出Java的漏洞,对applet安全模型的强度和复杂度发起挑战。随后,人们很快就解决了引发问题的所有技术因素。

据人们所知,所有的实用系统都妥协过。想想看:毫不夸张地说,有数百万种病毒攻击着Windows的可执行文件和Word宏,这给系统造成了巨大的损害,但却很少有人批评被攻击平台的脆弱。同样,Internet Explorer中的ActiveX机制始终作为被攻击的目标,但由于阻止这种攻击非常简单,所以人们也就懒得将它们公布于众了。

有些系统管理员在公司的浏览器中禁用Java,却允许其用户下载可执行文件、ActiveX 控件和Word文档。这是多么荒唐可笑啊!通常,不友好的Java applet的袭击的风险大约相当于因飞机失事而遇难的风险;而打开Word文档遭到袭击的风险则相当于步行横穿繁忙的高速公路而遇难的风险。

11)JavaScript是Java的简易版。

JavaScript是一种在网页中使用的脚本语言,它是由Netscape发明的,原来的名字叫做LiveScript。JavaScript 的语法类似Java,除此之外,两者无任何关系(当然,名字有些相像)。

JavaScript的一个子集已经被标准化为ECMA-262,但在实际工作中,使用的扩展部分没有被标准化,从而导致编写出能够同时运行于Netscape和Internet Explorer的JavaScript代码必定受挫。

12)使用Java可以用价值500美元的Internet设备取代电脑。

当Java刚刚发布的时候,一些人打赌:肯定会有这样的好事情发生。从本书的第1版开始就已经认定“家庭用户将会放弃功能强大且便利的桌面系统,而使用没有本地存储的网络设备”是一种荒谬的想法。我们发现基于Java的网络计算机对于利用“零管理”来降低计算机所有者的商业成本来说是一种很好的选择。即便如此,这种好事也没有发生。

从另一个方面来说,Java已经广泛地用在手机上。我们必须承认还没有看到一个运行在手机上的Java应用程序是必不可少的。但是,常见的游戏和屏幕保护程序在许多市场上销售得很好。

觉得本文不错的话,可以转发关注小编,之后持续更新干货文章~~

标签: #java旅游项目的简介