Cay s.Horstmann Core Java ,VolumeII, Advanced Features, Eighth Edition
Java Technical Description
Java as a Programming Platform
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.'
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 dont 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.
Features of Java
1.Simple
We wanted to build a system that could be programmed easily without a lot of esoteric training and which leveraged todays 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 important, 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 bytes; adding the basic standard libraries and thread support (essentially a self-contained microkernel) adds an additional 175K.
2. Object Oriented
Simply stated, object-oriented design is a technique for programming that focuses on the data (= objects) and on the interfaces to that object. To make an analogy with carpentry, an 'object-oriented' carpenter would be mostly concerned with the chair he was building, and secondarily with the tools used to make it; a 'non-object-oriented' carpenter would think primarily of his tools. The object-oriented facilities of Java are essentially those of C .
Object orientation has proven its worth in the last 30 years, and it is inconceivable that a modern programming language would not use it. Indeed, the object-oriented features of Java are comparable to those of C . The major difference between Java and C lies in multiple inheritance, which Java has replaced with the simpler concept of interfaces, and in the Java metaclass model. The reflection mechanism and object serialization feature make it much easier to implement persistent objects and GUI builders that can integrate off-the-shelf components.
3. Distributed
Java has an extensive library of routines for coping with TCP/IP protocols like HTTP and FTP. Java applications can open and access objects across the Net via URLs with the same ease as when accessing a local file system.
We have found the networking capabilities of Java to be both strong and easy to use. Anyone who has tried to do Internet programming using another language will revel in how simple Java makes onerous tasks like opening a socket connection. (We cover networking in Volume 2 of this book.) The remote method invocation mechanism enables communication between distributed objects (also covered in Volume 2).There is now a separate architecture, the Java 2 Enterprise Edition (J2EE), that supports very large scale distributed applications.
4. Robust
Java is intended for writing programs that must be reliable in a variety of ways. Java puts a lot of emphasis on early checking for possible problems, later dynamic (run-time) checking, and eliminating situations that are error-prone.hellip; The single biggest difference between Java and C/C is that Java has a pointer model that eliminates the possibility of overwriting memory and corrupting data.
This feature is also very useful. The Java compiler detects many problems that, in other languages, would show up only at
剩余内容已隐藏,支付完成后下载完整资料
Cay S. Horstmann ,核心java,第二卷, 改进的特性,第八版
Java技术介绍
Java是一种程序设计平台
Java是一种优秀的程序设计语言。对于一个名副其实的程序设计人员来说,使用Java无疑是一个好的选择。有人认为:Java将有望成为一种最优秀的程序设计语言,但还需要一个相当长的发展时期。一旦一种语言应用于某个领域,与现存代码的相容性问题就摆在了人们的面前。”
Java并不只是一种语言。在此之前出现的那么多种语言也没有能够引起那么大的轰动。Java是一个完整的平台,有一个庞大的库,其中包含很多可重用的代码和一个提供诸如安全性、跨操作系统的可移植性以及自动垃圾回收等服务的执行环境。
作为一名程序设计人员,常常希望能够有一种语言,它具有令人赏心悦目的语法和易于理解的语义(C 不是这样的)。与许多其他的优秀语言一样,Java恰恰满足了这些要求。有些语言提供了可移植性、垃圾回收等等,但是,没有提供一个大型的库,如果想要有奇特的绘图功能、网络连接功能和数据库存取功能就必须自己动手编写代码。Java这种功能齐全的出色语言,具有高质量的执行环境以及庞大的库。正是因为它集多种优势于一身,所以对于广大的程序设计人员来说有着不可抗拒的吸引力。
JAVA的特性
1.简单性
人们希望构建一个无需深奥的专业训练就可以进行编程的系统,并且要符合当今的 标准惯例。因此,尽管人们发现C 不太适用,但在设计Java的时候还是尽可能地接近 C ,以便系统更易于理解。Java别除了C 中许多很少使用、难以理解、易混淆的特性。在目前看来,这些特性带来的麻烦远远大于带来的好处。
的确,Java语法是C 语法的一个“纯净”版本。这里没有头文件、指针运算(甚至指针语法)、结构、联合、操作符重载、虚基类等等。(请参看本书各个章节给出的C 注释,那里比较详细地解释了Java与C 之间的区别。)然而,设计者并没有试图清除C 中所有不适当的特性。例如,switch语句的语法在Java中就没有改变。如果熟悉C 就会发现可以轻而易举地将它转换成Java,
如果已经习惯于可视化的编程环境(例如Visual Basic),就不会觉得Java简单了。Java有许多奇怪的语法(尽管掌握其要领并不需要很长时间),更重要的是,使用Java需要自己编写大量的程序。Visual Basic的魅力在于它的可视化设计环境几乎自动地为应用程序提供了大量的基础结构。而使用Java实现同样的功能却需要手工地编制代码,通常代码量还相当大。然而,已经有一些支持“拖放”风格程序开发的第三方开发环境。
简单性的另一个方面是小。Java的目标之一是支持开发能够在小型机器上独立运行的软件。基本的解释器以及类支持大约仅为40KB;再加上基础的标准类库和对线程的支持(基本上是一个自含的微内核)大约需要增加175KB。这是一个了不起的成就。然而,需要注意的是支持图形用户界面(GUI)的类库相当大。
2.面向对象
简单地讲,面向对象设计是一种程序设计技术。它将重点放在数据(即对象)和对象的接口上。用木匠来打一个比方,一个“面向对象的”木匠始终关注的是所制作的 椅子,第二位才是所使用的工具;一个“非面向对象的”木匠则首先考虑的是所用的工具。在本质上,Java的面向对象能力与C 是一样的。
在过去的30年里,面向对象已经证明了自身的价值,一种现代的程序设计语言不使用面向对象技术简直让人难以置信。的确,Java的面向对象特性与C 旗鼓相当。Java与C 的主要不同点在于多继承,在Java中,取而代之的是简单的接口概念,以及Java的元类(metaclass)模型。
反射机制以及对象序列化特性使得Java更加容易实现持久对象和GUI构建器(可以整合外来组件)。
3.分布式
Java有一个扩展的例程库,用于处理像HTTP和FTP这类的TCP/IP协议。Java应用程序能够通过URL打开和访问网络上的对象,其便利程度如同访问本地文件系统一样。 人们已经看到Java的网络能力强大且易于使用。任何曾经试图使用其他语言进行网络编程的人都会惊呼Java竟然把类似打开socket连接这类繁重的任务都变得如此简单。
另外,远程方法调用机制使得分布式对象之间可以进行通信。 现在有一种独立的体系结构,Java 2企业版(J2EE ),它支持大规模的分布式应用。
4.健壮性
Java的设计目标之一在于使用Java编写的程序具有多方面的可靠性。Java投入了大量的精力进行早期的问题检测、后期动态的(运行时)检测,并消除了有出错倾向的状态hellip;hellip;
Java和C 最大的不同在于Java采用的指针模型可以消除重写内存和损坏数据的可能性。这个特性非常有用。Java编译器能够检测许多在其他语言中仅在运行时刻才能够检测出来的问题。至于第二点,对于曾经花费几个小时来检查由于指针bug而引起内存冲突的人来说,一定很喜欢Java的这一特性。
如果曾经只使用过Visual Basic这类没有显式指针的语言,就会感觉这么说似乎有些小题大做。然而,C程序员就没有这样幸运了。他们需要利用指针来存取串、数组、对象,甚至文件。
在Visual Basic中,根本不必使用指针来访问这些实体,也不必关心有关内存分配的问题。另一方面,在没有指针的语言中,许多数据结构很难实现。Java具有双方的优势。它不需要使用指针构造诸如串、数组这样的结构。如果需要,也能够具有指针的能力,如链表。Java绝对是安全的,其原因是永远不会存取一个“坏的”指针,造成内存分配的错误,也不必防范内存泄漏。
5.安全性
Java适用于网络/分布式环境。为了达到这个目标,在安全方面投入了很大精力。 使用Java可以构建防病毒、防墓改的系统。事实证明这是正确的。在Java开发工具箱启用后不久,普林斯顿大学的一些安全专家们发现了在Java 1.0中的某些安全特性方面存在着一些非常隐蔽的bug, Sun Microsystems大力支持对Java的安全性的研究,制定了供人们使用的规范,实现了虚拟机和安全库,并迅速地处理了所有已知的安全bug。在任何情况下,蒙骗Java的安全机制都是十分困难的。现在,发现bug所需的技术性越来越强,数目越来越少。 从一开始,Java就被设计成能够防范各种袭击,包括:
·禁止运行时堆栈溢出。例如,蠕虫等病毒常用的袭击手段。
·禁止在自己的处理空间之外破坏内存。
·未经授权禁止读写文件。许多安全特性相继不断地被加入Java中。
自从Java 1.1问世以来,Java就有了数字签名类(digitally signed class)的概念(请参看卷II)。通过数字签名类,可以确定类的作者。如果信任这个类的作者,这个类就可以在你的机器上拥有更多的权限。
来自微软的基于ActiveX技术的竞争代码传输机制,其安全性完全依赖于数字签名。这显然是不够的,因为微软自身产品的任何用户都可以证实,来自知名提供商的程序会崩溃并对系统产生危害。Java的安全机制比ActiveX要强得多,因为它是在应用程序运行时加以拉制并制止恶意性破坏的。
6.体系结构中立
编译器生成一个体系结构中立的目标文件格式,这是一种编译过场代码,只要有Java运行时系统,就可以在许多处理器上运行。Java编译器通过生成与特定的计算机体系结构无关的字节码指令来实现这一特性。精心设计的字节码不仅可以很容易地在任何机器上被解释执行,而且还可以迅速地翻译成本地机器的代码。这并不是什么新的思想。20多年以前,Niklaus Wirth最初实现的Pascal以及UCSD Pascal系统都使用了这种技术。当然,解释字节码肯定要比全速地运行机器指令慢很多。所以说,这是不是一个好的思想还很难讲!然而,虚拟机有一个选项,它可以将执行最频繁的字韦码序列翻译成机器码,这一过程被称为即时编译。这一策略已经被证明十分有效,致使微软的.NET平台也依赖于虚拟机。虚拟机还有一些其他的优点。虚拟机可以检测指令序列的行为,以增强其安全性。有些程序甚至能够快速地生成字节码,并动态地增强所运行程序的处理能力。
7.可移植性
与C和C 不同,Java规范中没有“依赖具体实现”的地方。塞本数据类型的大小以及有关算法都做了明确的说明。例如,Java中的int永远为32位的整数,而在C/C 中,int可能是16位整数、32位整数,也可能是编译器提供商指定的其他大小。唯一的限制只是int类型的大小不能低于short int,并且不能高于long int。在Java中,数据类型具有固足的大小,们除J代消移祖盯竿八大油ai土女IWJ*I。-ml R77数据以固定的格式存储和传输,消除了字节顺序的困扰。字符串是用标准的Unicode格式存储的。作为系统的组成部分的类库,定义了可移植的接口。例如,有一个抽象的Window类给出了在UNIX, Windows和Macintosh环境下的不同实现。
凡是尝试过的人都知道,要编写一个在Windows, Macintosh和10种不同风格的、在UNIX上看起来都不错的程序有多么困难。Java 1.0就尝试着做了这么一个壮举,发布了一个将常用的用户界面元素映射到不同平台上的简单工具箱。遗憾的是,花费了大量的心血,却构建了一个在各个系统上都难以让人接受的库(而且,在不同平台的图形实现中有不同的bug)。不过,这毕竟是个开端。对于许多应用问题来说,可移植性比花枝招展的用户界面更加重要。而且这些应用程序从Java的早期版本中获益匪浅。现在,用户界面工具箱已经完全被重写了,不再依赖于主机的用户接口。现在的Java版本比早期版本更加稳定,更加吸引人。
8.解释型
Java解释器可以在任何移植了解释器的机器上执行Java字节码。由于链接是一个更加增量且简便的过程,所以开发过程也变得更加快捷,更加具有探索性。增量链接有其优势,但给开发过程带来的好处显然是言过其实了。在任何情况下,都会觉得Java开发工具的速度相当慢。如果习惯于经典的Microsoft Visual C 环境的速度,就会对Java开发环境的性能感到失望。(但是,Visual Studio的当前版本不像经典的环境那样快捷。无论用什么语言编写程序,都需要向老板申请一台速度更快的计算机,以便运行最新的开发环境。)
9.高性能
尽管对解释后的字节码性能已经比较满意,但在有些情况下却需要更加高效的性能。字节码可以(在运行时刻)被快速地翻译成运行该应用程序的特定CPU的机器码。如果使用解释器执行字节码,根本就不可能用术语“高性能”。然而,在许多平台上,还有另一种编译形式,这就是即时编译器(JIT编译器)。它的基本工作方式是一次把字节码编译为本地代码,并将结果缓存起来。在需要的时候重新调用。由于这种方式只需要进行一次解释,从而极大地提高了常用代码运行速度。虽然,即时编译器仍然比真正的本地代码编译器慢一些,但是对某些程序来说,能够提高10倍乃至20倍的速度,而且几乎在任何情况下,都比解释器的速度快得多。这个技术始终在不断完善着,或许有一天它能够达到传统编译系统所无法匹敌的性能。例如,即时编译器可以监视哪些代码被频繁地执行,并对其进行优化,以提高程序的运行速度。
10.多线程
多线程可以带来更好的交互响应和实时行为。 如果曾经使用过其他语言编写多线程的应用程序,就会对Java多线程处理的便捷性惊叹不已。
只要操作系统支持,Java中的线程就可以利用多个处理器。在底层,主流平台的线程实现机制各不相同,Java并没有花费太大的力气对此实现平台无关性。在不同的机器上,只是调用多线程的代码完全相同;Java把多线程的实现交给了底层的操作系统或线程库来完成。(有关线程的详细内容将在卷II中介绍。)尽管如此,多线程的简单性是Java成为颇具魅力的服务器端开发语言的主要原因之一。
11.动态性
从各种角度看,Java与C或C 相比更加具有动态性。它能够适应不断发展的环境。库中可以自由地添加新方法和实例变童,而时客户端却没有任何影响。在Java中找出运行时刻类型信息十分直观。当需要将某些代码添加到正在运行的程序中时,动态性将是一个非常重要的特性。一个很好的例子是:从Internet上下载代码,然后在浏览器上运行。在Java 1.0中,不能直接地获取运行时类型信息,而Java的当前版本允许程序员知晓对象的结构和行为。这对于必须在运行时分析对象的系统来说非常有用。这些系统有:Java GUI构建器、智能调试器、可插入组件以及对象数据库。
微软曾经发布了一个叫做J 的产品,它与Java有许多共享的机制。与Java一样,J 是由虚拟机来执行的,该虚拟机与执行Java字节码的Java虚拟机相互兼容,但是,当与外部代码有接口时就会出现很多不同之处。基本语言的语法与Java几乎一样。只是除了与Windows API的接口之外,还增加了一些可能具有一定实用性的语言结构。Java和J 不仅共享通用的语法,它们的塞本类库(串、实用程序、联网、多线程、数学函数等等)从本质上说也是一致的。然而,图形库、用户界面、远程对象存取的方式则完全不同。为此,微软不再支持J ,取而代之的是另一种被称为C#语言。C#与Java有很多相似之处,然而使用的却是完全不同的虚拟机。甚至还有一种J#语言可将J 的应用迁移到使用C#的虚拟机上。
Java与Internet
这里的思想很简单:用户将从Internet下载Java字节码,并在自己的机器上运行。在网页中运行的Java程序称为applet。为了使用applet,需要一个启用Jav
剩余内容已隐藏,支付完成后下载完整资料
资料编号:[138018],资料为PDF文档或Word文档,PDF文档可免费转换为Word
课题毕业论文、外文翻译、任务书、文献综述、开题报告、程序设计、图纸设计等资料可联系客服协助查找。