Java程序概述

1.1 Java程序设计平台

1.Java是一个完整的平台,有一个庞大的库,包含了很多可重用的代码和一个提供安全性、跨操作系统的可移植性以及自动垃圾收集服务的执行环境。

2.与C++相比,有赏心悦目的语法和易于理解的语义,虽然C++提供了可移植性、垃圾收集,但是没有提供一个大型的库,Java有奇特的绘图功能、网络连接功能和数据库存取功能。

1.2 Java“白皮书”的关键术语

1.2.1 简单性

1.JAVA相比于C++,没有头文件、指针运算(甚至指针语法)、结构、联合、操作符重载、虚基类。

2.小,JAVA的目标之一是支持开发能够在小型机器上独立运行的软件。

1.2.2 面向对象

1.面向对象设计是一种程序设计技术,重点在数据(即对象)和对象的接口上。

用木匠打一个比方,一个“面向对象的”木匠始终关注的是所制作的椅子,
第二位才是所使用的工具;一个“非面向对象的”木匠首先考虑的是所用的工具。

2.Java与C++的主要不同点在于多重继承,在Java中,取而代之的是更简单的接口概念。与C++相比,Java提供了更丰富的运行时自省功能(有关这部分内容将在第5章中讨论)。

1.2.3 分布式

Java有一个丰富的例程库,用于处理像HTTP和FTP之类的TCP/IP协议。Java应用程序能够通过URL打开和访问网络上的对象,其便捷程度就好像访问本地文件一样。

1.2.4 健壮性

1.Java的设计目标之一在于使得Java编写的程序具有多方面的可靠性,Java编译器能够检测许多在其他语言中仅在运行时才能够检测出来的问题。

2.Java和C++最大的不同在于Java采用的指针模型可以消除重写内存和损坏数据的可能性。

1.2.5 安全性

Java适用于网络/分布式环境。为了达到这个目标,在安全方面投入了很大精力。使用Java可以构建防病毒、防篡改的系统。

Java设计成能够防范各种攻击,比如:

1.运行时堆栈溢出。如蠕虫和病毒常用的攻击手段。
2.破坏自己的进程空间之外的内存。
3.未经授权读写文件。

原先,Java对下载代码的态度是“尽管来吧!”。不可信代码在一个沙箱环境中执行,在这里它不会影响主系统。用户可以确信不会发生不好的事情,因为Java代码不论来自哪里,都不能脱离沙箱。
后来发现发现一些小bug会允许不可信的代码攻击主系统。
Java浏览器插件不再信任远程代码,除非代码有数字签名而且用户同意执行这个代码。

1.2.6 体系结构中立

1.翻译成字节码文件,只有计算机底层认识

编译器生成一个体系结构中立的目标文件格式,这是一种编译过的代码,只要有Java运行时系统,这些编译后的代码可以在许多处理器上运行。
Java编译器通过生成与特定的计算机体系结构无关的字节码指令来实现这一特性。
精心设计的字节码不仅可以很容易地在任何机器上解释执行,而且还可以动态地翻译成本地机器代码。

2.即时编译

解释虚拟机指令肯定会比全速运行机器指令慢很多。然而,虚拟机有一个选项,可以将执行最频繁的字节码序列翻译成机器码,这一过程被称为即时编译。

它可以检测指令序列的行为,从而增强其安全性。???

1.2.7 可移植性

1.与C和C++不同,Java规范中没有“依赖具体实现”的地方。基本数据类型的大小以及有关运算都做了明确的说明。

例如:

Java中的int永远为32位的整数,而在C/C++中,int可能是16位整数、32位整数,也可能是编译器提供商指定的其他大小。

二进制数据以固定的格式进行存储和传输,消除了字节顺序的困扰。字符串是用标准的Unicode格式存储的。

2.作为系统组成部分的类库,定义了可移植的接口。

例如:

有一个抽象的Window类,并给出了在UNIX、Windows和Macintosh环境下的不同实现。

除了与用户界面有关的部分外,所有其他Java库都能很好地支持平台独立性。你可以处理文件、正则表达式、XML、日期和时间、数据库、网络连接、线程等,而不用操心底层操作系统。

1.2.8 解释型

1.Java解释器可以在任何移植了解释器的机器上执行Java字节码。

由于链接是一个增量式且轻量级的过程,所以,开发过程也变得更加快捷,更加具有探索性。

你可以做些尝试,然后就能立即看到结果。Java开发环境并没有将重点放在这种体验上。

1.2.9 高性能

尽管对解释后的字节码性能已经比较满意,但在有些场合下还需要更加高效的性能。字节码可以(在运行时刻)动态地翻译成对应运行这个应用的特定CPU的机器码。

在某些情况下,甚至超越了传统编译器,原因是它们含有更多的可用信息。例如,即时编译器可以监控经常执行哪些代码并优化这些代码以提高速度。更为复杂的优化是消除函数调用(即“内联”)。即时编译器知道哪些类已经加载。基于当前加载的类集,如果特定的函数不会被覆盖,就可以使用内联。必要时,还可以撤销优化。

1.2.10 多线程

多线程可以带来更好的交互响应和实时行为。

如今,我们非常关注并发性,因为摩尔定律行将完结。我们不再追求更快的处理器,而是着眼于获得更多的处理器,而且要让它们一直保持工作。

多核处理器还很神秘,而Web编程才刚刚起步,处理器要花很长时间等待服务器响应,需要并发程序设计来确保用户界面不会“冻住”。

1.2.11 动态性

从各种角度看,Java与C或C++相比更加具有动态性。它能够适应不断发展的环境。库中可以自由地添加新方法和实例变量,而对客户端却没有任何影响。在Java中找出运行时类型信息十分简单。

一个很好的例子是:从Internet下载代码,然后在浏览器上运行。

Java成功地推出后不久,微软就发布了一个叫做J++的产品,它与Java有几乎相同的编程语言以及虚拟机。现在,微软不再支持J++,取而代之的是另一种名为C#的语言。C#与Java有很多相似之处,然而使用的却是完全不同的虚拟机。

1.3 Java applet与Internet

这里的想法很简单:用户从Internet下载Java字节码,并在自己的机器上运行。

在网页中运行的Java程序称为applet。

要使用applet,需要启用Java的Web浏览器执行字节码。不需要安装任何软件。任何时候只要访问包含applet的网页都会得到程序的最新版本。

最重要的是,要感谢虚拟机的安全性,它让我们不必再担心来自恶意代码的攻击。

在网页中插入一个applet就如同在网页中嵌入一幅图片。关键的一点是这个图片是活动的。它可以对用户命令做出响应,改变外观,在运行它的计算机与提供它的计算机之间传递数据。

为了在浏览器中得到动态效果,Adobe的Flash技术变得相当流行。后来,Java遭遇了严重的安全问题,浏览器和Java浏览器插件变得限制越来越多。为了在浏览器中得到动态效果,Adobe的Flash技术变得相当流行。后来,Java遭遇了严重的安全问题,浏览器和Java浏览器插件变得限制越来越多。

例如,如果访问Jmol网站,可能会看到一个消息,警告你要适当地配置浏览器允许运行applet。

1.4 Java发展简史:

1994年1.0:具有在网页中执行内嵌代码的能力,但没有提供打印功能。

1996年1.1:改进反射能力,为GUI编程增加新的事件处理模型。

1998年1.2:图形工具箱更加精细而具有可伸缩性,还推出了JAME、JASE。

1.3、1.4:扩展标准类库,提高系统性能,Java applet采用低调姿态,并淡化了客户端的应用,但Java却成为服务器端应用的首选平台。

2004年5.0:添加了泛型类型(generic type)(类似于C++的模板),其挑战性在于添加这一特性并没有对虚拟机做出任何修改。

还有几个受C#启发的很有用的语言特性:“for each”循环、自动装箱和注解。

2006年6:改进性能,增强类库。

2009年被Oracle收购。

2011年7:简单改进。

2014年8:提供了一种“函数式”编程方式,可以很容易地表述并发执行的计算。

设计一个java项目,有哪些需要注意的地方 java设计目的和意义_程序设计语言

1.5 关于Java的常见误解

1. Java是HTML的扩展

Java是一种程序设计语言;HTML是一种描述网页结构的方式。除了用于在网页上放置Java applet的HTML扩展之外,两者没有任何共同之处。

2. 使用XML,所以不需要Java

Java是一种程序设计语言;XML是一种描述数据的方式。可以使用任何一种程序设计语言处理XML数据,而Java API对XML处理提供了很好的支持。此外,许多重要的第三方XML工具采用Java编写。有关这方面更加详细的信息请参看卷Ⅱ。

3. Java是一种非常容易学习的程序设计语言

像Java这种功能强大的语言大都不太容易学习。首先,必须将编写玩具式程序的轻松和开发实际项目的艰难区分开来。需要注意的是:本书只用了7章讨论Java语言。在两卷中,其他的章节介绍如何使用Java类库将Java语言应用到实际中去。Java类库包含了数千种类和接口以及数万个函数。幸运的是,并不需要知道它们中的每一个,然而,要想Java解决实际问题,还是需要了解不少内容的。

4. Java将成为适用于所有平台的通用性编程语言

从理论上讲,这是完全有可能的。但在实际中,某些领域其他语言有更出色的表现,比如,Objective C和后来的Swift在iOS设备上就有着无可取代的地位。浏览器中的处理几乎完全由JavaScript掌控。Windows程序通常都用C++或C#编写。Java在服务器端编程和跨平台客户端应用领域则很有优势。

5. Java只不过是另外一种程序设计语言

Java是一种很好的程序设计语言,很多程序设计人员喜欢Java胜过C、C++或C#。有上百种好的程序设计语言没有广泛地流行,而带有明显缺陷的语言,如:C++和Visual Basic却大行其道。这是为什么呢?程序设计语言的成功更多地取决于其支撑系统的能力,而不是优美的语法。人们主要关注:是否提供了易于实现某些功能的易用、便捷和标准的库?是否有开发工具提供商能建立强大的编程和调试环境?语言和工具集是否能够与其他计算基础架构整合在一起?Java的成功源于其类库能够让人们轻松地完成原本有一定难度的事情。例如:联网Web应用和并发。Java减少了指针错误,这是一个额外的好处,因此使用Java编程的效率更高。但这些并不是Java成功的全部原因。

6. Java是专用的,应该避免使用

最初创建Java时,Sun为销售者和最终用户提供了免费许可。尽管Sun对Java拥有最终的控制权,不过在语言版本的不断发展和新库的设计过程中还涉及很多其他公司。虚拟机和类库的源代码可以免费获得,不过仅限于查看,而不能修改和再发布。Java是“闭源的,不过可以很好地使用”。这种状况在2007年发生了戏剧性的变化,Sun声称Java未来的版本将在GeneralPublic License(GPL)下提供。Linux使用的是同一个开放源代码许可。Oracle一直致力于保持Java开源。只有一点美中不足——专利。根据GPL,任何人都可以得到专利许可,允许其使用和修改Java,不过仅限于桌面和服务器平台。如果你想在嵌入式系统中使用Java,就需要另外一个不同的许可,这很可能需要付费。不过,这些专利在未来十年就会到期,那时Java就完全免费了。