⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 00000000.htm

📁 水木清华BBS
💻 HTM
📖 第 1 页 / 共 2 页
字号:
<HTML><HEAD>  <TITLE>BBS水木清华站∶精华区</TITLE></HEAD><BODY><CENTER><H1>BBS水木清华站∶精华区</H1></CENTER>发信人:&nbsp;cuteboy&nbsp;(蓝宝石),&nbsp;信区:&nbsp;Java&nbsp;<BR>标&nbsp;&nbsp;题:&nbsp;Java语言白皮书&nbsp;<BR>日&nbsp;&nbsp;期:&nbsp;Tue&nbsp;Apr&nbsp;30&nbsp;16:05:25&nbsp;1996&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Java语言白皮书&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;------------------------------------------------------&nbsp;<BR>&nbsp;<BR>Java程序语言和环境的设计目的是为了解决现代&nbsp;<BR>程序设计上的问题。它最初是一项较大规模『消&nbsp;<BR>费者电子产品先进软件发展专案』的一部份,该&nbsp;<BR>专案目的是为了发展小型、可靠、可移植、分布&nbsp;<BR>式、实时的嵌入式系统。我们在专案一开始原决&nbsp;<BR>定采用C++,不过碰到一些问题。最初,那只&nbsp;<BR>是编译器技术方面的问题,可是后来我们遭遇更&nbsp;<BR>多困难,且发现最好的解决方式就是更换编程语&nbsp;<BR>言。&nbsp;<BR>&nbsp;<BR>Java&nbsp;<BR>&nbsp;<BR>Java是一种简单、面向对象、分布式、解释、健&nbsp;<BR>壮、安全、结构中立、可移植、高效能、多线程&nbsp;<BR>、动态的语言。&nbsp;<BR>&nbsp;<BR>描述系统特性的方法之一就是把一堆高效能的术&nbsp;<BR>语摆在一起。一如上述,我们也使用一组标准的&nbsp;<BR>术语来描述Java。以下我们将解释这些术语在&nbsp;<BR>Java上代表的意义,以及我们试图解决的问题是&nbsp;<BR>哪些。&nbsp;<BR>&nbsp;<BR>『首先,我们要介绍阿基米得公司(Archimedes&nbsp;<BR>Inc.);它是我们为了方便说明Java功能而虚构的&nbsp;<BR>一家软件公司。阿基米得从事有关基本物理教学&nbsp;<BR>用途的软件开发,其软体设计目的是要与使用者&nbsp;<BR>产生交互关系,不仅提供一如传统教科书的文字&nbsp;<BR>与插图,而且也包括一组软件实验工作室,供使&nbsp;<BR>用者进行实验和模拟真实世界的物理行为。例&nbsp;<BR>如,它最基本的一项实验允许学生组成杠杆和滑&nbsp;<BR>轮,然后观察它们的物理作用。在以下的论述&nbsp;<BR>中,我们将借由这些实验和阿基米得设计师的旁&nbsp;<BR>白,以说明Java语言概念。』&nbsp;<BR>&nbsp;<BR>简单&nbsp;<BR>&nbsp;<BR>我们想建立一种真正简单的系统,它允许使用者&nbsp;<BR>轻易地设计程序而不需要像现今的标准程序一样&nbsp;<BR>接受深奥的训练。目前大多数程序设计师都采用&nbsp;<BR>C语言,而面向对象程序设计师则大多使用C++。&nbsp;<BR>因此,即使我们发现C++并非适合我们,我&nbsp;<BR>们在Java的设计上还是尽可能让它与C++相近,&nbsp;<BR>以确保系统更容易被理解。&nbsp;<BR>&nbsp;<BR>Java删除许多极少被使用、不容易理解和令人混淆&nbsp;<BR>的C++功能,这些功能在我们的使用经验中只能&nbsp;<BR>带来麻烦而非效益。删除的功能主要包括运算符&nbsp;<BR>重载(operator&nbsp;overloading)、多重继承(inheritance)&nbsp;<BR>以及广泛的自动强迫同型(automatic&nbsp;coercions);&nbsp;<BR>重载是指以一个辨识元参照多重项目,Java语言&nbsp;<BR>也提供重载函数,不过它重载的对象是方法(method)而&nbsp;<BR>非变量或运算符。&nbsp;<BR>&nbsp;<BR>我们增加自动内存垃圾收集(auto&nbsp;garbage&nbsp;collection)&nbsp;<BR>功能,因此简化Java程序工作,不过同时也让系统变得稍复&nbsp;<BR>杂一些。储存管理(storage&nbsp;management)是使C与C++&nbsp;<BR>应用程序变得复杂的常见的一项原因,即关于内存的&nbsp;<BR>分配与释放。Java语言的自动垃圾收集功能(周期性地&nbsp;<BR>释放未被使用的内存)不仅简化了程序设计工作,而且&nbsp;<BR>能大幅度减少小错误(bugs)数量。&nbsp;<BR>&nbsp;<BR>『阿基米得设计师们原想花时间思考杠杆与滑轮原&nbsp;<BR>理,但是后来却发现大部份时间都浪费在世俗的&nbsp;<BR>程序工作上。事实上,他们的核心专业知识在于&nbsp;<BR>教学而非程序设计。这些程序工作中最复杂的部&nbsp;<BR>份就是从他们那二万行程序码中,找出那些地方&nbsp;<BR>浪费了内存。』&nbsp;<BR>&nbsp;<BR>确保Java『简单化』的另一特性在于『小而单&nbsp;<BR>纯』。Java的目标之一是要协助开发能独立地在小&nbsp;<BR>型机器上顺利执行的软件。Java的基本解释器&nbsp;<BR>(interpreter)和对象类(class)支援约占4OKB,而&nbsp;<BR>若增加基本的标准程序库和线程(thread)支援&nbsp;(它&nbsp;<BR>实际上是一整自含式的微核心)&nbsp;需增加175K。体积&nbsp;<BR>小对于在嵌入式的系统中的使用是很重要的,并因&nbsp;<BR>此Java可以通过网络轻易下载。&nbsp;<BR>&nbsp;<BR>面向对象&nbsp;<BR>&nbsp;<BR>这是在业界被过度渲染的术语之一。不过,面向&nbsp;<BR>对象是一项很强的设计功能,因为它促成明确的&nbsp;<BR>接口定义,并允许发展者建立可重复使用的『软&nbsp;<BR>件IC』。&nbsp;<BR>&nbsp;<BR>简单的说,面向对象设计是一种以数据(对象)&nbsp;<BR>及其接口为重心的程序设计技术。我们以木匠比&nbsp;<BR>例;一位『面向对象』木匠最重视的是他想制作&nbsp;<BR>的椅子,其次才是他用来制做椅子的工具。相反&nbsp;<BR>的,一位『非面向对象』木匠是把主要的心思放&nbsp;<BR>在工具上。面向对象设计也是定义程序模块如何&nbsp;<BR>『即插即用』的机制。&nbsp;<BR>&nbsp;<BR>Java的面向对象设施实质上就是C++,并包含&nbsp;<BR>Objective&nbsp;C的一些延伸,以提供更有动态的解决&nbsp;<BR>方案。&nbsp;<BR>&nbsp;<BR>『阿基米得设计师在他们的模拟式中设计许多&nbsp;<BR>东西,包括绳子与橡皮筋等。他们初期的C版本&nbsp;<BR>产品是一个非常庞大的系统,因为他们必须个别&nbsp;<BR>地设计软件来描述绳子和橡皮筋。当以面向对象&nbsp;<BR>方式重新设计应用程序时,他们发现可以定义一&nbsp;<BR>个基本对象来代表绳子与橡皮筋两者之间的共同&nbsp;<BR>部份,然后绳子与橡皮筋即定义成基本对象类型&nbsp;<BR>的子对象类。其后,当他们有需要增&nbsp;<BR>加链结时就能非常轻易地建立起来,因为他们可&nbsp;<BR>以将这些链结建立在先前已设计妥当的对象之&nbsp;<BR>上,而不需要整个重新设计新对象模拟。』&nbsp;<BR>&nbsp;<BR>分布式&nbsp;<BR>&nbsp;<BR>Java拥有广泛的例程库(routine&nbsp;library)能轻易地处&nbsp;<BR>理TCP/IP协议,例如HTTP与FTP等。这使得在Java中&nbsp;<BR>比在C或C++中更容易创建网络连接。Java应用程&nbsp;<BR>序可以借由URL在通过网络开启和存取对象,就&nbsp;<BR>如同存取一个本地(local)文件系统一样简单。&nbsp;<BR>&nbsp;<BR>『阿基米得设计师最初把他们的程序建立在CD-&nbsp;<BR>ROM上。不过他们想把一些交互式教学游戏程序&nbsp;<BR>概念放在下一个产品内。例如,他们想让不同电&nbsp;<BR>脑上的学生一起建立一台模拟机器供大家学习。&nbsp;<BR>不过,他们评估过的所有网络系统都过于复杂且&nbsp;<BR>要求深奥的软件工程专业能力。于是,他们只好&nbsp;<BR>放弃这个概念。』&nbsp;<BR>&nbsp;<BR>健壮&nbsp;<BR>&nbsp;<BR>Java的目标是要协助发展者建立各方面都必须可&nbsp;<BR>靠的程序。Java强调在设计初期即检查可能存在&nbsp;<BR>的问题,其后则执行动态(runtime)检查,并排除&nbsp;<BR>容易出现错误的条件。&nbsp;<BR>&nbsp;<BR>强类型(strongly&nbsp;typed)语言例如C++的优点是允许&nbsp;<BR>在编译时进行深入的检查,以便提前发现错误。&nbsp;<BR>不幸的是,C++承袭了C在编译检查(compile-time&nbsp;<BR>checking)时的一些漏洞;C的检查较为松散,特&nbsp;<BR>别是在方法/过程声明方面。我们在Java中要求&nbsp;<BR>声明,但并不支持C风格的隐性声明。&nbsp;<BR>&nbsp;<BR>链结器(linker)了解类型系统并重复执行许多&nbsp;<BR>已由编译器完成的类型检查,以避免出现版本不&nbsp;<BR>匹配问题。&nbsp;<BR>&nbsp;<BR>Java与C/C++之间最大的不同点之一在于Java拥有&nbsp;<BR>一种指针(pointer)模型,能排除发生内存被&nbsp;<BR>覆盖和毁损数据之可能性。Java不采用指针算&nbsp;<BR>术法,而是提供真正的阵列。这允许程序执行&nbsp;<BR>下标检查;再者,它也不可能发生借由对象&nbsp;<BR>类型转换将一个任意整数转成指针的情形。&nbsp;<BR>&nbsp;<BR>『阿基米得设计师的应用程序在C执行时基本上相&nbsp;<BR>当快速。不过他们的软件开发日程一再落后,因&nbsp;<BR>为总有清理不完的小错误逃过他们的检查。他们&nbsp;<BR>面对许多麻烦,包括内存分配失败、版本不一致、&nbsp;<BR>接口不匹配等。C让他们能在程序码中增加一些&nbsp;<BR>巧妙的设计,然而却必须因此付出时间代价以求&nbsp;<BR>确保程序品质。由于错误清不干净,因此他们的&nbsp;<BR>软件推出第一版之后就得忙着写修补程序。』&nbsp;<BR>&nbsp;<BR>Java虽不能排除品质确认问题,不过它让这道程&nbsp;<BR>序变得简单许多。&nbsp;<BR>&nbsp;<BR>许多动态语言例如Lisp、TCL与Smalltalk等,通&nbsp;<BR>常被用来制作原型程序(prototyping)。它们在这&nbsp;<BR>方面成功的理由是因为它们都非常健壮(robust),&nbsp;<BR>让程序设计师不再怕处理内存问题,因为他们&nbsp;<BR>不须担心内存失败。Java即拥有这项特性。Java&nbsp;<BR>程序员相对地可以不害怕处理内存问题,因为在&nbsp;<BR>Java中不存在指针,Java程序不可能意外覆盖一&nbsp;<BR>片内存缓冲区的末尾。Java程序也不可能非法访问&nbsp;<BR>内存,但这些在C或C++中都有可能发生。&nbsp;<BR>&nbsp;<BR>动态语言适合开发原型程序发展的理由之一,就&nbsp;<BR>是它们不会在发展初期就要求你拟定明确的决&nbsp;<BR>策。Java刚好相反,它强迫你明确地做选择。这&nbsp;<BR>些选择伴随许多辅助:你可以编写方法调用&nbsp;<BR>(method&nbsp;invocations),而如果你有某些错误的地&nbsp;<BR>方,你将会在编译时获得通知,而不须担心方法&nbsp;<BR>调用上的错误。&nbsp;<BR>&nbsp;<BR>安全&nbsp;<BR>&nbsp;<BR>Java设计目的是要供使用于网络/分布式运算环&nbsp;<BR>境。为此,Java非常强调安全性,以确保建立无&nbsp;<BR>病毒且不会被侵入的系统。Java的验证技术是以&nbsp;<BR>公钥&nbsp;(public-key)加密法为基础。&nbsp;<BR>&nbsp;<BR>『健壮性』与『安全』之间存在一种很强的相互&nbsp;<BR>作用关系。例如,指针语意的改变,让应用程&nbsp;<BR>式不可能伪造对象结构存取权,或存取它们在对&nbsp;<BR>象中没有存取权的私有数据。这等于关起大门,&nbsp;<BR>阻绝大多数病毒活动。&nbsp;<BR>&nbsp;<BR>『有人为阿基米得的PC版软件写了一个有趣的修&nbsp;<BR>补程序,然后将它贴到一个主要的电子布告栏上&nbsp;<BR>面流通。由于这支修补程序很容易取得而且又能&nbsp;<BR>为系统增加一些有趣的功能,于是很多人都下载&nbsp;<BR>使用。这个程序未经阿基米得设计师检验过,不&nbsp;<BR>过它用起来似乎还不错。直到四月一日那天,好&nbsp;<BR>几千名使用者发现他们小孩使用的教学软件突然&nbsp;<BR>跳出几张不堪入目的图片。不用多加说明,阿基&nbsp;<BR>米得设计师们虽不用为这个意外负起责任,但是&nbsp;<BR>他们还是必须设法控制那个修补程序造成的破&nbsp;<BR>坏。』&nbsp;<BR>&nbsp;<BR>结构中立性&nbsp;<BR>&nbsp;<BR>Java的设计目标是要支援网络应用程序。一般而&nbsp;<BR>言,网络是由许多不同的系统构成,包括各种&nbsp;<BR>CPU与操作系统结构。为了让Java应用程序能够&nbsp;<BR>在网络上任何地方执行,其编译器会产出一种具&nbsp;<BR>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -