`
bulote
  • 浏览: 1310902 次
文章分类
社区版块
存档分类
最新评论

第1章 Java系统环境概述

 
阅读更多
第1章 Java系统环境概述
1.1
编程语言的发展
1.2
网络时代的编程语言——
Java
1.3 Java
的开发运行环境
1.4 Java
程序的运行步骤
第1章 Java系统环境概述
1.1
编程语言的发展
自从1946年第一台电子计算机问世以来,人们一直在探索着
自然语言与计算机语言之间的映射问题。我们知道,人类的任何
思维活动都是借助于人们所熟悉的某种自然语言进行的。若希望
借助计算机完成人类的一种思维活动,就需要把用自然语言表达
的东西转换成计算机能够理解和执行的形式语言,这便是编程语
言或程序设计语言。毫无疑问,电子计算机毕竟是一种机器,它
能够理解和执行的编程语言和自然语言之间存在着较大的差距,
这种差距被人们称作“语言的鸿沟”。这一鸿沟虽不可彻底消除,
但可以使其逐渐变窄。事实上,从计算机问世至今,各种编程语
言的发展变迁,其目的就是为了缩小这一鸿沟。图1.1展示了从机
器语言发展到面向对象的语言使“语言的鸿沟”逐渐缩小的情形。
第1章 Java系统环境概述
图1.1 语言的发展使鸿沟变窄
客观事物(问题域)
计算机(硬件)
语言的鸿沟
自然语言
面向对象的语言
非OO的高级语言
汇编语言
机器语言
第1章 Java系统环境概述
1.1.1
机器语言
电子计算机是一种机器,这种机器主要由电子元器件构成。
对于电子元器件来说,最容易表达的是电流的通/断,或电位的
高/低两种状态。因此,在电子计算机问世之初,人们首先想到
的是用“0”和“1”两种符号来代表电路的通和断两种状态,这便是
最早的编程语言——机器语言。
机器语言是计算机能够理解并直接执行的惟一语言。整个
语言只包含“0”和“1”两种符号。用机器语言编写的程序,无论是
它的指令、数据还是其存储地址,都是由二进制的“0”和“1”组成
的。这种语言离计算机最近,机器能够直接执行它。然而,由
“0”和“1”组成的二进制串没有丝毫的形象意义,因此,它离人类
的思维最远,“语言的鸿沟”最宽。用机器语言编写程序的效率最
低(代码生成率最高),但在编写程序时很容易发生错误。
第1章 Java系统环境概述
1.1.2
汇编语言
为了克服机器语言的缺陷,人们设想用一些易于理解和记
忆的符号来代替二进制码,这便是汇编语言。由于汇编语言用
符号构成程序,而这些符号表示指令、数据、寄存器、地址等
物理概念,因而,使用汇编语言编程在适合人类形象思维的道
路上前进了一步。但是,使用汇编语言编写程序时,编程人员
依然需要考虑寄存器等大量的机器细节,即汇编语言仍然是一
种与具体机器硬件有关的语言,是一种面向机器的语言,因
此,人们也把它称为符号化的机器语言。
第1章 Java系统环境概述
1.1.3
高级语言
由于机器语言和汇编语言都离不开具体的机器指令系统,
用它们编程时要求程序员必须熟悉所用计算机的硬件特性,因
而,用它们编写程序的技术复杂、效率不高,且可维护性和可
移植性都很差。为了从根本上摆脱语言对机器的依附,人们经
过多年的潜心研究,终于在1956年推出了一种与具体机器指令
系统无关、表达方式接近自然语言的计算机语言——FORTRAN
语言。在FORTRAN语言程序中,采用了具有一定涵义的数据命
名和人们容易理解的执行语句,屏蔽了机器细节,使得人们在
书写和阅读程序时可以联系到程序所描述的具体事物。所以,
人们把这种“与具体机器指令系统无关,表达方式接近自然语言”
的计算机语言称为高级语言。高级语言的出现是编程语言发展
史上的一大进步,缩小了编程语言与自然语言之间的鸿沟。
第1章 Java系统环境概述
此后,高级语言进一步向体现客观事物的结构和逻辑涵义
的方向发展。结构化数据、结构化语句、数据抽象、过程抽象
等概念相继提出。以1971年推出的PASCAL为典型代表的结构化
程序设计语言,进一步缩小了编程语言和自然语言的距离。在
此后的十几年中,结构化程序设计进一步发展成为一门方法学。
在20世纪70年代到80年代,各种结构化程序设计语言及方法非
常流行,成为当时软件开发设计领域的主流技术。
在结构化程序设计中,把程序概括为如下的公式:
程序=数据结构+算法
第1章 Java系统环境概述
其中,数据结构是指利用计算机的离散逻辑来量化表达需要
解决的问题,而算法则研究如何高效而快捷地组织解决问题的具
体过程。可见,以结构化程序设计为代表的高级语言是一种面向
数据/过程的程序设计语言,人们把这类语言也称为面向过程的语
言。
面向过程的语言可以精确地用计算机所理解的逻辑来描述和
表达待解问题的具体解决过程。然而,它把数据和过程分离为相
互独立的实体,使程序中的数据和操作不能有效地组织成与问题
域中的具体事物相对应的程序成分,所以它很难把一个具有多种
相互关系的复杂事物表述清楚。程序员在编写算法时,必须时刻
考虑所要处理问题的数据结构,如果数据结构发生了轻微的变
化,处理这些数据的算法也要做相应的修改,甚至完全重写,否
则这个算法就不可再用。因而,用这种程序设计方法编写的软
件,其重用性较差。为了较好地解决软件的重用性问题,使数据
与程序始终保持相容,人们又提出了面向对象的程序设计方法。
第1章 Java系统环境概述
1.1.4
面向对象的语言
面向对象的编程语言(Object-Oriented Programming
Language——OOPL)的设计出发点是为了能更直接地描述问题
域中客观存在的事物(即对象)以及它们之间的关系。面向对象
技术追求的是软件系统对现实世界的直接模拟,是将现实世界
中的事物直接映射到软件系统的解空间。它希望用户最大程度
地利用软件系统,花费少量的编程时间来解决需要解决的问题。
在面向对象的程序设计语言中,可以把程序描述为如下的
公式:
程序=对象+消息
第1章 Java系统环境概述
面向对象的语言对现实世界的直接模拟体现在下面几个方
面:
(1) 只要我们仔细研究程序设计所面对的问题域——客观
世界,就可以看到:客观世界是由一些具体的事物构成的,每
个事物都具有自己的一组静态特征(属性)和一组动态特征(行为)。
例如,一辆汽车有颜色、型号、马力、生产厂家等静态特征,
又具有行驶、转弯、停车等动态特征。要把客观世界的这一事
实映射到面向对象的程序设计语言中,则需把问题域中的事物
抽象成对象(Object),用一组数据描述该对象的静态特征(属
性,在Java中称之为数据成员),用一组方法来刻画该对象的动
态特征(行为)。
第1章 Java系统环境概述
(2) 客观世界中的事物既具有特殊性又具有共同性。人类
认识客观世界的基本方法之一就是对事物进行分类,即根据事
物的共同性把事物归结为某些类。考虑一下所有的汽车和一辆
汽车之间的关系就很容易理解这一点。OOPL很自然地用类
(Class)来表示一组具有相同属性和方法的对象。
第1章 Java系统环境概述
(3) 在同一类事物中,每个事物既具有同类的共同性,又
具有自己的特殊性。OOPL用父类与子类的概念来描述这一事
实。在父类中描述事物的共性,通过父类派生(Derive)子类的机
制来体现事物的个性。考虑同类事物中每个事物的特殊性时,
可由这个父类派生子类,子类可以继承(Inheritance)父类的共同
性又具有自己的特殊性。
第1章 Java系统环境概述
(4) 客观世界中的事物是一个独立的整体,它的许多内部实
现细节是外部所不关心的。例如,对于一个只管开车的驾驶员来
说,他可能根本不知道他所驾驶的这辆汽车内部用了多少根螺钉
或几米导线,以及它们是怎样组装的。OOPL用封装
(Encapsulation)机制把对象的属性和方法结合为一个整体,并且
屏蔽了对象的内部细节。
(5) 客观世界中的一个事物可能与其他事物之间存在某种行
为上的联系。例如,一辆行驶中的汽车当看到红色信号灯时要刹
车停止,OOPL便通过消息连接来表示对象之间的这种动态联系。
第1章 Java系统环境概述
(6) 客观世界中较为复杂的事物往往是由其他一些比较简单
的事物构成的,例如,一辆自行车是由车架、车轮、把手等构
成的,OOPL也提供了描述这种组成关系的功能。
综上所述,面向对象的编程语言使程序能够比较直接地反
映客观世界的本来面目,并且使软件开发人员能够运用人类认
识事物所采用的一般思维方法来进行软件开发。面向对象的语
言和人类认识、理解客观世界所使用的自然语言之间的差距是
比较小的。当然,二者之间仍然存在着一定的距离,自然语言
的丰富多样和借助人脑的联想思维才能辨别的语义,仍是目前
任何一种计算机编程语言无法相比的。
第1章 Java系统环境概述
1.1.5
面向对象语言的发展
面向对象的语言是在软件开发的实践中逐步提出并不断得
到完善的。1967年由挪威计算中心开发的Simu1a 67语言首先引
入了类的概念和继承机制,被看作是面向对象语言的鼻祖。
20世纪70年代出现的CLU、并发Pasca1、Ada和Modula-2等
编程语言,对抽象数据类型理论的发展起到了重要作用。这些
语言支持数据与操作的封装。
第1章 Java系统环境概述
1980年提出的Smallta1k-80是第一个完善的、能够实际应用
的面向对象语言。它在系统的设计中强调对象概念的统一,并引
入和完善了类、方法、实例等概念和术语,应用了继承机制和动
态链接。它被看作是一种最纯粹的面向对象的程序设计语言。
20世纪80年代中期到90年代,是面向对象语言走向繁荣的阶
段。其主要表现是大批比较实用的OOPL的涌现,例如C++,
Objective-C,Object Pascal,COLOS(Common Lisp Object
System),Eiffel,Actor,Java等。
第1章 Java系统环境概述
综观所有的面向对象程序设计语言,我们可以把它们分为
两大类:
(1) 纯粹的面向对象语言。在纯粹的面向对象语言中,几乎
所有的语言成分都是“对象”,如:Smalltalk、Java。这类语言强
调开发快速原型的能力。
(2) 混合型的面向对象语言,如:C++,Object Pascal。这类
语言是在传统的过程化语言中加入了各种面向对象的语言机
构,它所强调的是运行效率。
第1章 Java系统环境概述
1.2
网络时代的编程语言——
Java
1.2.1 Java
的产生
1991年初,美国加州的Sun Microsystem公司(以下简称Sun
公司)成立了一个以James Gosling为首、名为Green的项目研发小
组,其目标是开发一个面向家用电器市场的软件产品,用软件
实现一个对家用电器进行集成控制的小型控制装置。他们首先
注意到这个产品必须具有平台独立性,即让该软件在任何CPU
上都能运行。为达到此目的,Gosling首先从改写C++语言的编
译器着手。但是,他们很快便意识到这个产品还必须具有高度
的简洁性和安全性,而C++在这方面显然无法胜任。因此,
Gosling决定自行开发一种新的语言,并将该语言命名为Oak(橡
树)。
第1章 Java系统环境概述
Oak是Green项目小组开发的一个名为“*7”(StarSeven)产品
中的一个组成部分。StarSeven是一个集成了Oak、GreenOS(一
种操作系统)、用户接口模块和硬件模块四个部分的类似于
PDA(Personal Digital Assistant,个人数字助理)的设备。
StarSeven的第一个原型于1992年8月问世。尽管这个原型非常
成功,但在竞争激烈的家用电器市场上却败给了竞争对手。失
败的原因故然是多方面的,我认为这与Sun公司的主业是计算
机产品而不是家用电器产品这一因素密切相关。
第1章 Java系统环境概述
“有心栽花花不红,无意插柳柳成荫。”有趣的是,在这段
时间里,WWW的发展却如日中天。1993年7月,伊利诺斯大学
的NCSA推出了一个在Internet上广为流行的WWW浏览器Mosaic
1.0版。然而,这时的WWW页面虽然内容丰富,可以实现声、
图、文并茂,但它却是静态的,若想增强WWW的动感,需要
通过一种机制来使它具有动态性。其解决方案显然是嵌入一种
既安全可靠,又非常简练的语言。Oak完全满足这一要求。但
是,要将它推向市场,为人们所广泛接受,还必须采用一种合
适的策略。1994年,Sun公司的创始人之一Bill Joy的介入,使
Oak成为Java而得以走红。
第1章 Java系统环境概述
Bill Joy早年曾参与过Unix的开发,深知网络对Unix的推广
所起的作用。因此,他不仅指定Gosling继续完善Oak(发布时改
名为Java),同时要求Naughton用Oak编写一个真正的应用程
序——WebRunner,也就是后来被命名为HotJava的WWW浏览
器。1994年底,两人均出色地完成了各自的任务。这时,在这
个产品的发布问题上,Bill Joy力排众议,采取了“让用户免费使
用来占领市场份额”的策略,促成了Java与HotJava于1995年初在
Internet上的免费发布。由于Java确实是一种分布式、安全性高、
包括编译器在内又非常小的适合网络开发环境的语言,因而一
经发布,立即得到包括Netscape在内的各WWW厂商的广泛支持。
工业界一致认为:“Java是(20世纪)80年代以来计算机界的一件
大事。”微软总裁Bill Gates认为“Java是长期以来最卓越的程序
设计语言”。而今,Java已成为最流行的网络编程语言。
第1章 Java系统环境概述
名称的由来:由于Oak这个名称与其他产品的名称类同,
所以开发小组后来为这个新语言取了一个新名称--Java(爪哇),
据说取这个名称的灵感来自于这样一个故事:研发小组的成员
经常在公司附近的一家咖啡厅喝咖啡,而咖啡的原产地是Java。
第1章 Java系统环境概述
1.2.2 Java
的特点
Sun公司在“Java白皮书”中对Java的定义是:“Java: A simple,
object-oriented, distributed, interpreted, robust, secure, architectureneutral,
portable, high-performance, multi-threaded, and dynamic
language.”。按照这个定义,Java是一种具有“简单、面向对象的、
分布式、解释型、健壮、安全、与体系结构无关、可移植、高
性能、多线程和动态执行”等特性的语言。下面我们简要叙述
Java的这些特性。
第1章 Java系统环境概述
1.
简单性
Java语言简单而高效,基本Java系统(编译器和解释器)所占空
间不到250 KB。当然,这与Java的起源有很大关系。前已述及,
Java最初是为了对家用电器进行集成控制而设计的一种语言,因此
它必须具有简单明了的特性。
我们注意到,Gosling等人在设计Java之初,是从改写C++编译
器入手的,这就使Java具有类似于C++的风格,保留了C++语言的
优点;摈弃了C++中不安全且容易引发程序错误的指针;消除了
C++中可能给软件开发、实现和维护带来麻烦的地方,包括其冗余、
二义性和存在安全隐患之处,如操作符重载、多重继承和数据类
型自动转换等;简化了内存管理和文件管理——Java提供了C++中
不具备的自动内存垃圾搜集机制,从而减轻了编程人员进行内存
管理的负担,有助于减少软件错误。从这些方面看,Java是C++的
简化和改进,因而C++程序员可以很快掌握Java编程技术。
第1章 Java系统环境概述
Java的简单性是以增加运行时系统的复杂性为代价的。以
内存管理为例,自动内存垃圾处理减轻了面向对象编程的负
担,但Java运行时系统却必须内嵌一个内存管理模块。但无论
如何,对编程人员而言,Java的简单性只会是一个优点,它可
以使我们的学习曲线更趋合理化,加快我们的开发进度,减少
程序出错的可能性。
第1章 Java系统环境概述
2.
面向对象
Java语言是纯面向对象的,它不像C++那样既支持面向对
象的技术,又支持面向过程的程序设计技术。至于对象及其相
关概念请参阅第4章,这里只从一个侧面说明面向对象的编程
语言与面向过程的编程语言之间的区别。
传统面向过程的编程语言把程序概括为
程序=数据结构+算法
而面向对象的编程语言可把程序概括为
程序=对象+消息
第1章 Java系统环境概述
在面向对象的技术中,把现实世界中的任何实体,都可以
看作是对象。对象其实就是现实世界模型的一个自然延伸。现
实世界中的对象均具有属性和行为,映射到计算机程序上,属
性用数据表示,行为用程序代码实现。可见,对象实际上就是
数据和算法(程序代码)的封装体,它用一个自主式框架把代码和
数据联编在一起,形成一个对象。面向对象的程序设计技术较
传统的面向过程的程序设计技术更能真实地模拟现实世界。
第1章 Java系统环境概述
3
.可移植性(
平台无关性)
程序的可移植性指的是程序不经修改而在不同硬件或软件
平台上运行的特性。可移植性在一定程度上决定了程序的可应
用性。可移植性分为两个层次:源代码级可移植性和二进制代
码级可移植性。C和C++只具有一定程度的源代码级可移植性,
其源程序要想在不同平台上运行,必须重新编译。而Java不仅源
代码级是可移植的,甚至源代码经过编译之后形成的二进制代
码——字节码,也同样是可移植的。
第1章 Java系统环境概述
Java采用了多种机制来保证可移植性,其中最主要的有两条:
第一,Java既是编译型又是解释型的。Java程序的最终执行
需经过两个步骤:编译和解释。Java将源程序编译成字节码——
二进制代码,这种字节码通过Java解释器来解释执行。任何一台
机器,只要配备了Java解释器,就可以运行Java字节码,而不管
这种字节码是在何种平台上生成的。因此,Java编程人员在进行
软件开发时,不必考虑软件的运行平台。此外,Java通过预先把
源程序编译成字节码,避免了传统解释型语言的执行效率低的
性能瓶颈。Java语言与传统语言的不同运行机制如图1.2所示。
第1章 Java系统环境概述
图1.2 Java语言与传统语言的不同运行机制
(a) 传统语言程序的运行机制;(b) Java语言程序的运行机制
源代码
目标码
(.obj文件)
可执行代码
(.exe文件) 操作系统
源代码
(.java文件)
字节码
(.class文件) Java解释器
编译
编译
连接 运行
解释执行
第1章 Java系统环境概述
由Java源程序编译生成的字节码不是直接在操作系统平台上
运行,而是在一个称为Java虚拟机(JVM)的平台上运行。利用
JVM把Java字节码跟具体的软硬件平台分隔开,就能保证在任何
机器上编译的Java字节码文件都能在该机上运行(请参阅1.4.4节)。
第二,Java采用的是基于国际标准——IEEE标准的数据类型。
Java的数据类型在任何机器上都是一致的,它不支持特定于具体
的硬件环境的数据类型,它还规定同一种数据类型在所有实现中
必须占据相同的空间大小(C++的数据类型在不同的硬件环境或操
作系统下占据的内存空间是不同的)。通过在数据类型的空间大
小方面采用统一标准,Java成功地保证了其程序的平台独立性。
第1章 Java系统环境概述
此外,Java的可移植性还体现在Java的运行环境上。Java编
译器是用Java语言本身编写的,而其他编程语言运行的环境则
是用ANSI C编写的,Java的整个运行环境体现了一个定义良好
的可移植性接口。Java语言规范还遵循POSIX(POSIX
这个名
称是由Richard Stallman应IEEE的要求而提议的一个易于记忆的
名称。它基本上是Portable Operating System Interface(可移植操
作系统接口)的缩写,而X则表明其API的传承)标准,这也是
使Java具有良好可移植性的重要原因。
第1章 Java系统环境概述
4
.稳定性和安全性
网络分布式计算环境要求软件具有高度的稳定性和安全性。
C++程序在安全性和稳定性方面的最大问题在于其指针的使用,
不进行数组下标越界检查,缺乏自动的内存管理等。使用指针的
一个危险是它能够访问任意内存空间,如果病毒利用指针进入操
作系统的内存空间,并在其中执行特权指令,它就能随心所欲地
进行破坏。为此,Java首先摒弃了指针数据类型,这样,程序员
便不再能够凭借指针在任意内存空间中“遨游”;其次,Java提供
了数组下标越界检查机制,从而使网络“黑客”们无法构造出类似C
和C++语言所支持的那种指针;第三,Java提供了自动内存管理机
制,它可以利用系统的空闲时间来执行诸如必要的垃圾清除等操
作。此外,Java的运行环境还提供了下述的安全保障机制:
第1章 Java系统环境概述
● 字节码校验器(Byte Code Verifier)。当Java字节码进入解
释器时,首先必须经过字节码校验器的检查。即使Java编译器生
成的是完全正确的字节码,解释器也必须再次对其进行检查。因
为在从Java程序的编译直到解释执行这段时间内,字节码可能被
有意无意地改动过。
● 运行时内存布局和类装载器(Class Loader)。Java解释器将
决定程序中类的内存布局,这意味着“黑客”们将无法预先得知一
个类的内存布局结构,从而也就无法利用该信息来“刺探”或破坏
系统。随后,类装载器负责把来自网络的类装载到其单独的内存
区域,避免应用程序之间的相互干扰或破坏。
第1章 Java系统环境概述
● 文件访问限制。客户机一端管理员还可以限制网络上装
载的类只能访问某些允许的文件系统。
上述机制综合在一起,使得Java成了最安全的编程语言和
环境之一,并且保证了Java代码无法成为类似特洛伊木马、病
毒和蠕虫等具有潜在破坏作用的东西。
第1章 Java系统环境概述
5.
高性能
一般情况下,可移植性、稳定性和安全性几乎总是以牺牲
性能为代价的,解释型语言的执行效率一般也要低于直接执行
源码的速度。但Java所采用的措施却很好地弥补了这些性能差距。
这些措施包括:
● 高效的字节码。Java字节码格式的设计充分考虑了性能
因素,其字节码的格式非常简单,这使得经由Java解释器解释执
行后可产生高效的机器码。Java编译器生成的字节码和机器码的
执行效率相差无几。据统计,Java字节码的执行效率非常接近于
由C和C++生成的机器码的执行效率。
第1章 Java系统环境概述
● 多线程。线程是现代操作系统提出的一个新概念,是比
传统的进程更小的一种可并发执行的执行单位。线程的概念提
高了程序执行的并发度,从而可提高系统效率。C和C++采用的
是单线程的体系结构,均未提供对线程的语言级支持。与此相
反,Java却提供了完全意义的多线程支持。
第1章 Java系统环境概述
Java的多线程支持体现在两个方面:首先,Java环境本身就
是多线程的,它可以利用系统的空闲时间来执行诸如必要的垃
圾清除和一般性的系统维护等操作;其次,Java还提供了对多
线程的语言级支持,利用Java的多线程编程接口,编程人员可
以很方便地编写出支持多线程的应用程序,提高程序的执行效
率。必须注意的是,Java的多线程支持在一定程度上可能会受
其运行时支撑平台的限制,并且依赖于其他一些与平台相关的
特性。比方说,如果操作系统本身不支持多线程,Java的多线
程就可能只是“受限”的或不完全的多线程。
第1章 Java系统环境概述
● 及时编译和嵌入C代码。Java的运行环境还提供了另外
两种可选的性能提高措施:及时编译和嵌入C代码。及时编译
是指在运行时把字节码编译成机器码,这意味着代码仍然是可
移植的,但在开始时会有一个编译字节码的延迟过程。嵌入C
代码在运行速度方面效果当然是最理想的,但会给编程人员带
来额外的负担,同时将降低代码的可移植性。
第1章 Java系统环境概述
6
.动态特性
在面向对象的程序设计中,经常会用到各种类库,很多时候
还需要一些从第三方厂商处购买的类库。销售应用程序时,类库
有时是单独出售的。对于C++应用程序,这就会导致一个问题:
类库一旦升级,用这些类库编写的应用程序就必须重新编译,并
且重新发送到用户手中,否则就无法利用升级后类库的新增功能。
Java采用“滞后联编”机制避免了这个问题。Java程序的基本组成单
元为类,这些类是在运行过程中动态装载的。因此,Java可以在
分布式环境中动态地维护应用程序及其支持类库之间的一致性。
这样,对于Java而言,其支持类库升级之后,相应的应用程序不
必重新编译,也一样可以利用升级后类库的新增功能。“滞后联编”
机制使得Java完全利用了面向对象编程模式的优点,使Java程序能
够适应不断变化的执行环境。
第1章 Java系统环境概述
此外,Java的动态性还体现在对动态数据类型和动态协议
的支持上。利用一种特殊的Applet,即内容句柄,编程人员可
很方便地使HotJava支持新的数据类型。类似地,通过编写协议
句柄,可以使HotJava支持新的、自定义的传输协议。
简言之,Java的动态性使用户能够真正拥有“即插即
用”(p1ug-and-play)的软件模块功能。
第1章 Java系统环境概述
7
.分布式
分布的概念包括数据分布和操作分布两个方面。数据分布是
指数据可以分散存放于网络上不同的主机中,以解决海量数据的
存储问题;操作分布则指把计算分散到不同的主机上进行处理,
这就如同由许多人协作共同完成一项大而复杂的工作一样。
Java支持WWW客户机/服务器计算模式。对于数据分布,
Java提供了一个URL对象,利用此对象我们可以打开并访问网络
上的对象,其访问方式与访问本地文件系统几乎完全相同。对于
操作分布,Java的客户机/服务器模式可以把计算从服务器分散到
客户端,从而提高整个系统的执行效率,避免瓶颈制约,增加动
态可扩充性。
第1章 Java系统环境概述
对于编程人员来说,Java的网络类库是对分布式编程的最
好支持。Java网络类库是支持TCP/IP协议的子例程库,目前支
持的协议有HTTP和FTP等。同时,通过编写协议句柄,编程人
员还可以扩充Java支持的协议集合。
由上述特征可以看出,Java的确是一门适合Internet和分布
式环境的编程语言。
第1章 Java系统环境概述
1.3 Java
的开发运行环境
1.3.1
建立Java 2 SDK
开发环境
Sun公司的Java 2 SDK有Solaris SPARC/x86、Linux x86、
Microsoft Windows等版本,它们的建立过程略有不同。这里我们
以Microsoft Windows版本的Java 2 SDK为蓝本,说明其建立过程。
在安装Microsoft Windows版本的Java 2 SDK开发工具时,需
要具备下列配置:
(1) 主频在166 MHz以上的奔腾型CPU。
(2) 32 MB以上的内存(运行图形应用程序至少需要32 MB,在
浏览器中运行小应用程序Applet时,推荐48 MB)。
(3) 65 MB以上的可用硬盘空间。
(4) Windows 95/98/me/NT/2000/XP等操作系统。
第1章 Java系统环境概述
安装Java 2 SDK的过程如下:
(1) 从Sun公司的网站(http://www.sun.com/products/)上下载
Java 2 SDK工具包。
(2) 从Java 2 SDK工具包中找到运行文件j2sdk1_3_1-win.exe
并运行它,完成Java 2 SDK的安装。
(3) 设置系统文件的默认查找路径。若我们将JDK安装在
D:/jdk1.3目录中,则应在Autoexec.bat文件内加入
PATH=D:/jdk1.3/bin
这样,不论我们的当前目录为何,执行诸如Javac、Java等命令
时,操作系统都会找到这些文件并执行它们,从而使我们可以
在任何目录下执行Java源程序代码。
第1章 Java系统环境概述
1.3.2 Java
工具集
表1.1 Java 2 SDK 开发工具集
工具名称说 明
Javac Java编译器,用于将Java源程序编译成字节码
Java Java解释器,用于解释执行Java字节码
appletviewer 小应用程序浏览器,用于测试和运行Java applet程序
Javadoc Java文档生成器
Javap Java类文件反汇编器
Jdb Java调试器
Javah C文件生成器,利用此命令可实现在Java类中调用C++代码
第1章 Java系统环境概述
1.4 Java
程序的运行步骤
1.4.1
运行系统的结构及工作原理
用Java语言编写的Java源程序,经Java编译器编译后形成字
节码,这些字节码由Java运行系统负责解释和执行。解释和执行
的过程可分为三步:
(1) 字节码的装入。这是由类装载器完成的。类装载器负责
装入运行程序需要的所有代码,包括被程序代码中的类所继承
的类和调用的类。
(2) 字节码校验。字节码校验器对字节码进行安全性校验。
第1章 Java系统环境概述
(3) 字节码的翻译和执行。这可以取两种途径之一来实现:
一种是解释型工作方式,通过解释器将字节码翻译成机器码,
然后由即时运行部件立即将机器码送硬件执行;另一种是编译
型工作方式,通过代码生成器先将字节码翻译成适用于本系统
的机器码,然后再送硬件执行。Java运行系统一般采用解释型工
作方式。
Java语言程序的编译、解释和执行过程如图1.3所示。
第1章 Java系统环境概述
图1.3 Java语言程序的编译、解释和执行过程
源程序
(.java文件)
字节码
(.class文件)
类装载器
字节码校验器
代码
生成器
解释器
即时运行部件
硬件
第1章 Java系统环境概述
1.4.2 Java Application
程序的建立及运行
Java Application程序的建立及运行可分为下述三个步骤:
(1) 利用某一种文本编辑器建立Java源程序文件;
(2) 利用Java编译器(Javac)编译该application,产生.class字节
码文件;
(3) 利用解释器(java)解释字节码文件,完成该程序的运行过
程。
第1章 Java系统环境概述
下面以示例程序c1_1.java为例,来说明Java Application程序
的建立及运行步骤。
1.
建立Java
源程序文件
可以利用任何一个文本编辑器来建立Java源程序文件。例
如,利用DOS环境下的EDIT编辑器或Windows环境下的记事本
等编辑器。这里我们以Windows XP的环境下的记事本为例来说
明,如图1.4所示。
第1章 Java系统环境概述
图1.4 Java Application的建立与运行
第1章 Java系统环境概述
【程序示例sayhello.java】
/*
This is my first Java application. It displays
some words to the standard output.
*/
public class sayhello{
public static void main(String[] args){
//display the string.
System.out.println("hello, it’s my first application!/n");
}
}
输入编辑完成后,保存文件”sayhello.java”。
第1章 Java系统环境概述
2.
编译
利用Java编译器Javac对源文件进行编译。在DOS提示符
后,键入如下命令:
javac sayhello.java
按Enter键后,开始编译该文件。若源文件无错误,则产生
sayhello.class字节码文件;若源文件中有错误,则编译器将指
出错误位置,此时需返回上一步对源文件进行修改。
第1章 Java系统环境概述
3.
运行
编译无误的Java字节码文件,由Java解释器(Java)负责装入
和执行。可在DOS提示符后输入如下命令来运行该程序:
java sayhello
运行后在屏幕上输出:
hello, it’s my first application!
第1章 Java系统环境概述
4
.程序分析
(1) public class sayhello这一行表示声明此程序要建立一个
新类,类名为sayhello 。public指出这个类是公共类,而这个类
定义的内容就在后面紧跟的花括号内。任何Java程序都必须以
类的形式出现,一个程序中可以定义若干个类,但只能定义一
个public类。定义类必须用关键字class作为标志。如果在一个程
序中只定义了一个public类,那么类名一定是文件名,否则编译
会出错。
第1章 Java系统环境概述
(2) 在public static void main(String[] args)行中,用main定义
了一个主方法,当程序执行时,解释器会找主方法,它是程序
的入口点,若无此方法,解释器会显示错误信息。其中的public
表明所有的类都可以调用这个方法,static表明这个方法可以通
过类名直接调用,而void 表明此方法执行后不返回任何值。
String [] args表明向main传递的参数,其中args是参数名。main
后面紧跟的花括号是main方法的实现内容。它只含一条语句:
System.out.println(" hello, it’s my first application!");
此语句的功能是输出字符串“hello, it’s my first application!”。
第1章 Java系统环境概述
(3) 在System.out.println( )中,System是Java类库中的一个
类,利用此类可以获得Java运行环境的有关信息和输入输出信
息等;out是System类中的一个对象;println( )是out对象的一个
方法,此方法的作用是向标准输出设备(这里是显示器)输出参
数指定的字符串(这里是” ”中的内容),输出完成后光标定位在
下一行。
第1章 Java系统环境概述
1.4.3 Java Applet
程序的建立及运行
Java Applet程序的建立及运行可分为下述四个步骤:
(1) 利用文本编辑器建立Java源程序文件;
(2) 利用Java 编译器(Javac)编译该Java Applet,产生.class字
节码文件;
(3) 建立一个HTML文件,在其中嵌入Java字节码文件;
(4) 用WWW浏览器或appletviewer装入该HTML文件,使
Applet运行。
下面以示例程序sayhello_applet.java为例,来说明Java
Applet程序的建立及运行步骤。其建立与运行过程见图1.5。
第1章 Java系统环境概述
1.
建立Java Applet
源程序文件
建立Java Applet源程序文件的方法与建立Java Application源
程序文件的方法相同,此处不再重复。只需注意应该给出一个
有别于上一程序的文件名,本例为sayhello_applet.java。
【程序示例sayhello_applet.java】
import java.applet.*; /*”*”表示所有的类*/
import java.awt.*;
public class sayhello_applet extends Applet{
public void paint(Graphics g){
g.drawString("hello, it's my first
application!/n",30,30);
}
}
第1章 Java系统环境概述
2.
编译
编译Java Applet与编译Java Application也相同。对于本
例,可输入如下命令:
javac sayhello_applet.java
第1章 Java系统环境概述
3.
建立一个HTML
文件
在记事本中建立名为sayhello.html的HTML文件,并输入下
面语句:
<html>
<head><title>APPLET PROGRAM</title></head>
<body>
<APPLET CODE="sayhello_applet.class" width=300 height=40>
</APPLET>
</body>
</html>
第1章 Java系统环境概述
4.
运行
在Windows xp的MS-DOS方式下,输入如下命令:
appletviewer sayhello.html
按Enter键后,弹出如图1.6所示的Applet浏览器窗口。
第1章 Java系统环境概述
图1.6 示例程序c1_2的运行结果
第1章 Java系统环境概述
5.
程序分析
(1) import语句。
Java的类库中存储了许多已编写好的类,将这些类按照功能
分为许多包,提供给编程序人员使用。编写Java程序时,若要使
用Java类库中的类,则必须先用import语句将其引用。程序中:
import java.awt.*;
import java.applet.*;
两条语句说明该程序要使用Java类库的类。其中,“awt”为Abstract
Windowing ToolKit的缩写,表示该程序要使用抽象窗口工具集中
的类;“applet”向编辑器说明该程序要使用applet包中的类。
第1章 Java系统环境概述
(2) public class sayhello_applet extends Applet行声明此程序
要建立一个新类,类名为sayhello_applet 。Public指出这个类是
公共类;extends Applet说明该类是Applet的子类,而这个类的定
义内容就在后面紧跟的花括号内。所有的Java Applet程序中都必
须有一个Applet的子类,因为Applet类具有处理图形用户接口
(GUI)的功能,其中定义的数据成员和方法规定了WWW浏览器
如何解释Java Applet程序。根据子类继承父类的原则,可使
WWW浏览器顺利地实现用户程序的功能。
第1章 Java系统环境概述
(3) public void paint(Graphics g)行定义了一个名为paint的方
法,该方法用于重画Java Applet对象的内容。paint( )方法的参数
g是属于Graphics类的对象,当程序执行到这里时,g作为参数被
传递至paint( )中。
(4) g.drawString(" hello, it's my first application!/n",30,30); 语
句中的g.drawString( )方法用于将字符串“hello, it's my first
application!/n"显示在applet窗口。g.drawString( )方法有三个参数:
第一个参数是以双引号引起的字符串,它便是窗口中显示的内
容;第二个参数和第三个参数分别是applet窗口的x和y坐标(以像
素点为单位)。对于Java Applet的更多知识,将在后面章节陆续
介绍。
第1章 Java系统环境概述
(5) 建立的HTML文件是用来显示applet程序内容的网页。
<APPLET>卷标用来标示放置于网页上的Java Applet程序;
CODE指明嵌入到HTML文件中的Java Applet字节码文件的文件
名;width、height指出applet窗口的宽与高。
第1章 Java系统环境概述
1.4.4 Java
虚拟机
由Java源程序编译生成的字节码不能直接在一般的操作系统
平台上运行,而必须在一个称为Java虚拟机的操作系统之外的平
台上运行。这就是说在运行Java程序时,首先应启动Java虚拟
机,然后由Java虚拟机来负责执行Java的字节码。
Java虚拟机JVM(Java Virtual Machine)是可以运行Java字节
码的假想的计算机。利用Java虚拟机就可以把Java字节码程序跟
具体的软硬件平台分隔开来,只要根据JVM规格的描述将解释
器移植到特定的计算机上,就能保证在任何机器上编译的Java字
节码文件能够在该系统上运行。
第1章 Java系统环境概述
(1) 指令集:采用独立于平台的字节码形式;
(2) 寄存器组:包含程序计数器、堆栈、运行环境指针和变
量指针;
(3) 类文件格式规定:独立于平台;
(4) 堆栈:用来传递参数和返回运行结果;
(5) 内存垃圾收集器:释放不再使用的内存片段;
(6) 存储区:用来存放字节码。
运行JVM字节码的工作由解释器来完成。
第1章 Java系统环境概述
总之,JVM是一种在任意计算机上编译的Java字节码程
序,是可以在任何系统下的计算机上运行的规范机制,它是
Java平台独立性的基础。
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics