《Java 7程序设计入门经典》一1.4 Java语言

1.4 Java语言

本书使用Java语言来讲解编程的基础知识。虽然其他编程语言也可以用来达到此目的,但是由于以下两个原因,本书选择了Java:首先,它是世界上使用最广泛的计算机语言之一。所以从实际的观点看,它是绝佳的学习语言。其次,它设计和实现了一些特性,这些特性使得对编程基础知识的介绍变得简单。
但是还有第三个原因。Java展现了现代编程的许多特点。对Java的理解可以使你像专业程序员一样看待和思考编程工作。它是这个时代定义的语言之一。
计算机语言演进是一个正在进行的历史过程,而Java是其中的一个环节。它既从丰富的历史积淀中继承到其最佳元素,又因其独一无二的地位激发出许多创新概念。本书的剩余部分将在描述Java的实用要点的同时,探究其创造的原因与使其成为现在这个样子的驱动力,并考查它从前人所继承来的宝贵财富。

1.4.1 Java的起源

Java由Sun Microsystems的James Gosling等人于1991年构思而成。最初,这种语言称为“Oak”。在1995年,它重命名为“Java”。尽管Java如今不可避免地与网络环境联系在一起,但是Java诞生的原动力却不是互联网。其动力源于需要一种与平台无关的语言,由它创建的软件要能嵌入进众多消费电子设备中(如微波炉、遥控器等)。也许你已猜到,不同种类的CPU均可用做消费电子设备的控制器。但麻烦的是,在当时,几乎所有的计算机语言设计成只能编译成某种特定CPU的机器指令。例如,另外一种语言C++就是如此,它在当时也十分流行(现在也很流行)。
尽管有可能针对任意一种CPU编译C++程序,但这要求有为那种CPU设计的完整的C++编译器。这是因为C++通常编译成由CPU直接运行的机器指令。然而,创建编译器代价高昂,费时众多。为了找到更好的解决方案,Gosling等人开始致力于开发一种轻量级、跨平台的语言,能够产生在不同环境各种CPU下运行的代码。它们的努力最终导致了Java的诞生。
在详细开发Java的同时,另一股更加重要的力量同时诞生,在未来Java的发展中起到了至关重要的作用。这股力量即是万维网(World Wide Web)。如果Web不与Java的实现几乎同时形成,Java也许将还是一种有用但仅仅用于消费电子的不知名编程语言。由于Web需要可移植的程序,随着Web的兴起,Java也跃至计算机语言设计的风口浪尖。进一步的原因在于,互联网由各种计算机组成,它们使用不同种类的CPU和操作系统。人们非常希望拥有让各种各样的计算机运行相同程序的方法。
直到1993年,Java设计团队的成员发现:为嵌入式控制器创建代码时经常遇到的可移植性问题在试图为互联网创建代码时也常常遇到。这个现实使得Java的重心由消费电子转移到互联网编程上。所以,尽管Java原本起源于开发与架构无关的编程语言的需求,但是其实是互联网最终促使了Java的大规模成功。
值得注意的是,Java与两种较早的程序设计语言直接相关。这两种语言是C语言和C++语言。Java从C语言继承语法。其对象模型由C++改进而来。Java与C和C++的关系十分重要。在创建Java时,许多编程人员熟悉C和C++的语法。这使得C和C++程序员学习Java更加容易。反过来说,也使得Java程序员学习C和C++语言更加容易。更进一步,Java设计人员不需要在许多已经做过的事情上重新白费力气。它们只需要移植、改善和充实那些已经成功运用的程序模板。
由于Java和C++的相似之处,特别是在于面向对象编程的相似之处,我们有可能会简单地将Java视作互联网版的C++。但是这也许会带来误解。Java有着重要的不同。尽管Java受C++的影响,但它不是增强版的C++。例如,它不与C++前向或后向兼容。另外,Java也无意替代C++。Java用来解决特定的一些问题,C++用来解决另一些特定的问题。两者都会在许多年内共存。

