Java程序设计概述

Java程序设计平台

Java是一个完整的平台,含有一个庞大的类库,包括很多重用代码,如:安全性、跨操作系统可移植性以及自动垃圾回收器等。Java功能齐全是一个高质量的执行环境,还提供庞大的库。诸如此类的优势所以吸引了广大的程序设计者以及开发人员。

Java的特性

  • 简单性
    设计时接近C++,剔除C++中很少使用、难以理解、易混淆的特性,例如头文件、指针运算、结构、联合、操作符重载以及虚基类等。体积小可以运行在小型机器上(Java Micro Edition)适用于嵌入式设备。
  • 面向对象
    面向对象设计是一种程序设计技术,与此对应的有面向过程。面向对象重点在数据与对象接口上,即考虑问题时将万事万物作为一个独立的个体,该个体具有特定的属性以及功能。而面向过程关注的是事物功能的实现过程。
  • 分布式
    Java有专门处理HTTP以及FTP之类的TCP/IP协议的类库,应用程序可以通过URL打开和访问网络上的对象。
  • 健壮性
    Java具有多方面的可靠性如早期检测、后期检测、消除容易出错的地方,Java采用指针模型消除重写内存和损坏数据的可能性。Java编译器能检测出许多其它语言仅在运行时才能检测出来的问题。
  • 安全性
    Java适用于网络/分布式环境,在设计之初就能防范各种攻击,如:运行时栈溢出、破环自己的进程空间之外的内存、未经授权读写文件。以上种种原因在于Java代码不能脱离沙箱(JVM)。
  • 体系结构中立
    Java编译器通过生成与特定的计算机体系结构无关的字节码指令来生成一个体系结构中立的目标文件格式,这是一种编译过的代码,只要有Java运行时系统,这些编译后的代码可以在许多处理器上运行。当然,解释虚拟机指令肯定会比全速运行机器指令慢很多。然而,虚拟机有一个选项,可以将执行最频繁的字节码序列翻译成机器码,这一过程被称为即时编译。Java虚拟机可以检测指令序列的行为,从而增强其安全性。
  • 可移植性
    Java数据类型具有固定的大小,二进制数据以固定的格式进行存储和传输,消除了代码移植时数据类型大小不固定以及字节顺序的困扰。字符串是用标准的Unicode格式存储的。除了与用户界面有关的部分外,所有其他Java库都能很好地支持平台独立性。你可以处理文件、正则表达式、XML、日期和时间、数据库、网络连接、线程等,而不用操心底层操作系统。不仅程序是可移植的,Java API往往也比原生API质量更高。
  • 解释型
    Java解释器可以在任何移植了解释器的机器上执行Java字节码。由于链接是一个增量式且轻量级的过程,所以,开发过程也变得更加快捷,更加具有探索性。
  • 高性能
    尽管对解释后的字节码性能已经比较满意,但在有些场合下还需要更加高效的性能。字节码可以(在运行时刻)动态地翻译成对应运行这个应用的特定CPU的机器码。即时编译器出现可以监控执行频率较高的代码可以大大提高了Java程序的执行效率,更为复杂的优化可以消除函数调用。
  • 多线程
    多线程可以带来更好的交互响应和实时行为。摩尔定律行将完结,处理器的性能即将遇到瓶颈,所以需要多个处理器协同工作保持一直工作。Java时第一个支持并发程序的设计语言。
  • 动态性
    Java更具动态性,能够适应不断发展的环境。类库中可以自由加入新的特性,而不影响客户端。动态的向正在运行的程序中添加代码,是一个非常重要的特性。

Java applet与Internet

在网页中运行的Java程序称为applet。可以在从Internet下载Java字节码在本地启用JavaWeb浏览器进行运行,不需要安装任何软件。在网页中嵌入一个applet就如同嵌入一个动态的图片,可以根据用户的命令做出响应。applet首次出现因其魅力而使Java迅速地流行起来。然而由于诸多原因如不同版本Netscape与Internet Explorer运行不版本Java并且有些早已过时、Adobe的Flash技术的流行、遭遇严重的安全问题、浏览器插件限制越来越多,导致applet流行受阻。

Java发展史

1991年,由Patrick Naughton和James Gosling带领的Sun公司的工程师小组想要设计一种小型的计算机语言,主要用于像有线电视转换盒这类的消费设备。由于这些消费设备的处理能力和内存都很有限,所以语言必须非常小且能够生成非常紧凑的代码。

