Chapter 1. An Introduction to Java
In this chapter
bull; Java As a Programming Platform
bull; The Java “White Paper” Buzzwords
bull; Java Applets and the Internet
bull; A Short History of Java
bull; Common Misconceptions about Java
The first release of Java in 1996 generated an incredible amount of
excitement, not just in the computer press, but in mainstream media such as The New York Times, The Washington Post, and Business Week. Java has the distinction of being the first and only programming language that had a ten-minute story on National Public Radio. A $100,000,000 venture capital fund was set up solely for products using a specific computer language. It is rather amusing to revisit those heady times, and we give you a brief history of Java in this chapter.
1.1. Java As a Programming Platform
In the first edition of this book, we had this to write about Java:
“As a computer language, Javarsquo;s hype is overdone: Java is certainly a good programming language. There is no doubt that it is one of the better languages available to serious programmers. We think it could potentially have been a great programming language, but it is probably too late for that. Once a language is out in the field, the ugly reality of compatibility with existing code sets in.”
Our editor got a lot of flack for this paragraph from someone very high up at Sun Microsystems who shall remain unnamed. But, in hindsight, our prognosis seems accurate. Java has a lot of nice language features—we examine them in detail later in this chapter. It has its share of warts, and the newer additions to the language are not as elegant as the original features because of the ugly reality of compatibility.
But, as we already said in the first edition, Java was never just a language. There are lots of programming languages out there, and few of them make much of a splash. Java is a whole platform, with a huge library, containing lots of reusable code, and an execution environment that provides services such as security, portability across operating systems, and automatic garbage collection.
As a programmer, you will want a language with a pleasant syntax and comprehensible semantics (i.e., not C ). Java fits the bill, as do dozens of other fine languages. Some languages give you portability, garbage collection,and the like, but they donrsquo;t have much of a library, forcing you to roll your own if you want fancy graphics or networking or database access. Well, Java has everything—a good language, a high-quality execution environment, and a vast library. That combination is what makes Java an irresistible proposition to so many programmers.
1.2. The Java “White Paper” Buzzwords
The authors of Java have written an influential White Paper that explains their design goals and accomplishments. They also published a shorter summary that is organized along the following 11 buzzwords:
1. Simple
2. Object-Oriented
3. Network-Savvy
4. Robust
5. Secure
6. Architecture-Neutral
7. Portable
8. Interpreted
9. High-Performance
10. Multithreaded
11. Dynamic
In this section, we will
bull; Summarize, with excerpts from the White Paper, what the Java
designers say about each buzzword; and
bull; Tell you what we think of each buzzword, based on our experiences
with the current version of Java.
Note
As we write this, the White Paper can be found at www.oracle.com/technetwork/java/langenv-140151.html. The summary with the 11 buzzwords is at http://labs.oracle.com/features/tenyears/volcd/papers/7Gosling.pdf.
1.2.1. Simple
We wanted to build a system that could be programmed easily without a lot of esoteric training and which leveraged todayrsquo;s standard practice. So even though we found that C was unsuitable, we designed Java as closely to C as possible in order to make the system more comprehensible. Java omits many rarely used, poorly understood, confusing features of C that, in our experience, bring more grief than benefit.
The syntax for Java is, indeed, a cleaned-up version of the syntax for C . There is no need for header files, pointer arithmetic (or even a pointer syntax), structures, unions, operator overloading, virtual base classes, and so on. (See the C notes interspersed throughout the text for more on the differences between Java and C .) The designers did not, however, attempt to fix all of the clumsy features of C . For example, the syntax of the switch statement is unchanged in Java. If you know C , you will find the transition to the Java syntax easy.
If you are used to a visual programming environment (such as Visual Basic), you will not find Java simple. There is much strange syntax (though it does not take long to get the hang of it). More importantly, you must do a lot more programming in Java. The beauty of Visual Basic is that its visual design environment almost automatically provides a lot of the infrastructure for an application. The equivalent functionality must be programmed manually, usually with a fair bit of code, in Java. There are, however, third-party development environments that provide “drag-and-drop”-style program development.
Another aspect of being simple is being small. One of the goals of Java is to enable the construction of software that can run stand-alone in small machines. The size of the basic interpreter and class support is about 40K; the basic standard libraries and thread support (essentially a selfcontained microkernel) add another 175K.
This was a great achievement at the time. Of course, the library has since grown to huge proportions. There is now a separate Java Micro Edition with a smaller library, suitable for embedded devices.
1.2.2. Object-Oriented
<p
剩余内容已隐藏,支付完成后下载完整资料</p
第1章 Java概述
本章的主要内容有:
- Java 程序设计平台
- Java“白皮书”的关键词
- Java applet 与Internet
- Java 的简单发展历史
- 关于Java 的常见误解
1996 年Java 第一次发布就引起了计算机出版界以及《纽约时报》、《华盛顿邮报》、《商业周刊》等主流媒体的极大兴趣。Java 是第一种也是唯一一种在National Public Radio 上占据了10分钟时间的介绍的程序设计语言,并且得到了资金为$100 000 000的全部用来支持Java开发的产品的风险投资基金。重温那些令人兴奋的日子是很有意思的,在本章我们将简要地介绍一下Java 语言的发展历史。
1.1 Java 程序设计平台
在本书的第1版,对Java有这样的描述:
“作为一种计算机语言,关于Java 的广告词是夸张的:Java当之无愧是一种优秀的编程语言。毫无疑问作为一个程序设计人员,使用Java是一个好的选择。有人认为:我们认为Java 将有望成为一种优秀的程序设计语言,但可能还要经历一段相当长的发展时期。一旦一种语言出现在某个领域,与现存代码的相容性问题就摆在了我们的面前。”
我们的编辑手中有许多由Sun 公司的某位不愿透露姓名的高层人士提供的的关于Java的广告词。然而,现在看起来,当初的这些预测似乎是准确的。Java 有许多优秀的语言特性,我们在本章后面会详细地讨论这些特性。由于相容性的存在,或多或少地会有一些“累赘”被加到语言中,这就导致Java 并不像想象中的那么完美无瑕。
但是,正如我们在第一版中已经提到的那样,Java 并不仅仅是一种语言。在此之前出现过很多程序语言,但是很少能够引起这么大的轰动。Java 是一个完整的平台,拥有一个庞大的库,包含了很多可重用的代码,和一个能够提供诸如安全性、跨操作系统的可移植性以及自动垃圾收集等服务的执行环境。
作为一名程序设计人员,希望能够有一种拥有令人愉快的语法和易于理解的语义的语言(比如,不是你C 这种的)。与其他的优秀语言一样,Java 恰恰如此。有些语言提供了可移植性、垃圾收集等等,但是,它们没有一个大型的库,如果你想要有强大的绘图功能、网络连接功能或者数据库获取功能就必须编写自己的代码。然而,Java拥有一切——作为一种优秀的语言,它具有高质量的执行环境和一个庞大的库,这就是Java使众多使用者如此迷恋它的地方。
1.2 Java“白皮书”的关键词
Java 的作者已经编写了非常有影响力的“白皮书”,来解释设计的目的以及完成的情况,他们还发布了一个简短的摘要,由以下11个关键词组织起来:
1.简单性
2.面向对象
3.网络技能
4.健壮性
5.安全性
6.体系结构中立
7.可移植性
8.解释性
9.高性能性
10.多线程
11.动态性
在这一节,我们将描述以下内容:
- 对白皮书中每个关键词进行概述,这也是Java设计者对每个关键词的概述;
- 凭借我们对Java当前版本的经验,给出我们对这些关键词的理解。
注释:当我们写这本书时,,白皮书可以在www.oracle.com/technetwork/java/langenv-140151.html.上找到。对11 个关键词的概述在http://labs.oracle.com/features/tenyeares/volcd/
papers/7Gosling.pdf上可以找到。
1.2.1 简单性
我们想要构建一个不需要进行大量专业训练就可以进行简单编程并且符合现在的实践标准的系统。所以,尽管我们发现C 不太合适,还是设计了与C 尽可能接近的Java以便系统能够更易于理解。Java删除了C 中许多很少使用、难以理解、容易混淆的特性,在我们的使用经验中,比起好处这些特性带来了更多的麻烦。
确实,Java的语法是C 语法的一个纯净版本。这里不需要头文件、指针运算(甚至指针语法)、结构、联合、操作符重载、虚基类等(查看各个章节里的C 注释,这些注释详细地解释了Java与C 之间的区别)。然而,设计者并不打算删除C 中所有不适当的特性。例如,在Java中switch语句的语法就没有改变。如果你了解C 就会发现将C 转变成Java是非常容易的。
如果你习惯了可视化的编程环境(例如Visual Basic),你就不会觉得Java简单了。Java 有许多奇怪的语法(尽管掌握重点不会花费很长时间),更重要的是,在Java中你必须编写许多程序。而Visual Basic的好处在于它的可视化环境几乎自动地为一个程序提供了大量的基础结构。而使用Java 实现同样的功能却需要动手编写代码,而且工作量还非常大。然而,现在有一些支持“拖放”风格程序开发的第三方开发环境。
简单的另一面是小。Java的其中一个目标就是能够开发出一款软件,它能够在小型机器上独立运行。基本的解释器和类的支持容量大约为40KB ;基础的标准库和线程支持(基本上是一个自包含的微内核)将会增加175KB。
在那时这是一个伟大的成就。当然了,库已经扩展到了相当庞大的容量。现在有一个独立的Java Micro Edition,它有一个比较小的库,适用于嵌入式设备。
1.2.2 面向对象
简单来说,面向对象设计是一种将重点放在数据(即对象)和对象接口上的程序技术。用木匠来举个例子,一个“面向对象的”木匠首先关注的会是他所制作的椅子,其次才是所使用的工具;一个“非面向对象的”木匠首先考虑的是所用的工具。在面向对象方面的能力上Java与C 是一样的。
在过去的40年里,面向对象已经证明了自己的价值,一种现代的程序设计语言不使用它是难以置信的。的确,Java的面向对象特性与C 的相差不多。Java 与C 的最主要的区别在于多继承,在Java和Java 的metaclass模型中(将在第5章中讨论),简单的接口概念已经取代了多继承。
注释:
如果你没有使用面向对象程序设计语言的经验,那就有必要仔细阅读第4章-第6章。这三章解释了面向对象程序设计是什么以及在编写复杂的项目时为什么比传统的C或Basic更加有效。
1.2.3 网络技能
Java 有一个扩展的例程库,用于处理像HTTP和FTP之类的TCP/IP 协议。Java应用程序能够通过URL像获取本地文件那样简单地打开和获取网络上的对象。
我们已经发现Java 的网络能力既强大又易于使用。任何一个使用其他语言试图进行网络编程的人都会感到惊讶:Java能够使许多繁重的任务变得这么简单,比如打开socket连接(我们将会在本书卷II中谈到)。远程方法调用机制使分布式对象之间可以进行交流(也将在卷II中谈到)。
1.2.4 健壮性
Java 被要求编写的程序在许多方面都具有可靠性。在前期,Java投入了很多精力在可能出现的问题上和后期运行时的动态检测,而且消除了那些可能出错的状态hellip;hellip;Java和C 单方面最大的不同之处在于Java里面有一个可以消除重写内存和损坏数据可能性的指针模型。
这个特性也是非常有用的。Java 编译器能够检测出许多问题,而在其他语言中,这些问题只有在运行时才能够被检测出来。对第二点来说,任何一个曾经花费几个小时来检查由于指针而引起bug的人,都会很喜欢Java的这一特性的。
如果你来自于像Visual Basic 这类没有使用指针的语言,你也许会想为什么这个如此重要。C语言程序员就不会这么幸运了,他们需要利用指针来获取字符串、数组、对象,甚至文件。在Visual Basic 中,你不会使用指针访问这些实体,而且也不需要关心有关内存分配的问题。另一方面,很多数据结构在没有指针的语言中是非常难实现的。而Java则具备了这两方面的优势。你不需要在每个结构中使用像字符串、数组这样的指针构造。如果你需要用的话,比如说链表。使用Java就有了安全保障,因为你永远不会获取一个错误的指针或者使内存分配发生错误,你也不必保护内存防止发生泄漏。
1.2.5 安全性
Java被用于网络/分布式环境。为了达到这一点,很多精力被投注于安全方面,利用Java可以实现防病毒、防篡改系统的构建。
本书的第1版我们说过:“永远不要把话说绝。”事实证明这是正确的。Java开发工具箱的第1版启用之后不久,普林斯顿大学的一些安全方面的专家就发现了在Java1.0中存在一些安全特性方面的bug。Sun Microsystems曾经大力支持对Java的安全性的研究,实现了虚拟机和安全库。他们还迅速地解决了所有已知的安全方面的bug。在任何情况下,试图对Java的安全机制蒙混过关都是十分困难的。到目前为止,发现bug变得越来越专业化,而且在数目上发现的bug越来越少。
从一开始,Java的设计就能够预防各种可能发生的攻击,其中包括以下内容:
- 堆栈溢出--蠕虫等病毒常用的攻击手段。
- 在超出自己的程序空间之外破坏内存。
- 在没有授权的情况下读或写文件。
大量的安全特性逐渐地加入到Java中。从Java1.1之后,Java 就有了数字签名类(digitally signed class)的概念(请参看卷II)。有了数字签名类,你就可以确定谁编写了它。如果你信任这个类的作者,这个类就可以在你的机器上获得更多的权限。
注释:
来自微软的基于ActiveX技术的竞争代码传输机制,它的安全性完全依赖于数字签名。很明显这是不够的,因为任何一个微软产品的用户都可以作证,来自著名提供商的程序会奔溃并对系统产生危害。相比ActiveX,Java拥有一个强大的的安全机制,因为它是在程序运行时对它进行控制的,并且组织程序进行恶意性破坏。
1.2.6 体系结构中立
编译器生成一个体系结构中立的文件格式——一种在许多程序中都被编译过的代码,只要有Java 运行时系统,就可以在许多处理器上运行。Java 编译器通过生成与特定的计算机体系结构无关的字节码指令来实现这一特性。然而,字节码被设计成不仅可以很容易地在任何机器上解释执行,而且还可以迅速地翻译成本地机器的代码。
这不是一个新的想法。在40多年以前,Niklaus Wirth的原始Pascal以及UCSDPascal系统都使用了相同的技术。
当然了,解释字节码确实比全速运行机器指令慢的多。因此这是不是一个好的想法还不是很清晰。然而,虚拟机可以将使用最频繁的字节码翻译成机器语言,这个过程被称为即时编译。这一过程已经被证明非常有效以至于甚至微软的.NET 平台也依赖于虚拟机。
虚拟机还有其他的优点。虚拟机可以增强安全性因为它可以检测指令序列的行为。有些程序甚至可以快速地生成字节码,动态地增强一个运行中的程序的处理能力。
1.2.7 可移植性
不像C和C ,在Java的规范中没有“依赖具体实现”的地方。对基本数据类型的大小和算法都做了明确的行为规范。
例如,在Java中,一个int类型总是一个32位的整数,在C或者C 中,int可以是16位整数、32位整数或者是编译器提供商喜欢的其他任何大小。唯一的限制只是int类型的大小不能小于shortint同时不能高于long int。而在Java中,对于数据类型来说,有一个固定的大小能够消除一个主要的令人头痛的问题。二进制数据以一个固定的格式进行存储和传输,消除了字节顺序的困扰。字符串在存储时用一个标准的Unicode格式。
作为系统的一个组成部分,类库定义了可移植的接口。例如,有一个抽象的Window 类给出了在UNIX、Windows 和Macintosh 环境下的不同实现。
正如任何一个尝试过的人都知道的那样,要编写一个在Windows、Macintosh 和10 种不同风格的UNIX上看起来都很好的程序是多么困难。Java 1.0 就做过这样的努力,发布了一个将常用的用户界面元素提供到其他平台上的简单工具箱。很遗憾,结果是我们做了很多工作,却构建了一个在各个平台上都很难让人接受的库(而且,在不同平台的图形显示中有不同的bug)。但是这只是个开始,在许多应用问题中,可移植性都比用户界面重要的多;而且这些应用程序从Java 的早期版本中获得了许多益处。到目前为止,用户界面工具箱已经完全重写,以至于它不再依赖于用户界面。我们认目前的结果是现在的Java版本比早期版本更加稳定并且更加吸引人。
1.2.8 解释型
Java解释器可以在任何一台移植了解释器的机器上执行Java字节码。由于链接是一个更加增量式并且轻量级的过程,因此开发过程就变得更加快捷,同时更加具有探索性。
增量式链接是有优点的,但是对应于开发过程来说,它的好处确实是夸大其词了。实际上,早期的Java开发工具速度非常慢。现在,将字节码翻译成机器码是通过即时编译器实现的。
lt;
剩余内容已隐藏,支付完成后下载完整资料
资料编号:[151483],资料为PDF文档或Word文档,PDF文档可免费转换为Word
您可能感兴趣的文章
- 饮用水微生物群:一个全面的时空研究,以监测巴黎供水系统的水质外文翻译资料
- 步进电机控制和摩擦模型对复杂机械系统精确定位的影响外文翻译资料
- 具有温湿度控制的开式阴极PEM燃料电池性能的提升外文翻译资料
- 警报定时系统对驾驶员行为的影响:调查驾驶员信任的差异以及根据警报定时对警报的响应外文翻译资料
- 门禁系统的零知识认证解决方案外文翻译资料
- 车辆废气及室外环境中悬浮微粒中有机磷的含量—-个案研究外文翻译资料
- ZigBee协议对城市风力涡轮机的无线监控: 支持应用软件和传感器模块外文翻译资料
- ZigBee系统在医疗保健中提供位置信息和传感器数据传输的方案外文翻译资料
- 基于PLC的模糊控制器在污水处理系统中的应用外文翻译资料
- 光伏并联最大功率点跟踪系统独立应用程序外文翻译资料