1.4.2 Java对互联网的贡献

互联网帮助Java跃升至编程的前沿,而Java反过来又对互联网有深远的影响。Java不但简化了互联网编程的一般过程,还创造了一种新的网络程序形式,称为applet(小应用程序)。在当时,它改变了网络世界对内容的认识。Java也专注于解决与互联网有关的缺点:可移植性和安全性。下文将更详细地介绍这两点。

1.4.3 Java applet

applet是一种特殊的Java程序,它设计于在互联网上传输,然后在与Java兼容的网络浏览器上自动执行。此外,applet可以按需下载。如果用户点击了含有applet的链接,applet将自动下载并在浏览器上运行。applet是为小型程序所设计的。它们一般用来显示服务器提供的数据、处理用户输入、提供在本地执行的(而不是在服务器上执行的)简单功能(如贷款计算器等)。本质上,applet允许我们将一些功能从服务器转移到客户端上。它使得更多对象能够在网络空间中自由传送。于是,applet的诞生改变了互联网编程。
尽管applet令人满意,但它们也在安全性和可移植性领域面临着挑战。显然,应该阻止从客户机上自动下载和执行的程序做坏事。同时,它必须能够在各种不同的环境和不同的操作系统下运行。你将会看到,Java以一种有效而优雅的方式解决了这些问题。下文将逐一更详细地介绍这些问题。

1.4.4 安全性

你很可能会意识到下载每一个看似正常的程序都伴随着风险,因为下载的代码可能包括病毒、木马或其他有害代码。问题的关键在于:倘若恶意代码能够非法访问系统资源,它就能带来损害。例如,病毒也许会通过搜索计算机的本地文件系统来收集私人信息,如信用卡号、银行账号、密码等。Java为了能使applet在客户机上安全下载和执行,必须阻止applet发起这样的攻击。
Java把applet限制在Java执行环境中,不允许其访问计算机的其他部分。这样就实现了保护功能。在后文将会说明这是怎样实现的。保证applet能够无害下载的能力和坚不可摧的安全性是Java最重要的特性之一。

1.4.5 可移植性

在互联网中,可移植性是一个主要因素。这是因为网络上连接了许多不同种类的计算机和操作系统。Java程序要想运行在几乎所有的连入互联网的计算机上,它就要有使程序在不同系统上执行的方法。例如,就applet而言,同一applet必须能够在不同的CPU、操作系统和浏览器上下载和执行。为不同的计算机准备不同版本的applet是不现实的,同样的代码必须在所有的计算机上工作。于是,就需要有一些生成可移植代码的方法。值得高兴的是,帮助实现安全性的方法同样也能实现可移植性。

1.4.6 Java的解决方案:字节码

