lzzhaohui

          2006年7月13日 #

          將Java的class文件轉為EXE文件的八種方法

          ?????????????????????????????? 將Java的class文件轉為EXE文件的八種方法
          我對編程一竅不通,搜索了下看怎么編譯成exe文件.

          于是發現了本文.其實,下面那個老兄回的更精彩.

          將Java應用程序本地編譯為EXE的幾種方法(推薦使用JOVE和JET) 
          1. 從www.towerj.com獲得一個TowerJ編譯器,該編譯器可以將你的CLASS文件 
          編譯成EXE文件。 
          2. 利用微軟的SDK-Java 4.0所提供的jexegen.exe創建EXE文件,這個軟件可以 
          從微軟的網站免費下載,地址如下: 
          http://www.microsoft.com/java/download/dl_sdk40.htm 
          jexegen的語法如下: 
          jexegen /OUT:exe_file_name 
          /MAIN:main_class_name main_class_file_name.class 
          [and other classes] 
          3. Visual Cafe提供了一個能夠創建EXE文件的本地編譯器。你需要安裝該光盤 
          上提供的EXE組件。 
          4. 使用InstallAnywhere創建安裝盤。 
          5. 使用IBM AlphaWorks提供的一個高性能Java編譯器,該編譯器可以從下面的 
          地址獲得: 
          http://www.alphaworks.ibm.com/tech/hpc 
          6. JET是一個優秀的Java語言本地編譯器。該編譯器可以從這個網站獲得一個 
          測試版本: 
          http://www.excelsior-usa.com/jet.html 
          7. Instantiations公司的JOVE 
          http://www.instantiations.com/jove/...ejovesystem.htm 
          JOVE公司合并了以前的SuperCede,一個優秀的本地編譯器,現在SuperCede 
          已經不復存在了。 
          8. JToEXE 
          Bravo Zulu Consulting, Inc開發的一款本地編譯器,本來可以從該公司的 
          網頁上免費下載的,不過目前在該公司的主頁上找不到了

          Feedback回道:
          # re: 將Java的class文件轉為EXE文件的八種方法??
          幾種java轉exe的工具,進行一下比較,談談自己的看法:

          1. 從www.towerj.com獲得一個TowerJ編譯器,該編譯器可以將你的CLASS文件編譯成EXE文件。
          注:現在已經找不到,不提供了,被人家收購了。

          2. 利用微軟的SDK-Java 4.0所提供的jexegen.exe創建EXE文件,這個軟件可以從微軟的網站免費下載,地址如下:
          http://www.microsoft.com/java/download/dl_sdk40.htm

          jexegen的語法如下:

          jexegen /OUT:exe_file_name
          /MAIN:main_class_name main_class_file_name.class
          [and other classes]

          注:沒有試過

          3. Visual Cafe提供了一個能夠創建EXE文件的本地編譯器。你需要安裝該光盤上提供的EXE組件。
          注:沒有試過

          4. 使用InstallAnywhere創建安裝盤。
          注:很不錯的工具。
          但就是要>8M(帶jre),還有一種是>1M的(不帶jre)。
          但是它可以編譯成各種平臺上可以使用的exe程序。

          5. 使用IBM AlphaWorks提供的一個高性能Java編譯器,該編譯器可以從下面的地址獲得:
          http://www.alphaworks.ibm.com/tech/hpc

          注:沒有試過

          6. JET是一個優秀的Java語言本地編譯器。該編譯器可以從這個網站獲得一個測試版本:
          http://www.excelsior-usa.com/jet.html

          注:不喜歡。
          編譯好的程序還是jre的,聽說正版的可以不能jre。安裝好還要編譯,我用了30分鐘。

          7. Instantiations公司的JOVE
          http://www.instantiations.com/jove/...ejovesystem.htm
          JOVE公司合并了以前的SuperCede,一個優秀的本地編譯器,現在SuperCede已經不復存在了。

          注:太煩了,老是出來一個對話框
          用過,會出來一個對話框,表示這是jove公司的產品。

          8. JToEXE
          Bravo Zulu Consulting, Inc開發的一款本地編譯器,本來可以從該公司的網頁上免費下載的,不過目前在該公司的主頁上找不到了。
          公司主頁http://www.bravozulu.com/
          下面這個FTP上曾經有過這個軟件,不知道現在是不是還在:
          ftp://race.dlut.edu.cn/pub/java/tools/jet

          注:很煩了,老是出來一個對話框,但是沒有想到我找到了crack,在google上找到。
          現在去掉了那個對話框后,我很喜歡這個工具,雖然它需要jre,但是文件只有100多K,很好哦。

          9.Exe4j
          很不錯

          10.jbuilder
          這個工具不用多講了,在jbuilder6.0以前的(包括6.0),是不能生成exe文件的,所以可以用如下的方法實現。這可以人家高手想出來的,我只是幫著宣傳一下。
          還有jbuilder7.0開始都可以生成exe文件。

          這個是Borland不公開的使用技巧,能夠通過JBuilder來制作exe文件來啟動Java文件。
          JBuilder并不支持本地編譯機制。但是有一個隱藏的技巧可以讓你從可執行文件來啟動Java程序,可以出現或者不出現console窗口。想做到這些,需要JBuilder的bin目錄下的這些文件:
          JBuilder.exe
          JBuilderW.exe (可選)
          JBuilder.config
          jdk.config
          JavaLauncher.dll
          "JBuilder.exe"是一個通用的可執行外殼文件,用以啟動Java程序,"JBuilderW.exe"好像是javaw.exe一樣,它把"JBuilder.exe"包裝起來,但是運行時候不顯示那個console的窗口。使用這些文件的關鍵是文件名。"JBuilder.exe"查找一個文件叫"JBuilder.config"的配置文件,里面包含了運行Java程序的必須信息。同樣的"JBuilderW.exe"查找"JBuilder.exe"來啟動不帶Console窗口的Java程序。如果把JBuilder.exe重命名為"foo
          .exe",那"foo.exe"將去尋找"foo.config"配置文件,同樣"JBuilderW.exe"被重命名為"fooW.exe",它會去尋找"foo.exe"文件。
          說到這里,聰明的讀者應該猜到怎樣利用JBuilder.exe來啟動應用程序了。只要把JBuilder.exe,JBuilerW.exe,JBuilder.config改名成相應的文件名,在JBuilder.config里面指定主類和類路徑,就能夠通過執行JBuilder.exe(或者被改名后的exe文件)來啟動Java應用程序了。下面是用本機為例。
          Borland JBuilder 5被安裝在E:\jbuilder5\目錄下,在E:\jbuilder5\bin\下建立一個temp目錄,然后把JBuilder.exe,JBuilder.config,JavaLauncher.dll,jdk.config四個文件拷貝到E:\jbuilder5\bin\temp\目錄下,然后在這個目錄下建立一個hello目錄,在這個目錄下生成一個hello.java文件,即E:\jbuilder5\bin\temp\hello\hello.java文件,
          //hello.java/
          package hello;
          public class hello{
          public static void main(String s[]){
          System.out.println("Hello, Exe file!");
          }
          }
          編譯成class文件,然后打開Jbuilder.config文件,作相應的修改:
          在JBuilder.config里面找到下面兩行
          # Start JBuilder using the its main class
          mainclass com.borland.jbuilder.JBuilder
          修改為
          # Start JBuilder using the its main class
          mainclass hello.hello
          addpath E:/jbuilder5/bin/temp/
          addpath命令是把目錄加入類路徑中,這個命令和其它config里面可以識別的命令可以在JBuilder/bin目錄下的config_readme.txt里面找到詳細說明。
          然后將jdk.config里面的javapath修改成相對的路徑,例如原來是
          javapath ../jdk1.3/bin/java
          修改成
          javapath ../../jdk1.3/bin/java
          最后
          將JBuilder.exe,JBuilder.config修改成所需要的文件名,例如foo.exe和foo.config文件。
          現在執行foo.exe文件
          至此,通過修改JBuilder來使用exe文件啟動自己的Java應用程序已經完成了。
          但是好玩的地方并不在這個地方,下面的小技巧可能更有趣,將Jar文件打包進入exe文件!
          假設利用上面的文件,生成hello.jar包,
          jar cvf hello.jar hello\*.class
          然后將jar包附加到JBuilder.exe后面去,
          copy /b ..\JBuilder.exe+hello.jar foo.exe
          在foo.config(JBuilder.config)文件里面把前面加入的類路徑去掉,并加入下面的路徑:
          addpath E:/jbuilder5/bin/temp/foo.exe
          然后執行,foo.exe
          看到了么?一個含jar包的exe文件被執行了!
          這個過程的大致原理是:exe文件的重要信息都在文件頭部,所以把亂七八糟的東西放exe文件尾部是不要緊的;而jar/zip文件的重要信息是在文件尾部的,這樣它們兩不相干,能夠容易的被執行。
          請注意:讀者如果使用這個功能,得自己承擔可能帶來的風險,因為Borland對這個功能不提供官方的支持!

          posted @ 2006-07-13 20:48 啊輝 閱讀(622) | 評論 (0)編輯 收藏

          Java學習之路:不走彎路,就是捷徑

          Java學習之路:不走彎路,就是捷徑
            在ChinaITLAB導師制輔導中,筆者發現問得最多的問題莫過于"如何學習編程?JAVA該如何學習?"。類似的問題回答多了,難免會感覺厭煩,就萌生了寫下本文的想法。到時候再有人問起類似的問題,我可以告訴他(她),請你去看看《JAVA學習之路》。拜讀過臺灣蔡學鏞先生的《JAVA夜未眠》,有些文章如《JAVA學習之道》等讓我們確實有共鳴,本文題目也由此而來。
            軟件開發之路是充滿荊棘與挑戰之路,也是充滿希望之路。JAVA學習也是如此,沒有捷徑可走。夢想像《天龍八部》中虛竹一樣被無崖子醍醐灌頂而輕松獲得一甲子功力,是很不現實的。每天仰天大叫"天神啊,請賜給我一本葵花寶典吧",殊不知即使你獲得了葵花寶典,除了受自宮其身之苦外,你也不一定成得了"東方不敗",倒是成"西方失敗"的幾率高一點。
            "不走彎路,就是捷徑",佛經說的不無道理。
            1.如何學習程序設計?
            JAVA是一種平臺,也是一種程序設計語言,如何學好程序設計不僅僅適用于JAVA,對C++等其他程序設計語言也一樣管用。有編程高手認為,JAVA也好C也好沒什么分別,拿來就用。為什么他們能達到如此境界?我想是因為編程語言之間有共通之處,領會了編程的精髓,自然能夠做到一通百通。如何學習程序設計理所當然也有許多共通的地方。
            1.1 培養興趣
            興趣是能夠讓你堅持下去的動力。如果只是把寫程序作為謀生的手段的話,你會活的很累,也太對不起自己了。多關心一些行業趣事,多想想蓋茨。不是提倡天天做白日夢,但人要是沒有了夢想,你覺得有味道嗎?可能像許多深圳本地農民一樣,打打麻將,喝喝功夫茶,拜拜財神爺;每個月就有幾萬十幾萬甚至更多的進帳,憑空多出個"食利階層"。你認為,這樣有味道嗎?有空多到一些程序員論壇轉轉,你會發現,他們其實很樂觀幽默,時不時會冒出智慧的火花。
            1.2 慎選程序設計語言
            男怕入錯行,女怕嫁錯郎。初學者選擇程序設計語言需要謹慎對待。軟件開發不僅僅是掌握一門編程語言了事,它還需要其他很多方面的背景知識。軟件開發也不僅僅局限于某幾個領域,而是已經滲透到了各行各業幾乎每一個角落。
            如果你對硬件比較感興趣,你可以學習C語言/匯編語言,進入硬件開發領域。如果你對電信的行業知識及網絡比較熟悉,你可以在C/C++等之上多花時間,以期進入電信軟件開發領域。如果你對操作系統比較熟悉,你可以學習C/Linux等等,為Linux內核開發/驅動程序開發/嵌入式開發打基礎。如果你想介入到應用范圍最廣泛的應用軟件開發(包括電子商務電子政務系統)的話,你可以選擇J2EE或.NET,甚至LAMP組合。每個領域要求的背景知識不一樣。做應用軟件需要對數據庫等很熟悉。總之,你需要根據自己的特點來選擇合適你的編程語言。
            1.3 要腳踏實地,快餐式的學習不可取
            先分享一個故事。
            有一個小朋友,他很喜歡研究生物學,很想知道那些蝴蝶如何從蛹殼里出來,變成蝴蝶便會飛。??有一次,他走到草原上面看見一個蛹,便取了回家,然后看著,過了幾天以后,這個蛹出了一條裂痕,看見里面的蝴蝶開始掙扎,想抓破蛹殼飛出來。??這個過程達數小時之久,蝴蝶在蛹里面很辛苦地拼命掙扎,怎么也沒法子走出來。這個小孩看著看著不忍心,就想不如讓我幫幫它吧,便隨手拿起剪刀在蛹上剪開,使蝴蝶破蛹而出。??但蝴蝶出來以后,因為翅膀不夠力,變得很臃腫,飛不起來。
            這個故事給我們的啟示是:欲速則不達。
            浮躁是現代人最普遍的心態,能怪誰?也許是貧窮落后了這么多年的緣故,就像當年的大躍進一樣,都想大步跨入共產主義社會。現在的軟件公司、客戶、政府、學校、培訓機構等等到處彌漫著浮躁之氣。就拿筆者比較熟悉的深圳IT培訓行業來說吧,居然有的打廣告宣稱"參加培訓,100%就業",居然報名的學生不少,簡直是藐視天下  "你現在講究簡單方便,你以后的路就長了",好象也是佛經中的勸戒。
            1.4 多實踐,快實踐
            彭端淑的《為學一首示子侄》中有窮和尚與富和尚的故事。
            從前,四川邊境有兩個和尚,一個貧窮,一個有錢。一天,窮和尚對富和尚說:"我打算去南海朝圣,你看怎么樣?"富和尚說:"這里離南海有幾千里遠,你靠什么去呢?"窮和尚說:"我只要一個水缽,一個飯碗就夠了。"富和尚為難地說:"幾年前我就打算買條船去南海,可至今沒去成,你還是別去吧!"??一年以后,富和尚還在為租賃船只籌錢,窮和尚卻已經從南海朝圣回來了。
            這個故事可解讀為:任何事情,一旦考慮好了,就要馬上上路,不要等到準備周全之后,再去干事情。假如事情準備考慮周全了再上路的話,別人恐怕捷足先登了。軟件開發是一門工程學科,注重的就是實踐,"君子動口不動手"對軟件開發人員來講根本就是錯誤的,他們提倡"動手至上",但別害怕,他們大多溫文爾雅,沒有暴力傾向,雖然有時候蓬頭垢面的一副"比爾蓋茨"樣。有前輩高人認為,學習編程的秘訣是:編程、編程、再編程,筆者深表贊同。不僅要多實踐,而且要快實踐。我們在看書的時候,不要等到你完全理解了才動手敲代碼,而是應該在看書的同時敲代碼,程序運行的各種情況可以讓你更快更牢固的掌握知識點。
            1.5 多參考程序代碼
            程序代碼是軟件開發最重要的成果之一,其中滲透了
          程序員的思想與靈魂。許多人被《仙劍奇俠傳》中凄美的愛情故事感動,悲劇的結局更有一種缺憾美。為什么要以悲劇結尾?據說是因為寫《仙劍奇俠傳》的程序員失戀而安排了這樣的結局,他把自己的感覺融入到游戲中,卻讓眾多的仙劍迷扼腕嘆息。
            多多參考代碼例子,對JAVA而言有參考文獻[4.3],有API類的源代碼(JDK安裝目錄下的src.zip文件),也可以研究一些開源的軟件或框架。
            1.6 加強英文閱讀能力
            對學習編程來說,不要求英語,??但不能一點不會,。最起碼像JAVA??API文檔(參考文獻[4.4])這些東西還是要能看懂的,連猜帶懵都可以;旁邊再開啟一個"金山詞霸"。看多了就會越來越熟練。在學JAVA的同時學習英文,一箭雙雕多好。另外好多軟件需要到英文網站下載,你要能夠找到它們,這些是最基本的要求。英語好對你學習有很大的幫助。口語好的話更有機會進入管理層,進而可以成為剝削  1.7 萬不得已才請教別人
            筆者在ChinaITLab網校的在線輔導系統中解決學生問題時發現,大部分的問題學生稍做思考就可以解決。請教別人之前,你應該先回答如下幾個問題。
            你是否在google中搜索了問題的解決辦法?
            你是否查看了JAVA??API文檔?
            你是否查找過相關書籍?
            你是否寫代碼測試過?
            如果回答都是"是"的話,而且還沒有找到解決辦法,再問別人不遲。要知道獨立思考的能力對你很重要。要知道
          程序員的時間是很寶貴的。
            1.8 多讀好書
            書中自有顏如玉。比爾?蓋茨是一個飽讀群書的人。雖然沒有讀完大學,但九歲的時候比爾?蓋茨就已經讀完了所有的百科全書,所以他精通天文、歷史、地理等等各類學科,可以說比爾?蓋茨不僅是當今世界上金錢的首富,而且也可以稱得上是知識的巨富。
            筆者在給學生上課的時候經常會給他們推薦書籍,到后來學生實在忍無可忍開始抱怨,"天吶,這么多書到什么時候才能看完了","學軟件開發,感覺上了賊船"。這時候,我的回答一般是,"別著急,什么時候帶你們去看看我的書房,到現在每月花在技術書籍上的錢400元,這在軟件開發人員之中還只能夠算是中等的",學生當場暈倒。(注:這一部分學生是剛學軟件開發的)
            對于在JAVA開發領域的好書在筆者另外一篇文章中會專門點評。該文章可作為本文的姊妹篇。
            1.9 使用合適的工具
            工欲善其事必先利其器。軟件開發包含各種各樣的活動,需求收集分析、建立用例模型、建立分析設計模型、編程實現、調試程序、自動化測試、持續集成等等,沒有工具幫忙可以說是寸步難行。工具可以提高開發效率,使軟件的質量更高BUG更少。組合稱手的武器。到飛花摘葉皆可傷人的境界就很高了,無招勝有招,手中無劍心中有劍這樣的境界幾乎不可企及。在筆者另外一篇文章中會專門闡述如何選擇合適的工具(該文章也可作為本文的姊妹篇)。
            2.軟件開發學習路線
            兩千多年的儒家思想孔孟之道,中庸的思想透入骨髓,既不冒進也不保守并非中庸之道,而是找尋學習軟件開發的正確路線與規律。
            從軟件開發人員的生涯規劃來講,我們可以大致分為三個階段,軟件工程師→軟件設計師→架構設計師或項目管理師。不想當元帥的士兵不是好士兵,不想當架構設計師或項目管理師的程序員也不是好的程序員。我們應該努力往上走。讓我們先整理一下開發應用軟件需要學習的主要技術。
            A.基礎理論知識,如操作系統、編譯原理、數據結構與算法、計算機原理等,它們并非不重要。如不想成為計算機科學家的話,可以采取"用到的時候再來學"的原則。
            B.一門編程語言,現在基本上都是面向對象的語言,JAVA/C++/C#等等。如果做WEB開發的話還要學習HTML/JavaScript等等。
            C.一種方法學或者說思想,現在基本都是面向對象思想(OOA/OOD/設計模式)。由此而衍生的基于組件開發CBD/面向方面編程AOP等等。
            D.一種關系型數據庫,ORACLE/SqlServer/DB2/MySQL等等
            E.一種提高生產率的IDE集成開發環境JBuilder/Eclipse/VS.NET等。
            F.一種UML建模工具,用ROSE/VISIO/鋼筆進行建模。
            G.一種軟件過程,RUP/XP/CMM等等,通過軟件過程來組織軟件開發的眾多活動,使開發流程專業化規范化。當然還有其他的一些軟件工程知識。
            H.項目管理、體系結構、框架知識。
            正確的路線應該是:B→C→E→F→G→H。
            還需要補充幾點:
            1).對于A與C要補充的是,我們應該在實踐中逐步領悟編程理論與編程思想。新技術雖然不斷涌現,更新速度令人眼花燎亂霧里看花;但萬變不離其宗,編程理論與編程思想的變化卻很慢。掌握了編程理論與編程思想你就會有撥云見日之感。面向對象的思想在目前來講是相當關鍵的,是強勢技術之一,在上面需要多投入時間,給你的回報也會讓你驚喜。
            2).對于數據庫來說是獨立學習的,這個時機就由你來決定吧。
            3).編程語言作為學習軟件開發的主線,而其余的作為輔線。
            4).軟件工程師著重于B、C、E、??D;軟件設計師著重于B、C、E、??D、F;架構設計師著重于C、F、H。
            3.如何學習JAVA?
            3.1??JAVA學習路線
            3.1.1??基礎語法及JAVA原理
            基礎語法和JAVA原理是地基,地基不牢靠,猶如沙地上建摩天大廈,是相當危險的。學習JAVA也是如此,必須要有扎實的基礎,你才能在J2EE、J2ME領域游刃有余。參加SCJP(SUN公司認證的JAVA  3.1.2??OO思想的領悟
            掌握了基礎語法和JAVA程序運行原理后,我們就可以用JAVA語言實現面向對象的思想了。面向對象,是一種方法學;是獨立于語言之外的編程思想;是CBD基于組件開發的基礎;屬于強勢技術之一。當以后因工作需要轉到別的面向對象語言的時候,你會感到特別的熟悉親切,學起來像喝涼水這么簡單。
            使用面向對象的思想進行開發的基本過程是:
            ●調查收集需求。
            ●建立用例模型。
            ●從用例模型中識別分析類及類與類之間的靜態動態關系,從而建立分析模型。
            ●細化分析模型到設計模型。
            ●用具體的技術去實現。
            ●測試、部署、總結。
            3.1.3??基本API的學習
            進行軟件開發的時候,并不是什么功能都需要我們去實現,也就是經典名言所說的"不需要重新發明輪子"。我們可以利用現成的類、組件、框架來搭建我們的應用,如SUN公司編寫好了眾多類實現一些底層功能,以及我們下載過來的JAR文件中包含的類,我們可以調用類中的方法來完成某些功能或繼承它。那么這些類中究竟提供了哪些方法給我們使用?方法的參數個數及類型是?類的構造器需不需要參數?總不可能SUN公司的工程師打國際長途甚至飄洋過海來告訴你他編寫的類該如何使用吧。他們只能提供文檔給我們查看,JAVA??DOC文檔(參考文獻4.4)就是這樣的文檔,它可以說是
          程序員程序員交流的文檔。
            基本API指的是實現了一些底層功能的類,通用性較強的API,如字符串處理/輸入輸出等等。我們又把它成為類庫。熟悉API的方法一是多查JAVA??DOC文檔(參考文獻4.4),二是使用JBuilder/Eclipse等IDE的代碼提示功能。
            3.1.4??特定API的學習
            JAVA介入的領域很廣泛,不同的領域有不同的API,沒有人熟悉所有的API,對一般人而言只是熟悉工作中要用到的API。如果你做界面開發,那么你需要學習Swing/AWT/SWT等API;如果你進行網絡游戲開發,你需要深入了解網絡API/多媒體API/2D3D等;如果你做WEB開發,就需要熟悉Servlet等API啦。總之,需要根據工作的需要或你的興趣發展方向去選擇學習特定的API。
            3.1.5??開發工具的用法
            在學習基礎語法與基本的面向對象概念時,從鍛煉語言熟練程度的角度考慮,我們推薦使用的工具是Editplus/JCreator+JDK,這時候不要急于上手JBuilder/Eclipse等集成開發環境,以免過于關注IDE的強大功能而分散對JAVA技術本身的注意力。過了這一階段你就可以開始熟悉IDE了。
            程序員日常工作包括很多活動,編輯、編譯及構建、調試、單元測試、版本控制、維持模型與代碼同步、文檔的更新等等,幾乎每一項活動都有專門的工具,如果獨立使用這些工具的話,你將會很痛苦,你需要在堆滿工具的任務欄上不斷的切換,效率很低下,也很容易出錯。在JBuilder、Eclipse等IDE中已經自動集成編輯器、編譯器、調試器、單元測試工具JUnit、自動構建工具ANT、版本控制工具CVS、DOC文檔生成與更新等等,甚至可以把UML建模工具也集成進去,又提供了豐富的向導幫助生成框架代碼,讓我們的開發變得更輕松。應該說IDE發展的趨勢就是集成軟件開發中要用到的幾乎所有工具。
            從開發效率的角度考慮,使用IDE是必經之路,也是從一個學生到一個職業程序員轉變的里程碑。
            JAVA開發使用的IDE主要有Eclipse、JBuilder、JDeveloper、NetBeans等幾種;而Eclipse、JBuilder占有的市場份額是最大的。JBuilder在近幾年來一直是JAVA集成開發環境中的霸主,它是由備受程序員(包括幾乎所有的骨灰級程序員)的青睞,極具發展潛力。
            3.1.6??學習軟件工程
            對小型項目而言,你可能認為軟件工程沒太大的必要。隨著項目的復雜性越來越高,軟件工程的必要性才會體現出來。參見"軟件開發學習路線"小節。
            3.2學習要點
            確立的學習路線之后,我們還需要總結一下JAVA的學習要點,這些要點在前文多多少少提到過,只是筆者覺得這些地方特別要注意才對它們進行匯總,不要嫌我婆婆媽媽啊。
            3.2.1勤查API文檔
            當程序員程序員交流的工具,幾乎人手一份,除了菜鳥之外。J2SE??DOC文檔官方下載地址:http://java.sun.com/j2se/1.5.0/down...pi/index.html。
            對待DOC文檔要像毛主席語錄,早上起床念一遍,吃飯睡覺前念一遍。
            當需要某項功能的時候,你應該先查相應的DOC文檔看看有沒有現成的實現,有的話就不必勞神費心了直接用就可以了,找不到的時候才考慮自己實現。使用步驟一般如下:
            ●找特定的包,包一般根據功能組織。
            ●找需要使用類,類命名規范的話我們由類的名字可猜出一二。
            ●選擇構造器,大多數使用類的方式是創建對象。
            ●選擇你需要的方法。
            3.2.2??查書/google->寫代碼測試->查看源代碼->請教別人
            當我們遇到問題的時候該如何解決?
            這時候不要急著問別人,太簡單的問題,沒經過思考的問題,別人會因此而瞧不起你。可以先找找書,到google中搜一下看看,絕大部分問題基本就解決了。而像"某些類/方法如何使用的問題",DOC文檔就是答案。對某些知識點有疑惑是,寫代碼測試一下,會給你留下深刻的印象。而有的問題,你可能需要直接看API的源代碼驗證你的想法。萬不得已才去請教別人。
            3.2.3學習開源軟件的設計思想
            JAVA領域有許多源代碼開放的工具、組件、框架,JUnit、ANT、Tomcat、Struts、Spring、Jive論壇、PetStore寵物店等等多如牛毛。這些可是前輩給我們留下的瑰寶呀。入寶山而空手歸,你心甘嗎?對這些工具、框架進行分析,領會其中的設計思想,有朝一日說不定你也能寫一個XXX框架什么的,風光一把。分析開源軟件其實是你提高技術、提高實戰能力的便捷方法。
            3.2.4??規范的重要性
            沒有規矩,不成方圓。這里的規范有兩層含義。第一層含義是技術規范,多到http://www.jcp.org下載JSRXXX規范,?..請參考3.2.2節。
            3.2.5??不局限于JAVA
            很不幸,很幸運,要學習的東西還有很多。不幸的是因為要學的東西太多且多變,沒時間陪老婆家人或女朋友,導致身心疲憊,嚴重者甚至導致抑郁癥。幸運的是別人要搶你飯碗絕非易事,他們或她們需要付出很多才能達成心愿。
            JAVA不要孤立地去學習,需要綜合學習數據結構、OOP、軟件工程、UML、網絡編程、數據庫技術等知識,用橫向縱向的比較聯想的方式去學習會更有效。如學習JAVA集合的時候找數據結構的書看看;學JDBC的時候復習  4.結束語
            需要強調的是,學習軟件開發確實有一定的難度,也很辛苦,需要付出很多努力,但千萬不要半途而廢。本文如果能對一直徘徊在JAVA神殿之外的朋友有所幫助的話,筆者也欣慰了。哈哈,怎么聽起來老氣橫秋呀?沒辦法,在電腦的長期輻射之下,都快變成小老頭了。最后奉勸各位
          程序員尤涫荕M程序員,完成工作后趕快遠離電腦,據《胡播亂報》報道,電腦輻射會在白皙的皮膚上面點綴一些小黑點,看起來鮮艷無比……
            5.參考文獻
            5.1《JAVA夜未眠》
            5.2??http://www.chinaitlab.com/www/news/...ow.asp?id=33934
            5.3??http://javaalmanac.com/egs/
            5.4??http://java.sun.com/j2se/1.5.0/docs/api/index.html

          posted @ 2006-07-13 20:41 啊輝 閱讀(193) | 評論 (0)編輯 收藏

          Java登峰造極之J2EE修煉的四書五經

          Java登峰造極之J2EE修煉的四書五經
          J2EE其實沒有四書五經,因為J2EE一直如洶涌澎湃的大江,推陳出新,不斷高速發展,這是一種帶領我們走向未來的技術。當然,如何在這種氣勢如虹的潮流之中不至于迷失方向,需要相關指南性書籍的引導。本文將從線程和模式兩個方面推薦J2EE書籍,這兩個方面正好是兩種不同的方向,線程是從微觀、底層機制入手;而模式則是從設計高度來看待J2EE。

          ?

          線程(Thread)

          首先,線程是很多J2EE初學者容易忽視的一個基本知識,可以說,無論你是從Java世界的哪一扇門進入J2EE的,線程是必經之道。

          已經不記得在哪里看到過下面一段英文:

          在過去,大概只有勇敢的程序員才勇于使用pthread和Win32線程,現代語言如Java正試圖在編寫一些令人恐懼的應用如并行計算等方面來挽救我們。

          J2EE的Servlet和EJB確保我們不用擔心線程以及同步等問題,我們只要象往常一樣編程,容器自動會使用線程池等技術來支持我們的應用。

          由此可見,線程是J2EE最基本的底層機制,每個Servlet/Jsp程序其實是一段線程程序,如果你不懂得線程/多線程的一些原理,如何能嫻熟駕馭J2EE的Servlet/Jsp?

          在線程計算方面有很多權威,Dou Lee無疑是這方面的杰出代表,他的并行計算包已經加入了最新的JDK1.5版本中,他的書籍都屬于奠基性質,但是,這樣書籍可能不是很適合只想對線程進行了解的J2EE初學者。

          《Java線程編程》(Java Thread Programming)

          是我推薦的第一本有關J2EE書籍,在這本書中,作者以簡單的例子,形象易懂地從單線程講解到多線程,線程池(Thread Pool)、并發同時訪問對象和變量(Concurrent Access to Objects and Variables),這些都是我們在平時Servlet/Jsp編程中經常會發生疑惑的地方,在這本書的案例中,作者清晰明了地給我們展示這些細節而有重要的技術。同時,也讓我們深刻地理解了直接編制多線程應用是一件“令人恐懼”的事情。

          很有意思的是,我在一家網上書店社區里也發現了與我有同樣見解的帖子,稱這本書是“一本讓經典成為過去的書”

          設計模式

          線程世界就象微生物世界一樣,復雜且幾乎沒有邊界,作為信息系統的程序員如果太執著于這樣純技術的微觀層面,可能浪費太多寶貴時間和精力,在基本掌握多線程機制后,需要更加關注J2EE的設計應用了。

          J2EE是Java世界中一個獨特的框架或標準,所以,我們首先需要掌握基于Java的設計應用,這些設計應用技巧,是先行者經過長期實踐總結出來的心得,他們稱之為設計模式。在J2EE應用中,只有大量使用設計模式,才能體現出分離和解耦的最高宗旨,才能使得自己的J2EE系統脈絡清晰、層次分明,這樣的系統才真正具有良好的可伸縮性、穩固的健壯性以及方便的可維護性。


          GoF 23種設計模式已經成為經典,2002年我在我的網站J道發表23種設計模式Java詳解時,竟然在中文google里很難發現這方面的資料,這讓我萬分驚訝,也許國人確實是非常實在,只對算法、數據結構等這樣看得見、摸得著的概念感興趣,其實我一直反復和別人講:設計模式不是純抽象概念,它是實踐的總結,如同UML一樣,是一種交流和編碼實現的語言。

          我在2002年幫朋友購買了GoF 23種設計模式的中文版:《設計模式:可復用面向對象軟件的基礎》,它是2000年12月第2次印刷的版本,這樣經典必讀書籍,8000冊在2年時間內都沒有銷售完畢,相比那些喧囂炒作的書籍,在出版幾個月內銷售過萬,越發顯得我們這個社會的浮躁和急功近利了。

          當然,這本薄薄的書雖然由四個國人鼎力協助翻譯,想必他們也殫思竭慮,盡了最大努力了,可惜書中還是有很多翻譯欠妥之處,影響了它的銷量。

          由于這本經典的GoF設計模式比較難懂,初學者更多應該是從實例應用中了解和掌握GoF設計模式,相關提供實例應用的書籍有下面幾本:

          Mark Grand的Patterns in Java系列;

          美籍華人閻宏的《Java與模式》;

          筆者的《Java實用系統開發指南》;

          EJB

          EJB是J2EE中一個重要組成部分,J2EE推薦將你的業務功能核心放在EJB中實現,EJB類似肯得基的“全家桶”,將實際中需要的基礎功能全都打包在一起了,如果你是個挑剔或個性化的客戶,我想你可能不會只滿足于“全家桶”。不管“全家桶”是否合適你,了解它里面裝的是什么是一個必需的過程。掌握EJB需要從兩個方面著手:基本原理和如何使用。

          《精通EJB(第二版)》

          是對EJB原理講解得比較透徹,但是書中將EJB一些本質原理推卸給了Corba,而對Corba又沒有仔細介紹,我認為初學者應該在這里適可而止,如果你非常對EJB底層實現感興趣,我推薦閱讀JBoss的源碼,其實JBoss源碼在你孜孜不倦的鉆研之勁攻擊下很快會土崩瓦解。

          對象池(Object Pool)、RMI和事務機制應該是EJB原理掌握三個方向,這三種技術方向又可以推薦很多書籍供學習研究,這里就不說了。

          EJB主要分EJB容器和EJB應用系統,初學者更多精力應該關注如何構建EJB應用系統,由于EJB提供功能強大且非常有特點,因此,使用他們要非常小心,遵循一定的前提和規則,由此,EJB設計模式是不能不了解的。

          《EJB設計模式》

          是這方面的經典之作,在書中,作者指出了使用CMP注意特點、DAO模式的重要性、DTO模式的變種等。閱讀本書的同時,如果參考SUN的PetStore源碼學習,將會起到事半功倍的效果,完上面兩本書,自己動手實踐非常重要,EJB使用中關于EJB reference配置比較麻煩,其原理是這樣:調用者---- > EJB Reference ---> 被調用EJB的JNDI名稱 ---- >被調用EJB,這些細節使用問題只有實踐時才能碰到,也可以從網上尋找一些這方面的電子教程實例。

          只有調試了一兩個EJB實例,這時你才可以站出來表達你的想法:喜歡或不喜歡?架構選型時也可以提供參考意見:是輕量型還是重量型?盲目排斥EJB或認為EJB是唯一解決方案等兩種極端觀點是要不得的,條條大路通羅馬,伸縮和性能是關鍵。

          這里推薦一本從純設計角度看待EJB/J2EE的書籍:Rod Johnson的《J2EE設計開發編程指南》,英文是Expert o-ne-on-One J2EE Design and Development,Rod Johnson在書中從一個完美的設計角度指出了EJB缺點,這些缺點他是用黑體標識,非常醒目,同時,他將如果不使用EJB所帶來的額外工作量使用正常小字體標識了,算是輕描淡寫吧。當然,Rod Johnson為了將其理想的設計落實為代碼,主持了Spring框架開發,如果J2EE領域有一個既符合完美的設計要求,又能支持成熟應用,同時又是業界標準,那是一個多么令人向往的事情,Spring框架至少在這方面做了有益的探索。

          集群、Web服務和資源整合

          對于中大型軟件系統,集群和Web服務是必需掌握的技術,目前相關書籍不多。如何將J2EE新技術和現有資源整合,也屬于一個探索性的領域,期待這幾個方面有好的書籍問世。


          ?

          posted @ 2006-07-13 20:23 啊輝 閱讀(239) | 評論 (0)編輯 收藏

          僅列出標題  
          主站蜘蛛池模板: 营山县| 海盐县| 泊头市| 揭东县| 隆德县| 赤水市| 武邑县| 湘潭市| 象山县| 仙桃市| 锡林郭勒盟| 汪清县| 从化市| 广南县| 喀什市| 兴城市| 梅河口市| 永城市| 盱眙县| 新昌县| 河北省| 牙克石市| 威海市| 玉山县| 濉溪县| 澄城县| 昂仁县| 阳信县| 清水河县| 卫辉市| 武强县| 梧州市| 策勒县| 山东省| 台湾省| 广饶县| 色达县| 新乐市| 阜城县| 泰宁县| 平潭县|