另外,由于不同的厂商会选择不同的中央处理器(CPU),因此这种语言的关键是不与任何特定的体系结构捆绑在一起。这个项目被命名为“Green”。

代码短小、紧凑且与平台无关,这些要求促使开发团队设计一个可移植的语言,可以为虚拟机生成中间代码。

不过,Sun公司的人都有UNIX的应用背景。因此,所开发的语言以C++为基础,而不是Lisp、Smalltalk或Pascal。不过,就像Gosling在专访中谈到的:“毕竟,语言只是实现目标的工具,而不是目标本身”。Gosling把这种语言称为“Oak”(这么起名的原因大概是因为他非常喜欢自己办公室外的橡树)。Sun公司的人后来发现Oak是一种已有的计算机语言的名字,于是,将其改名为Java。事实证明这是一个很有灵感的选择。

1992年,Green项目发布了它的第一个产品,称之为“*7”。这个产品具有非常智能的远程控制。遗憾的是,Sun公司对生产这个产品并不感兴趣,Green项目组的人员必须找出其他的方法来将他们的技术推向市场。然而,没有一个标准消费品电子公司对此感兴趣。于是,Green项目组竞标了一个提供视频点播等新型服务的有线电视盒的项目,但没有成功(有趣的是,得到这个项目的公司的领导恰恰是开创Netscape公司的Jim Clark。Netscape公司后来对Java的成功给予了很大的帮助)。

Green项目(这时换了一个新名字——“First Person公司”)花费了1993年一整年以及1994年的上半年,一直在苦苦寻求其技术的买家。然而,一个也没有找到(Patrick Naughton,项目组的创立人之一,也是完成此项目大多数市场工作的人,声称为了销售这项技术,累计飞行了300000英里)。1994年First Person公司解散了。

当这一切在Sun公司发生的时候,Internet的万维网也在日渐发展壮大。万维网的关键是把超文本页面转换到屏幕上的浏览器。1994年大多数人都在使用Mosaic,这是一个1993年出自伊利诺斯大学超级计算中心的非商业化的Web浏览器(Mosaic的一部分是由Marc Andreessen编写的。当时,他作为一名参加半工半读项目的本科生,编写了这个软件,每小时的薪水只有6.85美元。他后来成了Netscape公司的创始人之一和技术总监,可谓名利双收)。

在接受SunWorld采访的时候,Gosling说在1994年中期,Java语言的开发者意识到:“我们能够建立一个相当酷的浏览器。我们已经拥有在客户机/服务器主流模型中所需要的体系结构中立、实时、可靠、安全——这些在工作站环境并不太重要,所以,我们决定开发浏览器。”

实际的浏览器是由Patrick Naughton和Jonathan Payne开发的,并演变为HotJava浏览器。为了炫耀Java语言超强的能力,HotJava浏览器采用Java编写。设计者让HotJava浏览器具有在网页中执行内嵌代码的能力。这一“技术印证”在1995年5月23日的SunWorld上得到展示,同时引发了人们延续至今的对Java的狂热追逐。

1996年年初,Sun发布了Java的第1个版本。人们很快地意识到Java1.0不能用来进行真正的应用开发。的确,可以使用Java 1.0来实现在画布上随机跳动的神经质的文本applet,但它却没有提供打印功能。坦率地说,Java 1.0的确没有为其黄金时期的到来做好准备。后来的Java 1.1弥补了其中的大多明显的缺陷,大大改进了反射能力,并为GUI编程增加了新的事件处理模型。不过它仍然具有很大的局限性。

1998年JavaOne会议的头号新闻是即将发布Java 1.2版。这个版本取代了早期玩具式的GUI,并且它的图形工具箱更加精细而具有可伸缩性,更加接近“一次编写,随处运行”的承诺。在1998年12月Java 1.2发布三天之后,Sun公司市场部将其名称改为更加吸引人的“Java 2标准版软件开发工具箱1.2版”。

除了“标准版”之外,Sun还推出了两个其他的版本:一个是用于手机等嵌入式设备的“微型版”;另一个是用于服务器端处理的“企业版”。本书主要讲述标准版。

标准版的1.3和1.4版本对最初的Java 2版本做出了某些改进,扩展了标准类库,提高系统性能。当然,还修正了一些bug。在此期间,Java applet采用低调姿态,并淡化了客户端的应用,但Java却成为服务器端应用的首选平台。