允许Java同时解决上述安全性和可移植性问题的关键是Java编译器并没有直接输出可执行的机器指令。与之相反,它输出字节码。字节码(bytecode)是一种高度优化的指令集,可由Java虚拟机(Java Virtual Machine,JVM)执行。实际上,JVM最初用来做字节码的解释器。由于JVM执行Java程序,因此它解决了与Web程序有关的主要可移植性和安全性问题。这就是Java能够解决网络应用主要问题的原因。
将Java程序编译为字节码使得程序更容易在不同的环境下运行,因为只有Java虚拟机需要在每个平台上实现。一旦在某个给定系统中有JVM,在其上就可以运行Java程序。尽管不同平台上JVM的实现细节并不相同,但是所有解释器都解释同一Java字节码。如果把Java程序编译成本地代码,同一程序的不同版本就会在连接互联网的不同CPU上运行。这当然不是一个可行的解决方案。于是,由JVM执行字节码是创建真正可移植性程序的最简单的方式。
由JVM执行Java程序也能帮助保证安全性。因为JVM掌握着控制权,所以它能包含程序,防止其在系统外产生副作用。Java语言的其他限制也增强了安全性。
一般情况下,用虚拟机运行程序会比运行编译成可执行机器指令的相同程序要慢。但是对于Java而言,这两者的差别并不巨大。因为字节码已高度优化,使用字节码使JVM能够运行的比想象中快得多。另外,也可以将字节码编译成机器指令以提升性能。这个编译过程是瞬时完成的,通过使用字节码的即时(Just-In-Time,JIT)编译器来实现。
JIT编译器是JVM的一部分。它根据需要选取字节码片段,将其实时编译成可执行代码。在此强调:JIT编译器并不一次性把整个Java程序编译成可执行代码。此外,JIT并不会编译所有的字节码序列。它只编译那些能通过编译获得好处的代码。甚至当动态编译字节码时,可移植性和安全性特性依然存在,因为JVM仍然控制着执行环境。
最后说明一点:JVM是Java运行时环境的一部分。Java运行时环境称为Java Runtime Environment,其缩写为JRE。
1.4.7 Java的演进
只有一小部分语言组成了编程最本质的部分。在这样的“精英团队”里,Java由于其快速性和广泛性鹤立鸡群。可以毫不夸张地说,由Sun Microsystems公布的Java 1.0的原始版本引发了编程的革命。Java不仅使Web变成一个高互动性的环境,它还为计算机语言设计树立了新标准。
多年以来,Java持续发展、演进,重新定义自己。不像那些缓慢支持新特性的其他语言,Java总是走在计算机语言开发的前沿。其原因之一在于创新的文化和Java周边的变化。于是,Java经过了多次升级,其中一些升级相对较小,另一些较重要。
在本书写作时,Java的目前版本称为Java SE 7,其附带的Java开发工具包(Java Development Kit)称为JDK 7。Java SE 7中的“SE”是标准版(Standard Edition)的意思。Java SE 7是Oracle收购Sun Microsystems后的第一个主要版本。Java SE 7包含许多新特性。其中一些新特性将在本书中指出。

时间: 2024-11-03 02:36:28

《Java 7程序设计入门经典》一1.4 Java语言的相关文章

《Java 7程序设计入门经典》一2.2 Java的基本数据类型

2.2 Java的基本数据类型 Java包括两大类内置的数据类型:面向对象的数据类型和非面向对象的数据类型.Java中面向对象的数据类型由类定义,在后面会有类的介绍.但是,Java的核心是8种基本数据类型(也称元素数据类型或简单数据类型),如表2-1所示.这里使用"基本"(primitive)这个词来表示,从面向对象的角度看,这些类型不是对象,而是普通的二进制值.出于有效性,这些基本数据类型不是对象. Java为每个基本数据类型严格指定范围和行为.所有Java虚拟机都必须支持这些.因为

《Java 7程序设计入门经典》一第1章 Java编程基础 1.0

第1章 Java编程基础 本章要点 了解计算机的主要组成: 理解位.字节和二进制计数系统: 了解程序的两种形式: 了解Java的历史和设计理念: 理解面向对象编程的基本原则: 创建.编译并运行一个简单的Java程序: 使用变量: 使用if和for控制语句: 创建代码块: 理解语句是如何放置.缩进和结束的: 了解Java关键字: 理解Java标识符的规则. 仅仅在近十年的时间里,编程就从一门晦涩难懂的学科转变为现代社会不可或缺的一部分,从事编程工作的人也从少变多.其发展原因容易理解.如果仅仅用一个

《Java 7程序设计入门经典》一1.6 Java开发工具包

1.6 Java开发工具包 既然上面已经讨论了Java的历史和理论基础,现在就开始编写Java程序吧.但是,在编译和运行程序前,需要在计算机上安装Java开发工具包(Java Development Kit,JDK).下面会介绍如何在计算机上访问JDK. 注意:如果想在计算机上安装JDK,可以在www.oracle.com/technetwork/java/javase/downloads/index.html下载JDK.请根据计算机的种类执行安装流程.在安装JDK后,就可以编译和运行程序. J

