有人說,咖啡館是一個叫人學會放慢步伐、享受生活的地方。這句話不無道理。港人常把飲咖啡稱為“嘆咖啡”,這個“嘆”字就有欣賞、品味的含義,舒適的環境,自然是招徠顧客之道。香港雖然寸金尺土,但無論在鬧市或是在風景區,都不難找到精巧雅致的咖啡館,它們或具歐陸情懷,或富英式韻味,大都環境優美、擺設得體、席位舒適、氣派不凡。
許多人想學習編程,但不知道從哪里開始。在這個連載中,我將為你介紹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這別樣的風情。
新聞熱點
疑難解答