第3章 Java之旅
本章介绍如下内容:
Java的历史;
使用Java语言的好处;
几个Java示例;
面向对象编程的解释。
在进一步探索Java编程之前,有必要更详细地了解Java这门编程语言,以及当今的Java程序员都在做些什么。尽管Java已经不像最初那样局限于Web浏览器编程,但是我们仍然可以找出一些如何将Java用于Web的有趣示例。
本章将访问一些包含Java程序的网站,并讨论该语言的历史和发展过程。
要开始这次Java之旅,必须有能够处理Java程序的Web浏览器。
启动你选择的浏览器,穿上舒适的衣服,准备开始Java之旅。因为不需要离开房间,所以你不会体验到观光旅游带来的那种简单的快乐,比如粗心大意的出租车司机、异国他乡的美食、风俗人情等。但是,这也有好的一面:不需要被强迫进行安检、不需要护照,而且也没有蒙特祖玛(注:一款游戏的名称)式的报复。
3.1 第一站:Oracle
Java之旅的第一站始于Oracle公司创建的www.java.com,Oracle公司开发了Java语言(注:应该是Sun公司开发了Java语言,鉴于Sun公司已经被Oracle公司收购,因此说Oracle公司开发了Java语言也并无不可)。
作为Web页面的一部分运行的Java程序称作applet。在网页中放置applet就像放置其他元素一样:使用标记标语言HTML指定在哪里显示程序、它多大以及运行时程序做什么。Java还以另外两种方式增强了 Web 页面:用 Java 语言编写的桌面程序(desktop program)可以从Web 浏览器中启动;Web 服务器运行的 Java servlets可以分发Web 应用程序。
Oracle的Java部门负责Java语言和相关软件的开发。Java.com上的“The Java in Action”区域显示了Java是如何应用在Web站点、Android手机以及其他平台上的。如今有数以百万计的设备运行的是以Java语言编写的程序。图3.1显示的是一款使用Java语言编写的大型多人在线游戏RuneScape。通过使用任何Web浏览器来访问www.runescape.com网站,即可免费玩这款游戏。
图3.1 由Java语言编写的在线游戏Rune Scape
Java.com网站为读者提供了一个学习Java使用方式的地方。Oracle还为Java开发人员提供了一个更为技术性的Web站点,其网址为http://www.oracle.com/technetwork/java。读者可以在该站点上找到最新版本的 NetBeans、Java Development Kit,以及其他编程资源。
Java历史简要回顾
当Sun公司创造了Java语言时,当时的公司主管之一Bill Joy将该语言称为“15年努力的成果,它是更好、更可靠的计算机编程语言”。Java的创建过程可能比他说的还要复杂一些。
Java 是在 1990 年由 Sun 公司的工程师 James Gosling 开发的,它可以作为智能设备(如交互式电视、无所不能的烤箱、具备人工智能的 SkyNet 军用卫星等)的编程语言。Gosling对其使用C++编写的程序感到失望,他灵机一动,决定躲在办公室开发一种更适合其需求的新语言。
注意:
读者可能已经听说过Java是Just Another Vague Acronym(只是另外一种模糊的缩写)的首字母缩写,或许还听说过Java是以Gosling最喜欢的咖啡命名的。其实,Java语言的命名没有任何秘密,也不是出于对咖啡这种饮品的热爱。之所以选择以Java来命名,其原因与喜剧演员Jerry Seinfeld喜欢说salsa这个单词一样:它听起来很酷。
Gosling最初将这种语言命名为Oak,灵感来自Gosling从办公室的窗户向外看到的一棵橡树。当时交互式电视已成为一个具有数百万美元产值的行业,该语言是Sun公司进入该行业的发展策略的一部分。可到今天这些都没成为现实(如今 TiVo、WebTV 等都在向游戏领域进军),但Gosling发明的新语言却发生了重大变化。正当Sun公司准备放弃Oak开发小组,将其成员分散到公司其他部门时,Web开始流行起来。
正是阴差阳错,使Gosling发明的语言适合家用电器的特性也使其适用于Web。Gosling的团队设计了能够让程序在Web页面安全运行的方法,而且为了与该语言的新用途相匹配,为之选了一个易于记忆的名字:Java。
虽然Java还可以做很多其他的事情,但Web为其提供了吸引全球注意力的舞台。当Java语言成为主流语言时,如果你没听过Java,那一定是离群索居或在从事长期的轨道任务。
Java语言总共有如下8个主要版本。
1995 年秋发布的 Java 1.0:最初的 Java 版本。
1997 年春发布的 Java 1.1:对 Java 语言的升级,在对图形用户界面的支持上有了很大改进。
1998 年夏发布的 Java 2 1.2 版:对 Java 语言进行了巨大的扩展,使其成为通用的编程语言。
2000 年秋发布的 Java 2 1.3 版:增强了多媒体功能。
2002 年春发布的 Java 2 1.4 版:一次重大升级,增强了对 Internet、XML 功能和文本处理的支持。
2004 年春发布的 Java 2第 5 版:提供了更强的可靠性和自动数据转换功能。
2006 年冬发布的 Java 6:对内置的数据库和 Web 服务的支持进行了升级。
2011 年夏发布的 Java 7:Java 的最新版本,对核心语言、内存管理进行了改进,同时增加了Nimbus图形用户界面。
3.2 去 Java学校
Web为教育工作者和学生提供了众多的资源。由于与标准Web页面相比,Java程序能够提供更多的交互体验,因此有些程序员使用Java编写用于Internet的学习程序。
读者可访问 http://www.cs.ubc.ca/~van/sssjava 来看这样的一个示例。通过访问该网站,将会看到由 Michiel van de Panne(英国哥伦比亚大学计算机科学专业的教授)开发的跳台滑雪模拟器。该程序使用Java来演示当滑雪人员从不同的斜坡进行跳台滑雪时,其基于物理的动画。通过将鼠标向8个方向移动,可以控制滑雪人员的动作,而且这8个方向都会对滑雪的成功与否造成影响。图 3.2 显示的是在我的虚拟滑雪人员遇到阻挡之前,一次成功的滑雪尝试。
尽管有大量的教育程序可运行在不同的操作系统上,但使这种程序脱颖而出的是其可用性(availability)。模拟器是直接在Web页面上运行的,它和大多数桌面软件不同,不需要专门安装,也不局限于特定的操作系统。只要计算机中安装了 JVM,那么就可以运行 Java程序。
图3.2 使用 Java 语言编写的跳台滑雪模拟器可以提供交互体验
浏览器载入的JVM与第2章中运行Saluton程序使用的JVM相同。浏览器的JVM只能运行Web页面中的Java程序,而不能处理位于其他地方(比如文件夹)的程序。
第一款支持Java的浏览器需要有内置的JVM。如今,浏览器是否支持Java则依赖于是否有Java插件。Java插件是一种对浏览器功能进行增强了的JVM。
提示:
Oracle 将 Java 插件包含在 JDK 和其他产品中,所以你的计算机中可能已经安装了 Java 插件。要检查你的计算机是否安装了 Java,可以访问www.java.com 网站,该网站上的“Do I Have Java?”链接可以检测到是否安装了Java。
诸如跳台滑雪这样的 Java 程序不需要针对特定的计算机系统进行编写,由于类似于Windows这样的操作系统也称为平台,因此Java的这种优势称之为平台独立性。Java可以在多种计算机系统上运行。最初,Java的开发者们之所以认为它必须支持多种平台,是因为要将其用于各种家用电器和其他电子设备。
用户可将使用 Java 语言编写的程序运行在各种计算机系统上,而且不需要做任何额外的工作。在正常情况下,使用Java编写程序时,不需要为不同的操作系统和设备创建不同的版本。
3.3 在 JavaWorld 用午餐
通过前面的介绍,在读者对Java的兴趣应该逐渐浓厚起来。我们现在可在JavaWorld的网站吃午餐。JavaWorld是一本针对Java程序员的在线杂志,其网址为www.javaworld.com。
JavaWorld提供了“如何(how-to)”文章、与Java开发热点领域相关的新闻以及其他定期专题。以Web格式出版的一个优点是,可以演示与文章相关的Java程序。图3.3所示为一个“诗歌磁板”Java程序,是在描写如何创建该程序的文章中提供的。
图3.3 JavaWorld中一篇介绍如何创建“诗歌磁板”的文章包含程序示例
注意:
JavaWorld 上的内容有时会发生移动,但是在本书写作之时,可通过www.cadenhead.org/poetry网站直接访问这篇“诗歌磁板”文章。如果该页面不可用,则可使用站点的搜索引擎来查找关键词“poetry”。
JavaWorld发表了与Java语言及其发展相关的文章和评论。自Java语言面世以来,一个激烈争论的问题是该语言是否安全。
由于 Java 程序在网页中的运行方式,安全性至关重要。读者在本章尝试的 Java 程序将下载到你的计算机中。当程序下载完毕后,将在计算机上运行。
除非你认识很多人,否则你访问的大部分Web页面都是由陌生人发布的。从安全角度看,运行这些人的程序无异于将你的计算机借给别人使用。如果 Java 语言不能防范这种滥用行为,Java 程序将把病毒引入到你的计算机系统,删除文件、播放 Justin Bieber 的歌曲,以及执行其他可怕的事情。Java提供几种不同类型的安全措施,确保运行在Web页面中的Java程序是安全的。
对通过Web运行的Java程序进行下列限制来确保安全:
任何程序都不能打开、读写或删除用户系统中的文件;
任何程序都不能运行用户系统中的其他程序;
程序创建的所有窗口都明确标识为Java窗口;
除其所属的网站,程序不能连接到其他网站;
对所有程序进行验证,确保编译后未被修改。
尽管没有任何保证,但是Java语言已经证明可以在Web页面中安全使用。
Java还为在浏览器中运行的程序提供了更灵活的安全策略。可以将某些公司和程序员指定为“可信的开发者”,从而在你的浏览器中运行他们的 Java程序,而不受正常的限制。
这种信任系统是通过使用具有数字签名的applet(可以明确地识别Java程序的作者)建立的。这些签名是与独立认证机构(如VeriSign)联合创建的。
如果读者曾经授权一个程序在浏览器(比如 IE 或 Google Chrome)中运行,也就相当于建立了信任与身份验证的系统。
尽管applet在今天仍然有用武之地,但是这几年发展起来的其他技术,比如Flash、Silver-light、HTML5等已经在基于Web页面的程序中崭露头角。Java在移动应用、服务器程序和桌面软件中的应用却越来越常见。
3.4 在 NASA仰望天穹
Java之旅的第一天下午将前往NASA——一家大量使用Java的美国政府机构。其中最流行的是SkyWatch,这是一个帮助天文学家观察轨道卫星的applet。通过访问www.cadenhead. org/nasa,你将自动被转接到NASA的SkyWatch站点,然后即可将该applet载入到浏览器中。
SkyWatch将8个不同卫星(也可以自行添加或移除卫星的数量)的当前位置和轨道叠加到世界地图上。图3.4中运行的applet显示了SEASAT-1卫星从牧夫星座到武仙星座的运动轨迹。
图3.4 NASA的SkyWatch applet可以监视轨道卫星的位置和路径,这对金属观鸟者来说是一个福音
这个 applet 可以不断重绘出轨道卫星在运行时的位置。这种实时更新是可以实现的,因为Java 语言是多线程的。多线程是计算机同时执行多项任务的一种方式;程序的一部分负责一项任务,另一部分负责另一项任务,两部分互不影响。在这种情况下,程序的每一部分称为一个线程。
在诸如SkyWatch这样的程序中,每一颗卫星都运行自己的线程。如果使用诸如Windows 7这样的操作系统,在同一时刻运行多个程序时,使用的就是这种行为。如果你在一个窗口中玩 Desktop Tower Defense 游戏,同时在另外一个窗口中查看公司销售报表,同时还给朋友打长途电话——恭喜你,你是多线程的。
3.5 回归正题
此时,读者可能会有这样的印象:Java主要在空间爱好者、诗人和滑雪人员中使用。Java之旅的下一站将展示一个Java的常规使用示例。
将Web浏览器指向JTicker站点,网站为www.jticker.com。
JTicker 的发布者,也就是 Stock Applets 公司,开发了在其他网站上可以显示商业新闻头条和股票行情的Java程序。图3.5所示为其滚动股票行情的一个演示版本。
不像其他股票分析程序那样,需要在每个要访问它的雇员的计算机上安装软件,通过使用 Java,Stock Applets 的雇员可以使用 Web 浏览器来访问这些程序。所有雇员所需要做的就是只需访问该公司的网站。
图3.5 Stock Applets开发的显示股票行情的Java程序
可以从不同的方式看待像这个applet的程序。一种方式是认为该程序就像物体——存在于现实中,占据一定的空间,并具备特定的功能。Java 使用的面向对象编程(将在第 10 章介绍)将计算机程序作为一组对象来创建。每个对象处理特定的工作,并且知道如何同其他对象交流。例如,股票行情程序可以有如下对象组成:
一个报价对象(quote object),它表示一个单独的股票报价;
一个组合对象(portfolio object),它用来存储特定股票的一组报价;
一个股票对象(ticker object),它显示一个组合(portfolio);
一个Internet对象、一个用户对象和众多其他的对象。
在这个模型下,股票行情软件一个集合,这个集合包含完成工作所需的所有对象。
OOP是一种功能强大的程序创建方法,让编写的程序更有用。看看股票行情软件,如果程序员想将其报价功能加入到其他软件中,报价对象不需要做任何修改就可以用于新程序中。
3.6 到 Java Boutique 去问路
这次 Java 程序的世界之旅一直都是由精通基于 Web 技术的难点和特点的专家引路,稍后读者将自己探索旅程,所以先停下来,前往对Java旅行者来说最好的向导那里看看,这就是 Java Boutique 网站,其网址为 http://www.developer.com/Java。
Java Boutique有齐全的Java程序目录以及与Java语言相关的编程资源。对程序员来说,本站点的最佳使用方式就是阅读那些提供了源代码的程序。这里所谓的“源代码”就是用来创建计算机程序的文本文件的别称。读者在第2章开发的Saluton.java文件就是一个源代码示例。
Java Boutique 主页上的 Source Code 链接列出了包含源代码的所有程序。
其中一个源代码可用的程序是 Aleksey Udovychenko 的 Absolute 游戏,这是一个空间视频游戏,你可以控制你的战舰炸出一条道路,然后穿过小行星带(见图3.6)。该游戏具有滚动的动画、图形、键盘控制和声音等特色。有关该游戏的详情,请访问 http://javaboutique. internet.com/Absolute。
图3.6 Absolute这款Java程序的源代码可以在 Java Boutique中找到
注意:
Gamelan 的 Java Applet评级服务(Java Applet Ratings Service,JARS)是www.jars.com上的一个基于浏览器的Java程序和其他资源的目录,它通常会包含与程序配套的源代码。Java语言只所以被世界各地数以千计的程序员所使用,部分原因是该语言比较简单。
整个Absolute程序的源代码只有700行出头。考虑到该程序的功能,代码行数已经非常小了。Java 包含了大量的类库,在编写程序时可以进行调用。Udovydchenko 调用了 Image类来显示小行星这样的图形,还调用了AudioClip类来播放激光枪发射和爆炸的声音。
设计Java 的目标之一就是要比C++易学,James Gosling 当时在他的智能家电项目中使用的就是C++。Java的很大一部分都是基于C++的,因此学习过使用C++语言编程的人学习起Java来也不困难。然而,C++中有些难以学习和难以正确使用的内容已经从Java中删除。
对首次学习编程的人来说,Java要比C++易学。有些语言是为了让经验丰富的程序员能够在程序中充分利用计算机功能而开发的。
这些语言比较简洁,而且包含编程老手很容易理解的其他特性。
Java并没有使用这些特性,而是使其成为尽可能简单的面向对象编程语言。创建Java语言的目的是易学、易调试和易于使用。Java还包括了大量增强的特性,从而使得能够与其他语言相抗衡。
3.7 在手机上运行 Java
这次旋风式 Java 之旅的最后一站是 Google Android手机。运行在 Android 上的每一个单独的程序都是使用Java开发的。这些应用程序扩展了手机的功能,并被称之为app(应用)。其中最流行的一个app是称之为“愤怒的小鸟”的游戏,如图3.7所示。
图3.7 愤怒的小鸟和其他Android app 是使用Java语言开发的
如果你对这款游戏还不了解,或者想深入了解这款游戏,请访问www.angrybirds.com(最好别去了解这款游戏。否则它会占用你一天、一周,甚至是一个月的时间——这要取决于你多么讨厌游戏中的那些猪!)
之所以将Android作为Java之旅的最后一站,是因为Android成为Java语言使用最为广阔的一个领域。在掌握了 Java 语言之后,你可以使用 Android 软件开发包(SDK),来开发自己的 app。Android SDK 是一款可以在 Windows、MacOS 和 Linux 上运行的免费编程套件。
如今大约有 250000 个 app 可以用于 Android 手机和运行移动操作系统的其他设备。第24章将会对其进行详细讲解。
3.8 总结
现在,Java之旅到此结束了,是时候收起你的行李,并准备开始Java编程了。
在接下来的21章中,你将会掌握Java语言的各种基本组件,学习如何使用面向对象编程的方式来创建对象,以完成任务,还将学习如何设计图形用户界面等内容。
3.9 问与答
问:为什么 Java applet 不再流行了?
答:当 Java 语言于 20 世纪 90 年代中期被发明时,大多数人学习该语言的目的是编写applet。当时Java是创建可在Web浏览器上运行的交互式程序的唯一方式。
多年以来,各种技术层出不穷。Macromedia Flash、Microsoft Silverlight,以及新发布的HTML5 Web 标准都提供了在 Web 页面上运行程序的方式。
由于applet在载入到浏览器中时较为费时,而且浏览器开发人员在支持新版本Java方面总是慢人一拍,applet逐渐式微。尽管后面又引入了Java插件来在浏览器中运行Java的当前版本,但是Java在那个时候已经远离了它的初衷,开始演变为一种复杂的通用编程语言。
3.10 测验
如果此刻你的大脑还没休息,请回答下面的问题以测试对本章内容的理解程度。
1.面向对象编程因何而得名?
a.程序由一组协同工作的对象组成。
b.由于难于掌握,人们经常反对(object)它。
c.它父母给起的名字。
2.下面哪项不属于Java安全性?
a.Web程序不能运行用户计算机上的程序。
b.总是验证程序作者的身份。
c.Java窗口都标识为Java窗口。
3.程序能同时处理多个任务的功能叫什么?
a.分裂性。
b.多文化性。
c.多线程。
1.a.它也被缩写为OOP。
2.b.Java程序员可以使用数字签名和诸如VeriSign等身份验证公司,但这不是必需的。
3.c.这也被称为多任务,但Java使用术语“多线程”,因为独立运行的程序部分被称为线程。
3.11 练习
打开行李前,读者可以通过下面的练习进一步探索本章的主题:
通过 Java Boutique 站点(http://javaboutique.internet.com)了解使用 Java 语言开发了哪些纸牌游戏;
访问 Oracle为 Java 用户开发的网站 www.java.com,然后单击“Do I Have Java?”链接。然后根据指令来查看你的计算机是否安装了 Java。如果有必要的话,可以下载并安装Java的最新版本。
要获悉每章末尾的练习答案,请访问本书的配套网站www.java24hours.com。