《Java 7程序设计入门经典》一1.7 第一个简单的程序

1.7 第一个简单的程序 编译和运行一个简短的示例程序是开始介绍Java的诸多关键元素的最佳方法.我们将使用以下代码: 下面将运行以下三步: 1)输入程序: 2)编译程序: 3)运行程序. 1.7.1 输入程序 创建一个程序的第一步就是将源代码输入到计算机中.正如前面所介绍的那样,程序的源代码是程序可由人类阅读的形式.必须使用文本编辑器,而不是字处理软件将源代码输入到计算机中.字处理软件一般不仅存储文本信息,还存储格式信息.格式信息会使Java编译器困惑.源代码必须只包含文本.如果使用IDE,则

《Java 7程序设计入门经典》一2.1 为什么数据类型很重要

2.1 为什么数据类型很重要 在Java中,数据类型特别重要,因为Java是一门强类型语言.这意味着,编译器会对所有运算符的类型进行类型检查,以检查类型兼容性.非法操作不会完成编译.于是,强类型检查帮助避免错误,增强可读性.为了使强类型检查能够工作,所有的变量.表达式和值都有类型.例如,这里没有"无类型"变量的概念.另外,值的类型决定了其上运行的操作.在一种类型上允许的操作也许不能在另一种类型上运行.

《Java 7程序设计入门经典》一2.16 习题

2.16 习题 1.为什么Java严格指定基本数据类型的范围和行为? 2.什么是Java的字符类型?它与其他语言的字符类型有什么区别? 3.判断正误:因为非零值是真值,所以boolean值可以是任何值. 4.给定输出: 仅使用一个字符串,写出利用println()方法产生这个输出的方法. 5.下面代码片段有什么错误? 6.请解释递增运算符前缀形式和后缀形式的区别. 7.请举例说明带有"短路"功能的AND运算如何用来防止除以0带来的错误. 8.在表达式中,byte类型和short类型会提

《Java 7程序设计入门经典》一导读

前 言 本书通过Java语言来讲解编程的基础知识.该书假设读者之前没有任何编程经验.本书首先介绍最基本的知识,例如,如何编译和运行Java程序:接着,讨论关键字.运算符和一些形成Java语言的构造.本书还会涉及Java的应用编程接口(Application Programming Interface,API)库.其中,包括Swing框架,它可以用来创建具有图形用户界面(Graphical User Interface,GUI)的程序.还包括集合框架,它可以用来存储对象集合.简而言之,本书旨在对J

《Java 7程序设计入门经典》一3.1 从键盘输入字符

3.1 从键盘输入字符 到目前为止,本书中的示例程序都向用户显示信息,但不从用户接收信息.于是,只使用了控制台输出,没有使用控制台输入(即键盘输入).主要原因在于,许多Java输入需要依赖和使用本书还未讲到的特性.这些特性在后面才会提及.另外,在真实情况下,许多Java程序和applet是图形界面或是窗口界面的,而不是控制台的.因此,本书的例子很少使用控制台输入.但是,有一种控制台输入相对容易使用,那就是从键盘读入字符.因为本章有许多需要用到这个特性的例子,所以在这里讨论它们. 我们将用Syst

《Java 7程序设计入门经典》一3.17 习题

3.17 习题 1.写一个程序,从键盘读入字符,直到接收到一个英文句号(.).程序需要计算输入的空格的个数.在程序结束时输出总结果. 2.请写出if-else-if梯队的一般形式. 3.针对下列程序 其中最后的else子句与哪个if配对? 4.写一个for循环语句,从1000计数到0,步进值为-2. 5.下面的代码片段是否有效? 6.请解释break语句的用途(包括其两种形式.) 7.在下面的代码片段中,break语句执行后会显示什么? 8.下面程序片段的输出是什么? 9.for循环中的迭代表达