5.0版是自1.1版以来第一个对Java语言做出重大改进的版本(这一版本原来被命名为1.5版,在2004年的JavaOne会议之后,版本数字升至5.0)。经历了多年的研究,这个版本添加了泛型类型(generic type)(类似于C++的模板),其挑战性在于添加这一特性并没有对虚拟机做出任何修改。另外,还有几个受C#启发的很有用的语言特性:“for each”循环、自动装箱和注解。
版本6(没有后缀.0)于2006年年末发布。同样,这个版本没有对语言方面再进行改进。但是,改进了其他性能,并增强了类库。

随着数据中心越来越依赖于商业硬件而不是专用服务器,Sun Microsystems终于沦陷,于2009年被Oracle收购。Java的开发停滞了很长一段时间。直到2011年Oracle发布了Java的一个新版本,Java 7,其中只做了一些简单的改进。

2014年,Java 8终于发布,在近20年中这个版本有了最大的改变。Java 8提供了一种“函数式”编程方式,可以很容易地表述并发执行的计算。所有编程语言都必须与时俱进,Java在这方面显示出非凡的能力。

表1-1展示了Java语言以及类库的发展状况。可以看到,应用程序编程接口(API)的规模发生了惊人的变化。
表1-1 Java语言的发展状况
在这里插入图片描述

关于Java的常见误解

关于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未来的版本将在General Public License(GPL)下提供。Linux使用的是同一个开放源代码许可。Oracle一直致力于保持Java开源。只有一点美中不足——专利。根据GPL,任何人都可以得到专利许可,允许其使用和修改Java,不过仅限于桌面和服务器平台。如果你想在嵌入式系统中使用Java,就需要另外一个不同的许可,这很可能需要付费。不过,这些专利在未来十年就会到期,那时Java就完全免费了。
  7. Java是解释型的,因此对于关键的应用程序速度太慢了早期的Java是解释型的。现在Java虚拟机使用了即时编译器,因此采用Java编写的“热点”代码其运行速度与C++相差无几,有些情况下甚至更快。
    对于Java桌面应用速度慢,人们已经抱怨很多年了。但是,今天的计算机速度远比人们发出抱怨的时候快了很多。一个较慢的Java程序与几年前相当快的C++程序相比还要快一些。
  8. 所有的Java程序都是在网页中运行的
    所有的Java applet都是在网页浏览器中运行的。这也恰恰是applet的定义,即一种在浏览器中运行的Java程序。然而,大多数Java程序是运行在Web浏览器之外的独立应用程序。实际上,很多Java程序都在Web服务器上运行并生成用于网页的代码。
  9. Java程序是主要的安全风险
    对于早期的Java,有过关于安全系统失效的报道,曾经一度引起公众哗然。研究人员将这视为一种挑战,即努力找出Java的漏洞,对applet安全模型的强度和复杂度发起挑战。随后,人们很快就解决了引发问题的所有技术因素。后来又发现了更严重的漏洞,而Sun以及后来的Oracle反应却过于迟缓。浏览器制造商则有些反应过度,他们甚至默认禁用了Java。客观地来讲,可以想想针对Windows可执行文件和Word宏有数百万种病毒攻击,并造成了巨大的损害,不过奇怪的是却很少有人批评被攻击平台的脆弱。
    有些系统管理员甚至在公司浏览器中禁用了Java,而同时却允许用户下载可执行文件和Word文档,实际上,这些带来的风险远甚于使用Java。尽管距离Java诞生已经20年之久,与其他常用的执行平台相比,Java还是安全得多。
  10. JavaScript是Java的简易版
    JavaScript是一种在网页中使用的脚本语言,它是由Netscape发明的,原来的名字叫做LiveScript。JavaScript的语法类似Java,除此之外,两者无任何关系。当然,名字有些相像。JavaScript的一个子集已经标准化为ECMA-262。与Java applet相比,JavaScript更紧密地与浏览器集成在一起。特别是JavaScript程序可以修改正在显示的文档,而applet只能在有限的区域内控制外观。
  11. 使用Java可以用廉价的Internet设备取代桌面计算机
    当Java刚刚发布的时候,一些人打赌:肯定会有这样的好事情发生。一些公司已经生产出Java网络计算机的原型,不过用户还不打算放弃功能强大而便利的桌面计算机,而去使用没有本地存储而且功能有限的网络设备。当然,如今世界已经发生改变,对于大多数最终用户,常用的平台往往是手机或平板电脑。这些设备大多使用安卓平台,这是Java的衍生产物。学习Java编程肯定也对Android编程很有帮助。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

追Star仙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值