AR包
WAR(Web Archive file)網絡應用程序文件,是與平臺無關的文件格式,它允許將許多文件組合成一個壓縮文件。War專用于Web方面。大部分的JAVA WEB工程,都是打成WAR包進行發布的。
War是一個web模塊,其中需要包括WEB-INF,是可以直接運行的WEB模塊。通常用于網站,打成包部署到容器中,以tomcat來說,將war文件包放置它的\webapps\目錄下,啟動Tomcat,,這個包可以自動進行解壓,也就是你的web目錄,相當于發布了。
典型的war包內部結構如下:
webapp.war
| index.jsp
|
|— images
|— META-INF
|— WEB-INF
| web.xml // WAR包的描述文件
|
|— classes
| action.class // java類文件
|
|— lib
other.jar // 依賴的jar包
share.jar
War包中的文件格式按照一定的目錄結構來組織。根據其根目錄下包含有html和jsp文件,或者包含有這兩種文件的目錄,另外還有WEB-INF目錄。通常在WEB-INF目錄下包含有一個web.xml文件和一個classes目錄,web.xml是這個應用的配置文件,為classes目錄下則包含編譯好的servlet類,或者servlet所依賴的其他類(如javabean)。通常這些依賴的類也可以打包成jar包放在WEB-INF下lib目錄下。
JAR包
JAR包通常是開發時要引用的通用類,打成包便于存放管理。簡單來說,jar包就是別人已經寫好的一些類,然后對這些類進行打包。可以將這些jar包引入你的項目中。可以直接使用這些jar包中的類和屬性,這些jar包放在lib目錄下。
JAR文件格式以流行的ZIP文件格式為基礎;與ZIP文件不同的是,jar文件不僅用于壓縮和發布,而且還用于部署和封裝庫、組件和插件程序,并可被像編譯器和JVM這樣的工具直接使用。Jar文件與zip文件唯一的區別就是在jar文件的內容中,包含了一個META-INF/MANIFEST.MF文件,這個文件是在生成jar文件的時候自動創建的。
作用:
1、作為工具包和類庫,這個是最基礎的作用,在大型項目中,一般會依賴N多個jar包
2、作為應用工程和擴展的構建單元;開發大型應用的時候,一般會將應用分為幾個單元,每個單元用jar包封裝,并相互依賴。
3、作為組件、applet或者插件程序的部署單元。
4、用于打包與組件關聯的輔助資源。
典型的jar包內部結構如下:
tools.jar
| resource.xml // 資源配置文件
| other.xml
|
|— META-INF
| MANIFEST.MF // jar包的描述文件
|— com // 類的包目錄
|—test
util.class //java類文件
EAR包
JAR(java歸檔文件)是與平臺無關的文件格式,它允許將許多文件組合成一個壓縮文件,為J2EE應用程序創建的JAR文件是EAR文件(企業JAR文件)。針對企業級項目,實際上EAR包中包含WAR包和幾個企業項目配置文件而已,一般服務器選擇WebSphere等,都會使用EAR包。
典型的ear包內部結構如下:
app.ear
| ejb.jar // ejb-jar包
| other.jar // 普通的jar包
| webapp.war // war包
|
|—META-INF
application.xml // EAR描述文件
者 | 泰斗賢若如
責編 | 伍杏玲
20世紀90年代,單片式計算機系統誕生,單片式計算機系統不僅廉價,而且功能強大,使用它可以大幅度提升消費性電子產品的智能化程度。
SUN公司為了搶占市場先機,在1991年成立了一個由詹姆斯·高斯林(James Gosling)領導,名為“Green”項目小組,目的是開發一種能夠在各種消費性電子產品上運行的程序架構。
那么使用何種編程語言來設計,是項目小組頭疼的事。當時C++較為有優勢的,項目小組首先考慮的是采用它來編寫程序,但C++過于復雜和龐大,再加上由于消費電子產品所采用的嵌入式處理器芯片的種類繁雜,需要讓編寫的程序跨平臺運行,假如用C++編寫的話對程序的跨平臺運行不友好。
最后項目小組決定:既不用C++編寫,也不開發全新的編程語言,而是對C++進行改造:去除了C++復雜的指針和內存管理,并結合嵌入式系統的實時性要求,最終在1992年,他們開發了一種名為“Oak”的面向對象語言。
科當他們在向硬件生產商進行演示的時候,硬件生產商對此并不感冒,OaK語言因為缺乏硬件的支持而無法進入市場,從而被擱置一旁。
1994年,項目小組看到了瀏覽器在未來的發展前景,于是決定將OaK應用于萬維網。1995年,他們用OaK語言研發了一種能將小程序嵌入到網頁中執行的技術——Applet,由于Applet不僅能嵌入網頁,還可隨同網頁在網絡上進行傳輸,這讓無數的程序員看到了OaK這門語言,與此同時,OaK正式更名為Java。從此,Java在互聯網的推動下火了。
1996年1月,SUN公司推出了JDK1.0。在JDK1.0發布后,有很多程序員學習并運用Java來制作網頁,JDK包括兩大部分:開發工具和運行環境。
運行環境包括核心API、集成API、用戶界面API、發布技術、Java虛擬機(JVM)。JDK1.0的發布,標志著Java成為一種獨立的開發工具。在同年9月,約有8.3萬個網頁應用了Java技術來制作。
JDK1.0的代表性技術有:Java虛擬機、Applet、AWT等。
1997年2月,SUN公司緊接著推出了JDK 1.1,在推出后3周時間里,達到了近22萬次的下載量。4月2日,首屆Java One大會在美國舊金山召開,參加會議的人超過一萬人,創造了當時全球同類會議規模最高的紀錄。9月,Java Developer Connection社區成員超過10萬,同年還有10個最主要的操作系統供應商正式聲明將在他們的產品中使用Java。
JDK1.1的代表性技術有:JDBC、JavaBeans、RMI、JAR文件格式、Java語法中的內部類和反射。
1998年12月8日,JDK1.2——第二代Java平臺的企業版J2EE發布。
1999年6月,Sun公司把Java體系分為三個方向:
J2ME(Java2 Micro Edition,Java2平臺的微型版),應用于移動、無線及有限資源的環境;
J2SE(Java 2 Standard Edition,Java 2平臺的標準版),應用于桌面環境;
J2EE(Java 2Enterprise Edition,Java 2平臺的企業版),應用于基于Java的應用服務器。
隨著供應商的不同,Java的API也分為三大類:
Java Core API:Java核心類庫;
Java Optional API:對之前API的擴充;
特殊API:由特殊廠商或組織提供的API。
Java 2平臺的發布,是Java發展過程中最重要的一個里程碑,標志著Java的應用開始普及。
JKD1.2的代表性技術有:Swing、Java IDL、EJB、Java Plug-in等,在API文檔中,添加了strictfp關鍵字和Collections集合類。
1999年4月27日,HotSpot虛擬機發布。HotSpot是由一家叫“Longview Technologies”的小公司開發的,后來被SUN公司收購。HotSpot虛擬機發布時是作為JDK 1.2的附加程序提供的,后來它成為了JDK 1.3及之后所有版本的Sun JDK的默認虛擬機 。
2000年5月,JDK1.3、JDK1.4和J2SE1.3相繼發布,J2SE1.3是對J2SE1.2的補充和擴展,從應用領域的角度分析,JavaSE1.3已經涵蓋了數據庫、WEB、網絡、圖形、多媒體、電話、影像等大部分的信息技術領域。
2002年2月26日,J2SE1.4發布。與J2SE1.3相比,多了近62%的類和接口。在這些新特性當中,還提供了廣泛的XML支持、安全套接字(Socket)支持(通過SSL與TLS協議)、全新的I/OAPI、正則表達式、日志與斷言。
2004年9月30日,J2SE1.5發布,成為Java語言發展史上的又一里程碑。為了表示該版本的重要性,J2SE 1.5更名為Java SE 5.0(內部版本號1.5.0)。Java SE 5.0包含了從1996年發布1.0版本以來的最重大的更新,其中包括泛型支持、基本類型的自動裝箱、改進的循環、枚舉類型、格式化I/O及可變參數。
2005年6月,在Java One大會上,Sun公司發布了Java SE 6。此時,Java的各種版本已經更名,已取消其中的數字2,如J2EE更名為JavaEE,J2SE更名為JavaSE,J2ME更名為JavaME。
2011年7月28日,收購Sun公司的Oracle發布了 Java SE 7,引入了二進制整數、支持字符串的switch語句、棱形語法、多異常捕抓、自動關閉資源的try語言等新特性。
2014年3月18日,Oracle公司發布Java SE8,這次版本升級為Java帶來了全新的Lambda表達式、流式編程等大量新特性,這些新特性使得Java變得更加強大。
2017年9月22日,Oracle公司發布Java SE 9,這次版本升級強化了Java的模塊化系統,讓Java語言更輕量化,且采用了更高效、更智能的GI 垃圾回收器,并在核心類庫上進行大量更新,可進一步簡化編程。
2018 年 3 月 21 日,Java SE 10 發布,Java 10 版本帶來了很多新特性,其中最備受廣大開發者關注的莫過于局部變量類型推斷。此外,還包垃圾收集器改善、GC 改進、性能提升、線程管控等新特性。
2018年9月26日,Java SE 11 發布。這是 Java 大版本周期變化后的第一個長期支持版本(LTS版本持續支持到2026年9月)。Java11 帶來了 ZGC、Http Client 等重要特性,一共包含 17 個 JEP(JDK Enhancement Proposals,JDK 增強提案)。
2019年3月20日,Java SE 12 發布。Java 12是短期支持版本,可在下一個版本發布之前獲得Oracle的商業支持。
2019年9月23日,Java SE 13發布,此版本中添加了“文本塊”,文本塊是一個多行字符串文字,避免對大多數轉義序列的需要,以可預測的方式自動格式化字符串,并在需要時讓開發人員控制格式。
經過二十多年的版本更新,一步步的積累,造就了如今的Java。
一覽Java在更新歷程中所新增的特性:
虛擬機——Sun Classic VM
Java小應用程序——Applet
Java圖形設計——AWT
Jar包——Jar
Java規范——JavaBeans
連接數據庫——JDBC(Java DataBase Connectivity)遠程調用——RMI
內部類——Inner Class
反射——Reflection
字符串常量做內存映射
對打包的Java文件進行數字簽名
控制授權訪問系統資源的策略工具
JDBC中引入可滾動結果集,BLOB,CLOB,批量更新和用戶自定義類型
在Applet中添加聲音支持
即時編譯技術——JIT
運行插件——Java Plug-In
J2EE規范——EJB
平臺對象請求代理體系結構——Java IDL
集合——Collections
數學運算
CORBA IIOP實現RMI的通信協議
Java 2D新特性
Jar文件索引
時間——Timer API
聲音——Java Sound API
正則表達式
異常鏈
XML解析器
XSLT轉換器
XML處理
Java打印服務
JDBC高級——Java Web Start JDBC 3.0
可以操作系統的高級功能——Preferences
高級流——NIO
日志功能——Logging
圖片流——Imgae I/O
自動裝箱拆箱
泛型
元數據
靜態引入
內省——Introspector
枚舉——enum
可變長參數——Varargs
高級虛幻——foreach
內存模型——JMM
并發包——concurrent
命名方式變更
腳本語言
編譯API和微型HTTP服務器API
鎖與同步
垃圾收集
類加載
Kerberos
LDAP
JDBC高級——JDBC 4.0
Java? 編程語言編譯器的接口——Java Compiler
可插拔注解
公鑰基礎設——Native PKI
通用安全服務——Java GSS
web服務——Web Services
switch語句塊中允許以字符串作為分支條件
創建泛型對象時應用類型推斷
try-with-resources
值得自動處理
數值類型可以用二進制字符串表示
引入Java NIO.2開發包
動態語言支持
安全的加減乘除
Map集合支持并發請求
Java SE 8在Java更新的歷史中是一個非常重要的版本,引入的函數式編程使得Java編程更為強大,較典型的有:
Java工具的操作增強
Unicode增強功能,包括對Unicode 6.2.0的支持
并行陣列排序
標準編碼和解碼Base64
無符號算術支持
新的并發
Lambda表達式
方法參數反射Java XML技術增強功能
虛擬機操作增強JSSE服務器中的SSL / TLS服務器名稱指示(SNI)擴展支持
支持AEAD算法……
Java SE 9、10……版本的不斷更新,是對舊版本改良以及補充,越更新,越友好。
看今朝,Java 位居世界編程語言榜首,風光無限好。
憶往昔,初生之時便陷入低谷,后借互聯網之勢拔地而起,J2SE攻占桌面、J2ME攻占手機、J2EE攻占服務器,Java三大強軍也曾飽受歲月蹉跎,后浴火重生,最終投入Oracle懷抱,換得春暖花開。此情此景,悲之、喜之、感之、嘆之,Java如今之風光,并非一日之功,望天下眾程序員惜之、盼之。
Java的更新速度是很快的,每隔一段時間都會進行一次版本迭代,來適應新技術的發展趨勢,學Java的程序員遍布全世界,很慶幸我也是茫茫Java程序員中的一員,近些年來很火熱的大數據也是和Java息息相關。
Java本身具有很大的開放性和可擴展性,再加上Java如此雄厚的歷史背景,我相信一個語言只要不斷發展,就很難會被時代淘汰。
2、用就業的眼光看Java:互聯網的時代、人工智能的時代、5G+的時代,Java一直都在
隨著網絡的發展,如今Java已廣泛應用于數據中心、PC、游戲、移動電話等行業,從近幾年的招聘量上來看,對Java開發人員的需求量依舊很大,Java的學習依舊是主流,發展前景一片光明。
我國信息化人才培養還處于發展階段,導致社會實際需求人才基數遠遠大于信息化人才的培養基數,使得數以萬計的中小企業急需全面系統掌握Java軟件開發基礎技能與知識的軟件工程師。
Java軟件工程師就業前景良好,再加上Java軟件工程師不僅IT專業企業需要,廣大的非IT企業也需要,前景是較為樂觀的。目前我所了解的有:
1、Java企業級應用開發
目前Java在許多行業的企業信息應用方面有很多,比如郵箱、物流、醫療、股票、OA、金融等信息系統。這些和目前的主流行業密切相關的,所以Java開發者的需求還是較大,待遇也是相當不錯,工資水平與Java互聯網方向的差不多,很容易在一些大型企業就業,只要你有恒心有毅力地學習,我想至少面臨這么多選擇時,你不會一無所用,機會總是會留給有準備的人。
2、Java網站建設
近些年來,網站建設業務一直呈現快速上升的勢頭,行業市場也是越來越大,很多新技術的應用使得企業網站建設更具魅力、更加強大。Java編程語言將使網站結構更緊密,訪問更流暢,更能適應新的要求。雖然以目前的市場分析Java做網站成本太高,而且對硬件要求也比較高,中小企業大多都會選擇使用PHP語言進行開發,但是在很多大型企業還是用Java語言的比較多,所以你依舊有機會,向大廠沖鴨。
3、 Android開發
Android是全球最大的智能手機操作系統,前幾年Android發展快速,在國內的市場份額也是越來越高,但在快速興起的小程序和H5的沖擊下,導致Android原生開發門檻增高,公司對Android開發工程師的要求也提高了,這就要求學習Android的程序員們精于技術,優秀的Android開發工程師仍然存在不小的缺口,中、高級的Android工程師還是很受歡迎的。Android應用的主要開發語言就是Java,所以如果你技術很精,選擇Android這個方向還是很不錯的。
4、Java游戲開發
Java可用來編寫游戲腳本,如Bean、Shell、Groovy等腳本語言可以方便、無縫的和Java語言進行交互,這些極大地促進Java游戲編程。當前國內游戲較為火熱,很多熱門電競,所以國內游戲專業人才的需求一直都存在缺口。所以,好好努力去填補這些缺口吧,只要你有過人的技術,不愁沒飯吃。
我是一名學Java的程序員,通過整理撰寫本文,我又重新認識了Java。在我看來,Java的”火“并不是偶然的,有很多因素的積累而成。Java的發展進程值得考究,作為一名Java的忠實粉絲,Java的重要性不言而喻,相信不管是計算機專業還是非計算機專業的程序員也會感同身受。
對我而言,其他Java程序員也是一樣,因為對Java有著持久不衰的熱愛,所以愿意不斷追求專業追求卓越,而帶著這份忠誠的熱愛,我們不畏風雨,一路前行。不忘初心,方得始終,我愿以Java為馬,詩酒趁年華!
參考:Java百度百科
作者簡介:泰斗賢若如,一個熱愛分享的程序員,始終相信“越懂得分享,你的價值增值越大”。
在這一章中,主要介紹如何安裝Java開發工具箱(JDK)以及如何編譯和運行各種類型的程序:控制臺程序、圖形應用程序以及applet應用程序。使用JDK的方法是在shell窗口中鍵入命令行。然而,很多程序員更偏愛使用集成開發環境。為此,將在稍后介紹如何使用免費獲得的開發環境來編譯和運行Java程序。盡管學起來很容易,但集成開發環境需要吞噬大量資源,在編寫小型程序時會給人帶來煩惱。作為折中方案,再介紹一下如何使用可以調用Java編譯器并運行Java程序的文本編輯器。一旦弄清楚了本篇的技術,并選定了自己的開發工具,就可以學習探索Java程序設計語言了。
Sun Microsystems公司為Solaris、Linux和Windows提供了Java 2 標準版(J2SE)的最新、最完全的版本。用于Macintosh和許多其他平臺的版本仍處于各種不同的開發狀態中,不過這些版本由相應平臺的開發商授權并分發。
下載JDK
要想下載Java開發工具箱,必須到Sun網站進行搜尋,并在獲得所需的軟件之前弄清一些專業術語。
JDK是Java Development Kit的縮寫。有點混亂的地方是:工具箱的版本1.2~1.4稱為JavaSDK(Software Development Kit)。在某些場合下,還會看到這些舊術語。
另外,隨處可見的術語J2SE是指“Java 2 Standard Edition”;J2EE是指“Java 2 EnterpriseEdition”;J2ME是指“Java 2 Micro Edition”。
Java 2這種提法是從1998年開始使用的。當時Sun公司的銷售人員感覺通過增加小數點后面的數值來改變版本號并沒有反映出JDK 1.2的重大改進。但是,由于在發布之后才意識到這個問題,所以決定將開發工具箱的版本號仍然沿用1.2,接下來的版本就是1.3、1.4和5.0。但是,“Java”平臺被重新命名為“Java 2”。因此,就有了Java 2 Standard Edition Development Kit 的5.0版,即J2SE 5.0。
對于工程師來說,所有這一切都可能會引起困惑,而這正是沒有把它投入市場的原因。
如果使用Solaris、Linux或Windows,就應該從http://java.sun.com/j2se下載Java軟件開發工具箱。找到版本5.0或后續的版本,并選擇自己的平臺。
Sun公司曾經制作過將Java開發工具箱和集成開發環境捆綁在一起的產品。其中的集成開發環境,在不同時期,被命名為不同的名字,例如Forte、Sun ONE Studio、Sun Java Studio和NetBeans。我們無法知道每個人在登錄Sun網站的時候,市場上正在熱銷什么。這里,我們建議大家只安裝Java開發工具箱。如果最終決定使用Sun的集成開發環境,就可以從http://netbeans.org下載。
下載了JDK之后,接下來的安裝過程請參閱不同平臺的安裝指南。在編寫這本書的時候,可以在網站http://java.sun.com/j2se/5.0/install.html 上搜尋到安裝指南。
只有Java的安裝過程和編譯命令與系統有關。一旦安裝并運行了Java,本書闡述的所有內容都適用。與環境無關性是Java的一個主要優勢。
設置執行路徑
在完成了JDK的安裝之后,還需要執行一個附加步驟:把 jdk/bin目錄添加到執行路徑中。所謂執行路徑是指操作系統搜尋本地可執行文件的目錄列表。對于不同的操作系統,這個步驟的操作過程也有所不同。
? 在UNIX(包括Solaris和Linux)環境下,編輯執行路徑的過程與所使用的shell有關。如果使用的是C shell(Solaris的默認選擇),在 ~/.cshrc文件的末尾就要添加:
set path=(/usr/local/jdk/bin $path)
如果使用的是Bourne Again shell(Linux的默認選擇),在 ~/.bashrc文件或 ~/.bash_profile文件的末尾就要添加:
export PATH=/usr/local/jdk/bin:$PATH
對于其他的UNIX shell 來說,需要搞清楚具體的類似過程。
? 在Windows 95/98/ME環境中,在c:\autoexec.bat文件的末尾需要放置一行:
SET PATH=c:\jdk \bin;%PATH%
注意在“=”兩側不要留空格。必須重新啟動計算機,這個設置才能夠生效。
? 在Windows NT/2000/XP環境下,啟動控制面板,選擇System,再選擇Environment。在User Variables窗口中找到PATH變量名。(如果想讓機器上的所有用戶都能夠使用Java工具,就需要使用系統變量窗口完成這個操作步驟。)將 jdk \bin目錄添加到路徑的開頭,并使用分號將新項隔開。如下所示:
c:\jdk \bin; other stuff
將這個設置保存起來,打開的任何控制窗口都將有正確的路徑。
可以使用下面的步驟測試上面的設置是否正確:
1)打開一個shell窗口。后面的操作將取決于所使用的操作系統。鍵入:
java-version
2)然后,按ENTER鍵。應該能夠看到如下的顯示信息:
java version "5.0"
Java(TM) 2 Runtime Environment, Standard Edition
Java HotSpot(TM) Client VM
如果看到的是“java:command not found”、“Bad command or file name” 或“The name specified
is not recognized as an internal or external command, operable program or batch file”,就需要回到
前面,重新檢查整個的安裝過程。
安裝庫源代碼和文檔
庫源文件在JDK中以一個壓縮文件src.zip的形式發布,必須將其解壓縮后才能夠訪問源代碼。
這里強烈地建議這樣做。步驟很簡單,如下所示:
1)確保JDK已經安裝,并且 jdk/bin目錄在執行路徑中。
2)打開shell窗口。
3)進入 jdk目錄(例如:cd /usr/local/jdk5.0或cd c:\jdk5.0)。
4)建立一個子目錄src:
mkdir src
cd src
5)執行命令:
jar xvf ../src.zip
(或者在Windows中執行jar xvf ..\src.zip。)
該文檔在一個與JDK分開的壓縮文件中。
可以從http://java.sun.com/docs下載該文檔。其中提供了多種格式(.zip、.gz和.Z)。選擇一種最適合你的格式。如果難以確定的話就使用zip文件,因為這樣可以使用JDK中的jar程序對zip文件進行解壓縮。執行下面的步驟:
1)確保已經安裝了JDK并且執行路徑為jdk/bin。
2)下載該文檔的zip文件并放入jdk目錄。文件名為j2sdkversion-doc.zip,這里的version類似5_0。
3)打開一個shell窗口。
4)進入jdk目錄。
5)執行該命令。
jar xvf j2sdkversion-doc.zip
其中version是相應的版本號。
安裝本篇中的示例
讀者可以安裝本書中的示例程序。這些程序可以從http://www.phptr.com/corejava 下載,它們被打包在corejava.zip文件中。應該把它們解壓到一個單獨的文件夾中,建議將文件夾命名為CoreJavaBook。解壓操作可以使用任何一種zip文件的實用程序,例如WinZip(http://www.winzip.com),或者使用jar實用程序,它是JDK的一部分。如果使用jar,需要執行下列步驟:
1)確保JDK已經安裝,并且jdk/bin目錄在執行路徑中。
2)建立目錄CoreJavaBook。
3)將corejava.zip文件下載到這個目錄下。
4)打開一個shell窗口。
5)轉換到CoreJavaBook目錄。
6)執行命令:
jar xvf corejava.zip
導航Java目錄
在學習Java的過程中,經常需要查看Java源文件。當然,也會頻繁地使用類庫文檔。表2-1顯示了JDK目錄樹。
就學習Java而言,有兩個最有用的子目錄docs和src。docs目錄包含了HTML格式的Java類庫文檔,可以使用任何瀏覽器(如Netscape)查看這些文檔。
如果在此之前使用Microsoft Visual Studio編寫過程序,就會習慣于帶有內嵌的文本編輯器、用于編譯和運行程序的菜單,以及配有集成調試器的開發環境。基本的JDK全然沒有這些功能。
利用它從事的每一項任務都要通過在shell窗口中鍵入命令來完成。在本書中,將介紹如何安裝和使用基本的JDK,這是因為我們發現完善的開發環境并不能減輕學習Java的壓力,相反這些環境相當復雜,并且會將一些程序設計者很關注且對他們很有意義的重要細節隱藏起來。
集成開發環境對于編寫簡單的程序來說顯得有些笨重。使用它們速度比較慢、需要更高性能的計算機,并且在編寫每一個程序的時候,都要建立有些煩人的項目。而對于編寫包含許多源文件的大型Java程序來說,它們卻能夠表現出不凡的優勢,其中集成了調試器、版本控制系統等工具。在這本書中,將主要介紹使用Eclipse的基本方法,這是一種本身就用Java編寫的免費開發環境。當然,如果更加喜歡其他的開發環境,例如,支持當前Java版本的NetBeans或JBuilder,也可以與本書配合使用。
對于簡單的程序來講,使用介于命令行工具與集成開發環境之間的集成JDK編輯器是一種很好的折中方案。在Linux環境下,最好選擇Emacs。在Windows環境下,最好選用TextPad,這是一個優秀的共享編輯器,并且與Java集成得很好。另外,JEdit也是一種相當不錯的跨平臺工具。
使用與JDK集成的文本編輯器可以使開發Java程序變得簡易且快捷。我們將用這種方案開發并測試本書中的絕大多數程序。由于可以在編輯器內部編譯并執行源代碼,所以,實際上這也是一種開發環境,使用它可以完成本書的所有程序。
總而言之,可以選擇下列Java開發環境:
? 使用JDK以及自己喜歡的文本編輯器。在shell窗口編譯并運行程序。
? 使用集成開發環境,如Eclipse,或其他免費的、可供使用的商業開發環境。
? 使用JDK和一個與JDK集成在一起的文本編輯器。Emacs、TextPad以及JEdit就屬于這類編
輯器。當然,還有其他的一些編輯器。在編輯器中編譯并運行程序。
首先介紹較難的一種方法:通過命令行編譯并運行Java程序。
打開一個shell窗口,進入CoreJavaBook/v1ch2/Welcome目錄(這個目錄是安裝本書例題源代碼所使用的目錄,請參看2.1.4節)。
然后,鍵入下面的命令:
javac Welcome.java
java Welcome
隨后,會在shell窗口中看到如圖2-1所示的輸出。
祝賀你!已經編譯并運行了自己的第一個Java程序。
那么,剛才都進行了哪些操作呢?javac程序是一個Java編譯器。它將文件Welcome.java編譯成Welcome.class,java程序啟動Java虛擬機。虛擬機執行編譯器放置在類文件中的字節碼。
Welcome程序非常簡單。其功能只是向控制臺輸出了一條消息。你看到例2-1的程序代碼可能很興奮。在下一章中,將解釋它是如何工作的。
例2-1 Welcome.java
疑難解答提示
在使用可視化開發環境的年代,許多程序員對于在shell窗口中運行程序已經很生疏了。常常會出錯,最終導致令人沮喪的結果。
一定要注意以下幾點:
? 如果手工輸入源程序,一定要注意大小寫。尤其是類名應該為Welcome,而不是welcome或WELCOME。
? 編譯時需要提供一個文件名(Welcome.java),而運行程序時,只需要指定類名(Welcome),不要帶擴展名.java或.class。
? 如果看到諸如“Bad command or file name”或“javac:command not found”這類信息,就要返回去檢查一下安裝是否出現了問題,特別是執行路徑的設置。
? 如果javac報告了一個錯誤“cannot read:Welcome.java”,就應該檢查此目錄中是否存在這個文件。
在UNIX環境下,檢查Welcome.java是否以正確的大寫字母開頭。
在Windows環境下,使用shell命令dir,而不要使用圖形瀏覽器工具。有些文本編輯器(特別是Notepad)在每個文件名后面要添加擴展名.txt。如果使用Notepad來編輯Welcome.java就會存為Welcome.java.txt。對于默認的Windows設置,瀏覽器與Notepad都隱含.txt的擴展名,這是因為這個擴展名屬于“已知的文件類型”。此時,需要重新命名這個文件,使用shell命令ren,或是另存一次,給文件名加一對雙引號,如"Welcome.java"。
? 如果運行程序之后,收到錯誤信息java.lang.NoClassDefFoundError,就應該仔細地檢查一下類名,這是某個類名出現了問題。
如果收到錯誤信息welcome(w為小寫),就應該重新發出帶有大寫W的java Welcome.java命令。記住,Java是區分大小寫的。
如果收到錯誤信息Welcome/java,就是錯誤地鍵入了java Welcome.java,應該重新輸入命令javaWelcome。
? 如果鍵入java Welcome,而虛擬機沒有找到Welcome類,就應該檢查一下是否系統的類路徑被他人更改了。對于簡單的程序,最好取消設置的類路徑。取消類路徑設置的方式是,在當前的shell窗口中鍵入:
set CLASSPATH=
這個命令在使用C shell的Windows和UNIX/Linux環境下使用。在使用Bourne/bash shell的UNIX/Linux環境下需要使用:
export CLASSPATH=在第4章中將介紹永久性地設置類路徑以及取消相應設置的方式。
? 如果收到的錯誤信息是有關新語言結構的問題,就需要確認一下當前使用的編譯程序是否支持JDK 5.0。如果使用的不是JDK 5.0或后續版本,就需要修改源代碼,請參看附錄B。
? 如果程序中的錯誤太多,所有的錯誤信息就會飛快地閃過。編譯器將會把這些錯誤信息發送到標準錯誤流上。如果信息超過一屏,就很難看清楚它們了。
在UNIX系統或Windows NT/2000/XP系統下,捕獲錯誤信息不是什么太難的事情。可以使用shell操作符 2> 將這些錯誤重新定向到一個文件中:
javac MyProg.java 2> errors.txt
而在Windows 95/98/ME環境下,就不能在shell窗口中完成將錯誤信息重定向到標準錯誤流上的操作。此時,可以從http://www.horstmann.com/corejava/faq.html下載errout程序并運行errout javac MyProg.java > errors.txt
在這一節中,將介紹如何使用Eclipse編譯一個程序。Eclipse是一個可以從網站http://eclipse.org上免費下載得到的集成開發環境。Eclipse是采用Java編寫的,然而由于所使用的是非標準視窗類庫,所以不像Java那樣具有可移植性。盡管如此,這個開發環境已經擁有可以應用在Linux、Mac OS X、Solaris以及Windows 環境的版本了。
啟動Eclipse之后,從菜單選擇File→New Project。然后從向導對話框中選擇“Java Project”(如圖2-2所示)。這些屏幕畫面取自于Eclipse 3.0M8。如果所使用的Eclipse版本看起來稍有差異,不要緊張
點擊“Next”按鈕,鍵入項目名“Welcome”,并輸入包含Welcome.java的完整路徑名,如圖2-3所示。確保沒有選定標有“Create project in workspace”的選項,然后點擊“Finish”按鈕。
現在已經建立了項目。點擊項目窗口左邊窗格中的三角,并打開它。然后,點擊旁邊的“default package”三角,再雙擊Welcome.java。現在應該看到帶有程序代碼的窗口了(如圖2-4所示)。
用鼠標右鍵點擊最左側窗格中的項目名(Welcome),然后從彈出的菜單中選擇Build Project。
程序就會被編譯。如果編譯成功,選擇Run→Run As→Java Application。可以看到,這個窗口底部出現了一個輸出窗口,程序輸出顯示在輸出窗口中(如圖2-5所示)。
定位編譯錯誤
可以肯定,這個程序沒有出現輸入錯誤或bug。(畢竟,這段代碼只有幾行。)為了說明問題,假定在代碼中不小心出現了錄入錯誤(或許語法錯誤)。試著將原來的文件修改一下,讓它包含一些錄入錯誤,比如,把String的大小寫搞錯:
public static void main(String[] args)
現在,重新編譯這個程序,就會收到一條錯誤信息,其中指出了有一個不能識別的string類型(如圖2-6所示)。點擊一下錯誤信息,可以看到光標馬上移到了編輯窗口中相應的行上,在這里將錯誤糾正過來。使用這種方式可以快速地糾正錯誤。
現在只是對集成開發環境有了一個初步的認識。在第11章中將進一步討論Eclipse的調試器。
集成開發環境雖然提供了許多便利,但卻存在著一些潛在的缺陷。尤其是,對于那些沒有分散在多個源文件中的簡單程序來說,集成環境的啟動時間長、不停地發出警告鈴聲都顯得有些得不償失。幸運的是,許多文本編輯器可以啟動Java編譯器,運行Java程序,并捕獲錯誤信息以及輸出結果。本節將看一下Emacs,這是一個典型的文本編輯器。
Emacs是一個值得炫耀的文本編輯器。它是免費的且可以用于UNIX、Linux、Windows和Mac OS X環境。但是,許多Windows程序員感覺Emacs學起來太難。在這里向這部分程序員推薦TextPad,這是一個符合Windows標準習慣的文本編輯器,且可以從http://www.textpad.com 得到。但需要注意,由于它是一個共享軟件,所以在試用期后,如果還想使用,就需要繳納費用。(我們和廠家沒有任何關系,除了對其產品感覺滿意之外。)
另一款流行的編輯器是JEdit,這是一個用Java編寫的很好用的編輯器。可以在http://jedit.org上免費得到。無論使用Emacs、TextPad、JEdit,還是其他的編輯器,基本原理都是一樣的。當編輯完源代碼時,就可以發出命令對代碼進行編譯。編輯器啟動編譯器并捕獲錯誤信息。然后修改錯誤、再重新編譯,然后再發出一條命令來運行程序。
圖2-7說明的是Emac編輯器編譯Java程序的狀態。(從菜單中選擇JDE→Compile運行編譯程序。)
錯誤信息在窗口的下半部分。把光標移到一個錯誤信息,再按下ENTER鍵,光標就會移到相應的源代碼行上。
一旦修改完所有的錯誤,就可以從菜單中選擇JDE→Run App運行程序了。輸出信息也顯示在編輯窗口的內部(如圖2-8所示)。
Welcome程序并不會引起人們的特別興奮。接下來,給出一個圖形化應用程序。這個程序是一個簡單的圖像文件查看器(viewer),它可以加載并顯示一個圖像。首先從命令行編譯并運行這個程序。
1)打開一個shell窗口。
2)將目錄轉到CoreJavaBook/v1ch2/ImageViewer。
3)輸入:
javac ImageViewer.java
java ImageViewer
運行后將彈出一個標題欄為ImageViewer的新程序窗口(如圖2-9所示)。
現在,選擇File→Open,然后找到一個GIF文件并打開它。(我們在同一個目錄下提供了兩個示例文件。)
要想關閉這一程序,只需要點擊標題欄中的關閉按鈕或者從系統菜單中選擇關閉程序。(要在文本編輯器中或集成開發環境中編譯并運行程序,按照前面的步驟做就行了。例如,在Emacs中選擇JDE→Compile,然后再選擇JDE→Run App。)
現在一定會感覺這個程序既有趣又有用。下面快速地瀏覽一下源代碼。這個程序比第一個程序要長得多,但是只要想一想用C或C++編寫同樣應用程序所需要的代碼量,就不會感到它太復雜了。當然,在Visual Basic中,編寫這個程序相當簡單,只需要簡單地拖放幾下,再加上兩行代碼就行了。JDK沒有可視化的界面構造器,所以必須通過編寫代碼來完成這一切工作,如例2-2所示。在本書中,將在第7章~第9章介紹編寫圖形化應用程序的內容。
例2-2 ImageViewer.java
本書給出的前兩個程序是Java應用程序。它們與所有本地程序一樣,可以獨立地運行。然而,正如上一章提到的,有關Java的大量宣傳都在炫耀Java能夠在Web瀏覽器中運行applet的能力。
下面介紹一下如何利用命令行建立并運行applet。然后,利用JDK自帶的applet查看器加載applet。
最后,在Web瀏覽器中顯示。
首先,打開shell窗口并將目錄轉到CoreJavaBook/v1ch2/WelcomeApplet,然后,輸入下面的命令:
javac WelcomeApplet.java
appletviewer WelcomeApplet.html
圖2-10顯示了在applet查看器窗口中顯示的內容。
第一條命令是大家已經非常熟悉的調用Java編譯器的命令。它將WelcomeApplet.java源文件編譯成字節碼文件WelcomeApplet.class。
然而,不要運行Java程序,而是調用appletviewer程序。這是JDK自帶的一個特殊工具,它可以幫助我們快速地測試applet。這里需要向這個程序提供一個HTML文件,而不是Java類文件名。WelcomeApplet.html的內容請參看下面的例2-3。
例2-3 WelcomeApplet.html
如果熟悉HTML,就會注意到一些標準的HTML指令和applet標記,它們用于告訴applet查看器需要加載一個代碼存放在WelcomeApplet.class中的applet。applet查看器將忽略applet標記之外的所有HTML標記。
當使用一個已經啟用Java 2的瀏覽器查看HTML文件時,其他的HTML標記才能夠顯現出來。遺憾的是,瀏覽器的情況有點復雜。
? Mozilla(以及Netscape 6及以上的版本)在Windows、Linux 和Mac OS X環境下支持Java。要想試驗一下applet,只需要下載這些瀏覽器的最新版本并確保Java被啟用。
? Internet Explorer的某些版本根本不支持Java。其他也只支持Microsoft Java Virtual Machine的過時版本。如果在Windows環境下運行Internet Explorer,就需要從http://java.com 上下載并安裝Java插件。
? 如果使用Macintosh 運行 OS X,那么Safari和Internet Explorer集成了Macintosh的Java實現。在編寫本書時支持JDK 1.4。OS 9支持過時的版本1.1。
假定有一個支持Java 2平臺的瀏覽器,可以在瀏覽器中試著加載applet。
1)啟動瀏覽器。
2)選擇File→Open File(或等效的操作)。
3)進入CoreJavaBook/v1ch2/WelcomeApplet目錄。在文件對話框中,將會看到WelcomeApplet.html文件。加載這個文件,瀏覽器就加載了applet以及周邊的文本。顯示效果基本上如圖2-11所示。
可能會發現這個應用程序是活動的,并且可以與Internet進行交互。點擊Cay Horstmann按鈕,applet會讓瀏覽器顯示Cay的網頁。點擊Gary Cornell按鈕,applet會讓瀏覽器彈出一個郵件窗口,其中包含已經填寫好的Gary郵件地址。
需要注意,在查看器中的兩個按鈕都不起作用。
applet查看器沒有能力發送郵件或顯示一個網頁,因此會忽略這里的操作請求。applet查看器適于用來單獨地測試applet,但是,最終需要將applet放置到瀏覽器中,以便檢測與瀏覽器以及Internet的交互情況。
最后,在例2-4中給出了這個applet的代碼。現在,只要瀏覽一下就可以了。在第10章中,還會再次講述applet的編寫。
在本章中,學習了有關編譯和運行Java程序的機制。現在可以轉到第3章開始學習Java語言了。
例2-4 WelcomeApplet.java
*請認真填寫需求信息,我們會在24小時內與您取得聯系。