Java编程 2017-01-03
文章来源:电脑爱好者 作者:Gary Chan
有人说,咖啡馆是一个叫人学会放慢步伐、享受生活的地方。这句话不无道理。港人常把饮咖啡称为“叹咖啡”,这个“叹”字就有欣赏、品味的含义,舒适的环境,自然是招徕顾客之道。香港虽然寸金尺土,但无论在闹市或是在风景区,都不难找到精巧雅致的咖啡馆,它们或具欧陆情怀,或富英式韵味,大都环境优美、摆设得体、席位舒适、气派不凡。
许多人想学习编程,但不知道从哪里开始。在这个连载中,我将为你介绍Java编程技术,以及Java程序的开发方法,从零开始,循序渐进,希望能够让你亲自品味Java这种咖啡的香醇与浓郁。 如果说看完这个连载你便能全面掌握Java技术,我绝不敢打这样的保票。喝再多咖啡,我也无法把Java的博大精深浓缩成一个连载。咖啡馆本来就是休闲的地方,所以,我将有选择地为你介绍Java技术的重要组成部分,涉猎面广,但不见得都非常深入。所以,如果想真正在Java技术上有所造诣,也需要你自己的努力和汗水。毕竟,咖啡闻起来香,但本身是苦的,只有不嫌弃这点苦,才能品尝到真味道。
不过你也不必把这个连载看作古板的教程。Java技术从问世到如今,已有近10年的历史。在Java技术成长过程中,涌现了数不尽的英雄人物,帮助Java技术创造了史诗般的辉煌。在这个Java咖啡馆中,我们还准备了许多有趣的传记或故事,称之为“黄糖故事”。本来嘛,编程即创造,本身就有无穷乐趣。
欢迎到http://garychan.3322.org/交流心得体会,以及提出你对本连载的要求和希望。
或许你会把Java理解为印度尼西亚的爪哇岛,那里是早期印度-爪哇文化的中心,盛产具有良质酸味的阿拉比卡咖啡。然而在计算机业界中,一提起Java,人们的神经细胞就会立即兴奋起来,因为Sun的Java技术实在火得不得了!
首先你应该理解人们说的Java究竟是指什么。先说明一下,如果你是初学者,下面某些新名词难免会让你打问号。我希望你能够耐心看完并努力去理解,因为,这些名词会对你理解并喜爱Java有相当帮助。
当人们谈起Java,他们或许是指这些概念中的一种:
★Sun公司的Java编程语言,一种面向对象的(Object Oriented,OO)编程语言。Java语言是C++和Smalltalk等计算机语言的衍生物。学习Java语言,类似于学习一门自然语言(比如英语)的语法。
★Java虚拟机(Java Virtual Machine,JVM)。Java语言编写的程序运行在虚拟机上, 而Java虚拟机是Java程序和操作系统间的中间层,所以Java程序可以运行在所有支持Java虚拟机的电子设备上(注意,不仅仅是个人电脑哦,电子设备还包括手机、PDA以及信息家电等),而且不需要任何额外的操作,这是其他计算机语言无法比拟的优点。Sun公司推广Java的口号便是“一次编写,随处运行”,Java虚拟机便是这句口号的基石。
★Java应用程序编程接口(Application Programming Interface,API)。Java API是预先编写好提供给程序员调用的函数,比如磁盘读写、网络调用、绘制图形等。如果把Java语言比作一门自然语言的语法,那么API便是一部满是好文佳句的书籍,用它可以帮助我们更方便地进行写作而不必样样从头写起。
★Java技术的应用。“哇!你的这部手机支持Java呢!还是RPG游戏?!赶快给我玩,否则……”没错,由于Java语言创造性的优点,又是行业标准,所以受到各大企业的追捧,有广泛的应用。详细介绍请参考第三节。
面向对象(Object Oriented,OO)
Java和C++语言中的面向对象编程机制被认为是继C、FORTRAN等过程式语言之后的又一大进步。使用OO开发软件,程序将更简单、更健壮,所以OO是迄今为止最成功的编程机制。实际上, Smalltalk才是第一个完全面向对象的动态计算机程序设计语言,Smalltalk的发明者Alan Kay今年4月19日还荣获2003年度有“计算机界诺贝尔奖”美誉的ACM图灵奖。值得一提的是,Alan Kay在投身计算机行业之前,曾经是职业音乐家,他的讲演以多姿多彩著称。
OO的学习曲线比较陡峭,所以,如果你已经掌握其他OO语言,那么学习Java便轻松许多,否则还是需要下一番功夫的。如果你没有接触过OO,也不用着急,我们将会在教程中慢慢接触OO。不过,千万不要知难而退而跳过OO这个重要环节。学习Java语法不难,但写出地道的OO代码,需要对OO有相当的领悟。
首先我们谈谈Java技术。需要说明的是,与平时经常听到的或使用的C、C++、Visual Basic、Delphi等计算机语言不同,Java技术特指应用,而不是Java语言。
言归正传。Java技术是帮助你体验互联、享受互联的科技。Sun微系统公司(Sun Microsystems)1995年发明Java以来,Java技术广泛应用于各种设备,为你提供各种工具、信息以及好玩的游戏(见图1)。
1.商业应用
Java技术意味着商机。Java技术可以运行在几乎所有类型和规模的设备上,小到计算机芯片、蜂窝电话,大到超级计算机,无所不在。
超过1亿5千万的移动电话集成了Java技术;PDA和寻呼机中也用到Java技术;电子游戏机、电视机、网站等,也是Java技术的受益者;个人电脑都预装了Java平台(最新的Mac OS X终于能够支持Java了。Linux一贯支持Java。Windows本来支持Java,并且与Sun有法律合约,可是,当比尔·盖茨发现Java技术已经严重威胁到了微软自己的技术时,便悄悄在Windows XP中撤销了Java技术的集成。当然,这种拙劣的手段很快被发现,微软被Sun告上了法庭,不得不赔偿一大笔分手费,终于合法地使阴谋得逞。不敢直面惨淡的竞争,真是让人扼腕叹息。所以,Windows XP的用户需要安装Java的运行库才能够使用Java技术;连红色星球上也有Java技术的运用。
Java技术与红色星球
当科学家们最后确认了“勇气”(Spirit)号探测器成功登陆火星之后,地球人都欢呼雀跃起来:“这真是一个伟大的创举!”
在美国加州帕赛迪纳国家宇航局的喷气推进实验室内,Java之父——James Gosling博士肯定感到他就像在家里一样,因为他周围全是Sun的工作站。“这显然是迄今为止Java应用中最酷的一举!”James Gosling博士高度赞扬说,“Java应用使公众可以实时观看、并下载火星图像。它让人们看到火星清晰的三维立体图像,还有一个模拟探测器。”
这一Java应用被称为Maestro。Java技术给美国宇航局带来了操纵“勇气”号简单易行的低成本方式。Sun实验室和NASA喷气推进实验室还正合作研发一个基于Java技术的控制系统,它将使未来的宇宙探测器在探测这个红色星球之时能够具有智能化的、独立进行决策的能力。
依托Java技术和Sun的服务器技术,Sun还与计算机业界中许多领头企业组成联盟,搭建了构架先进、运行可靠的业务系统,帮助企业、政府、教育机构等更方便、更有效地交流与合作。比如,中国人民保险公司的电子商务系统就是由Sun与Oracle(著名的数据库公司)与BEA(著名的中间件公司)共同组建的。瑞士银行、意大利造币厂等也都采用了Java技术。
实际上,我们身边的许多品牌都是Java技术的合作者,比如富士、惠普、摩托罗拉、诺基亚、松下、西门子等。你可以在Sun的网站上找到长长的列表。
2.移动通讯
是否还记得手机只能用来打电话的日子?感谢Java技术,如今支持Java技术的手机变得越来越可定制,手机游戏也越来越吸引人。
使用最新Java技术的手机,可以浏览应用程序、游戏、服务的列表,然后直接无线下载,即装即用,再也不会因为手机集成固定的几款游戏而玩腻。随着游戏商或者软件公司的不断发布,你每天都有新的游戏可玩、新的软件可用。
3.桌面应用
Java技术使得个人桌面电脑也变得更有趣、更互动。Windows?Mac OS?Linux?无所谓,使用Java技术的程序可以运行于任何操作系统!同时,Java技术也能够提供从联网的角色扮演游戏到市场跟踪调查应用程序,一应俱全。
Java桌面系统(Sun Java Desktop System)是Sun公司基于Java技术的新一代桌面系统,结合了Sun技术驱动的最优秀的开源软件, 如GNOME桌面环境、StarOffice 办公套件、Mozilla浏览器、Evolution邮件与日历客户端、Java 2平台标准版等,是一个集成管理工具和开发工具、容易管理、高度安全的桌面客户系统,目标直指微软的Windows+Office系统套装。毋庸置疑,Java桌面系统低廉的价格、出色的安全性和完整的商务功能,正是微软系统的软肋。为了新一代桌面系统的明天,Sun还启动了名为Looking Glass的高级项目。如若窗体透明并且立体使你可以同时操作多个窗体,你会有怎样的体验?随心所欲地在当前浏览网页上加上你的注释?你的CD或者电影数据库变成3D的电唱机(如图3)?在不远的将来,Sun将在Java桌面系统中加入这样的革新,给使用者带来更丰富的使用体验。
4.开发者
为了方便开发者,Sun把Java区分为J2SE(Java 2 Standard Edition)、J2EE(Java 2 Enterprise Edition)、J2ME(Java 2 Micro Edition)和Java Card四种平台。J2SE是所有Java技术的基础,不管开发人员要开发什么平台的Java应用程序,都必须先从J2SE学起。J2EE技术着重于企业服务器端的应用。J2ME主要针对嵌入式系统,包括手机、PDA等。针对手机应用程序的开发,Sun还提供了免费的J2ME Wireless Toolkit。Java Card技术用来开发可以植入IC智能卡中的应用程序。
以上四种平台的软件开发包(Software Development Kit,SDK)都是免费的,可以从Sun的网站下载。当然,只用SDK未免太不讲究,我们需要开发工具来提高开发效率。这样的工具叫做集成开发环境(Integrated Development Environment,IDE)。以往,Borland JBuilder和IBM Eclipse这两个IDE最受Java程序员的青睐,而Sun自己的IDE却名不见经传。2004年以后,Sun把自己的IDE摆放到重要的位置,努力推进NetBeans和Java Studio的开发。前者是完全用Java撰写的开放源代码的工具,而后者则是重量级的官方开发工具。Sun的开发工具可谓根正苗红,Java程序员终于可以沐浴Sun(阳光)普照了!
Java咖啡馆主要和J2SE打交道,当然不会略过J2EE和J2ME的知识,值得期待哦!
虽然Java技术是那么的诱人,前景也似乎非常光明,但是不是已经有了C、C++等广泛应用并且大获成功的语言了吗?微软不是又在大力推广他们的.Net技术吗?LISP、Prolog等人工智能语言在北美洲、欧洲的金融领域不是也有很大的应用吗?学习Java编程,是不是一个明智的选择呢? 带着这些问题,让我们来看看Java的优势。
1.免费!
Sun免费提供用来开发Java应用程序的一切,你不必付任何的版税。或许你会将信将疑:资本家搞共产了?实际上,Sun在Java上的收益确实不大,远远比不过垄断Java应用服务器技术的IBM和BEA公司,似乎有替别人做嫁衣之嫌。对此,Sun董事长、总裁兼首席执行官Scott McNealy是这样解释的:“Sun并没有用Java赚钱,这就像使用英语不用上税一样,Sun并不通过Java本身来盈利,而是把Java应用到了业务中。”原来是放长线钓大鱼!
与Java本身相比,Java API更是可贵的免费财富。想使用Socket操作网络?API中有;想连接到SQL数据库?API中有;想给应用程序一个漂亮的用户界面?API中有;想要处理数字图形、播放音乐、解析字符串或者创建数字签名?API中全都有。
最后,Java发展了那么多年,优秀的Java教程、技术网站数不胜数。Sun本身就提供了免费的教程,足够自学的了。你可以在 http://java.sun.com/docs/books/tutorial/information/download.html下载这个教程。Bruce Eckel大师的名作Java编程思想(Thinking in java)更是不可不读的佳作,许多狂热爱好者甚至把它当做圣经一样一页一页仔细揣摩。你可到作者的主页http://www.BruceEckel.com免费下载此书的电子版。机械工业出版社也有引进台湾技术作家候捷的中译本,可惜不是免费。
或许你会问,有了那么多优秀的教程,还要你这个Java咖啡馆干什么呢?嗯哼,虽然那些教程和技术文章是如此优秀,但并不适合初学者。Java咖啡馆目的就在于帮助你打好Java技术的基础,掌握Java技术的主要脉络,帮助你迈出进入Java世界的第一步!
2.跨平台
“一次编写,随处运行”,Java系统可以运行在不同的操作系统和硬件上。随着Linux的持续增长以及Mac OSX完全支持Java技术,跨平台的特性变得越来越有分量。
由于Java跨平台,Java API自然也是平台统一的。对程序员而言,没有比统一的API函数能够让他们更欣慰的了——已经有了圆形的轮子,何必再从头发明轮子呢?我们拿Java API与C++的类库相比便可以知道它的可贵之处。有Windows编程经验的C++程序员肯定经历过被MFC(Microsoft Foundation Classes,微软基类库)折磨的日子,学习曲线陡峭,没有若干个月根本无法开始生产,一段时间不接触遗忘率又高。据说,即使在微软公司内部,除了MFC开发小组,谁都不乐意用它。即便你熟悉了MFC,能够顺利开发Windows应用程序,如果你要编写一个Linux应用程序,MFC又派不上用场了,你必须学习Linux下C++开发的一套库函数。还有UNIX、FreeBSD、Mac OS……你学得过来吗?反观Java API,操作系统,你爱谁是谁,只要编写一次便可随处运行!
3.在学术界获得了强有力的支持
由于免费、跨平台、Java语言本身技术先进,在高校中,Java 已经成为许多学科研究、课程和计算的首选语言,用Java做上机作业,一般都是鼓励的。据我所知,北大、清华许多院系的研究生入学考试都可以用Java语言答题。实际上,用Java来完成这些工作,大多数情况下要比用C或其他语言简洁得多,你可以把注意力集中在算法等核心部分,从而获得更高分数。
掌握Java技术的学生一般有更多的工作机会课余兼职,拿到更高报酬,不但减轻家里的负担,更可以让自己早日进入社会锻炼。所以,如果你还在求学,学习Java,一定没错的。
4.简单
与C++等语言相比较,语法上Java是简单的。
谢天谢地,Java提供了垃圾回收机制。以往C++的开发中,最容易出错误的地方便是内存管理,申请的内存用完以后必须释放,否则可使用的内存资源越来越少,直至耗尽系统资源而造成死机。而Java系统中,你可以任意申请内存,Java系统会在适当的时候自动释放无用的内存资源。这个神奇的机制叫做“垃圾回收”,节约了许多调试错误的时间。
在Java中,要写出低劣的代码也不是一件容易的事情。一方面,垃圾回收机制堵住了内存泄漏的可能性,另一方面就是异常捕捉机制,它强迫你做最坏的打算。编写程序时,难免会遇到一些意外,比如文件无法打开、网络读取失败等特殊情况。在C++等语言中是依靠返回值来判断的,如果一句句地检查返回值,那实在是太麻烦了。从而,程序员习惯性地忽略返回值的检查,并安慰自己一切都会好起来的。这便埋下了隐患。在Java中,Java的方法可以抛异常,而你必须应答异常,即使你不想进行任何操作。比如编写打开文件的代码,你不得不响应异常以防意外发生,否则程序根本不能够通过编译。未雨绸缪,使得Java系统更稳健。
5.企业应用的成熟平台
这是Java技术目前最活跃的两大领域之一。我们在前面Java技术介绍中已经提到了不少,这里仅关注跟我们切身相关的优势。
Java技术的企业应用旨在提升企业竞争力,所以Java技术受到了企业的欣赏,市场份额是同类技术中最大的。同时,Java开放标准,所以供应商众多。市面上有许多的应用服务器、工具与构件可以选择,从高端的BEA WebLogic、IBM WebSphere等商业软件,到Tomcat、JBoss等开源的免费工具,一应俱全。作为Java技术的初学者,不需要任何花费就能够进行Java企业应用的自我培训,以后若参与Java的商业项目开发,便可以无缝地把软件移植到高端的商业平台上去。反观.Net,想免费自学,不盗版是不可能的啦。
最后谈谈Java和Web服务。Web服务是软件互操作历史上的里程碑,是技术发展的重要方向,是你绝不能不了解的技术。Sun公司是Java语言的发明者,而作为一个开放的跨平台的技术体系,Java在Web服务的开发方面起着非常重要的作用。Sun被接纳为促进Web服务交互组织WS-I的董事成员后,作为活跃的参与者和业界的领导者,对Web服务互操作性的促进,有着相当重要的意义,也为Java技术的含金量加上了关键的砝码。
6.无线应用
这是Java技术目前最活跃的另一个领域,旨在提供更多、更方便的个性化服务的Java手机应用。未来几年内,势必将出现移动通讯运营商和移动设备应用软件的巨大商机和激烈竞争,并且该趋势很可能与电子政务、电子商务等其他发展相互影响。Java在手机市场的专有性和Java本身的开放性和标准性,使得越来越多的企业加入了Java阵营。
中国也不例外。2003年James Gosling博士首次来到中国,其中重要的一项工作便是与中国联通结盟。
Java之父——James Gosling博士
James Gosling博士以“Java技术之父”闻名于世。他是Java技术的创始人,作为Sun研究院院士,亲手设计了Java语言,完成了Java技术的原始编译器和虚拟机。在他的带领下,Java现已成为互联网的标准编程模式以及分布式企业级应用的事实标准,其跨平台的技术优势为网络计算带来了划时代的变革。目前,Gosling博士积极致力于软件开发工具的研究,以使软件开发工具的功能更强大,更容易为开发人员所使用,确保应用、服务开发的迅速完成。
实际上,手机游戏开发也是一项不错的职业与机遇,成功的例子已经不在少数哦。
7.开放的Java社团——Java Community Process,JCP
JCP是一个让Java出名的功臣。JCP创造了一个开放型论坛,让同好在此交换意见,探索、定义新的平台,群策群力。Java欢迎竞争,因为只有这样才能最大限度地提高领域内的技术,这点与对手微软.Net技术大相径庭。在Java的舞台上有很多演员,任何人都可以参与到JCP的过程中去,帮助Sun决定Java的发展和未来,同时也挑战自己的影响力。从而,你可以发现Java世界中新的名词层出不穷,远远走在规范之前。而在微软.Net技术的舞台上,你只能看到一个演员,那就是微软自己。
8.开源组织或者非盈利机构的支持
开源组织是无政府主义的梦想——没有政体,没有所属权,言论与行动自由,仅仅依靠渴望共享与交流的信仰及无私奉献来维系。Java世界中,开源组织与非盈利机构发挥到了极致,许多出色的工具都出自它们之手。比如JUnit、Cactus、Tomcat、Struts、JBoss、Eclipse、ANT、Xerces、Hibernate、Axis、AspectJ等等,许多工具还会出现在我们的咖啡馆中,扮演重要的角色。
Java世界中,便宜无好货绝对不成立,这些工具拥有足以和商业软件媲美的质量,很多商业IDE还集成了这些工具。对Java程序员而言,生活不单单会变得轻松,更重要的,你能够看到希望,有为大家贡献自己力量的机会!
看到这里,如果你能够有学习Java技术的冲动,我也心满意足了。选择一门语言是困难的,你必须有所取舍。即使你是坚定的微软技术迷,有时间也欢迎到这个咖啡馆小坐一会儿,叹一叹Java这别样的风情。