文章編號(hào):11540時(shí)間:2024-10-01人氣:
如果您正在尋找一種快速有效的方法來(lái)下載 JDK 1.5,那么您來(lái)對(duì)地方了。本文將指導(dǎo)您完成從官方來(lái)源下載 JDK 1.5 的步驟,并提供一些有用的提示和技巧,以幫助您順利完成下載。
Java是一門面向?qū)ο?a href="http://m.hudongshop.com/article/135bfa9fe529bad6c085.html" target="_blank">編程語(yǔ)言,不僅吸收了C++語(yǔ)言的各種優(yōu)點(diǎn),還摒棄了C++里難以理解的多繼承、指針等概念,因此Java語(yǔ)言具有功能強(qiáng)大和簡(jiǎn)單易用兩個(gè)特征。 Java語(yǔ)言作為靜態(tài)面向?qū)ο缶幊陶Z(yǔ)言的代表,極好地實(shí)現(xiàn)了面向?qū)ο罄碚摚试S程序員以優(yōu)雅的思維方式進(jìn)行復(fù)雜的編程[1]。 Java具有簡(jiǎn)單性、面向?qū)ο蟆⒎植际健⒔研浴踩浴⑵脚_(tái)獨(dú)立與可移植性、多線程、動(dòng)態(tài)性等特點(diǎn)[2]。 Java可以編寫桌面應(yīng)用程序、Web應(yīng)用程序、分布式系統(tǒng)和嵌入式系統(tǒng)應(yīng)用程序等[3]。 外文名Java現(xiàn)公司Oracle推出時(shí)間1995年5月快速導(dǎo)航編程開(kāi)發(fā) 語(yǔ)言特點(diǎn) 工作原理 語(yǔ)言基礎(chǔ) 語(yǔ)言標(biāo)準(zhǔn) 語(yǔ)言規(guī)范 技術(shù)應(yīng)用 學(xué)習(xí)指南 語(yǔ)言評(píng)價(jià)發(fā)展歷程20世紀(jì)90年代,硬件領(lǐng)域出現(xiàn)了單片式計(jì)算機(jī)系統(tǒng),這種價(jià)格低廉的系統(tǒng)一出現(xiàn)就立即引起了自動(dòng)控制領(lǐng)域人員的注意,因?yàn)槭褂盟梢源蠓忍嵘M(fèi)類電子產(chǎn)品(如電視機(jī)頂盒、面包烤箱、移動(dòng)電話等)的智能化程度。 Sun公司為了搶占市場(chǎng)先機(jī),在1991年成立了一個(gè)稱為Green的項(xiàng)目小組,帕特里克、詹姆斯·高斯林、麥克·舍林丹和其他幾個(gè)工程師一起組成的工作小組在加利福尼亞州門洛帕克市沙丘路的一個(gè)小工作室里面研究開(kāi)發(fā)新技術(shù),專攻計(jì)算機(jī)在家電產(chǎn)品上的嵌入式應(yīng)用。 JAVA由于C++所具有的優(yōu)勢(shì),該項(xiàng)目組的研究人員首先考慮采用C++來(lái)編寫程序。 但對(duì)于硬件資源極其匱乏的單片式系統(tǒng)來(lái)說(shuō),C++程序過(guò)于復(fù)雜和龐大。 另外由于消費(fèi)電子產(chǎn)品所采用的嵌入式處理器芯片的種類繁雜,如何讓編寫的程序跨平臺(tái)運(yùn)行也是個(gè)難題。 為了解決困難,他們首先著眼于語(yǔ)言的開(kāi)發(fā),假設(shè)了一種結(jié)構(gòu)簡(jiǎn)單、符合嵌入式應(yīng)用需要的硬件平臺(tái)體系結(jié)構(gòu)并為其制定了相應(yīng)的規(guī)范,其中就定義了這種硬件平臺(tái)的二進(jìn)制機(jī)器碼指令系統(tǒng)(即后來(lái)成為“字節(jié)碼”的指令系統(tǒng)),以待語(yǔ)言開(kāi)發(fā)成功后,能有半導(dǎo)體芯片生產(chǎn)商開(kāi)發(fā)和生產(chǎn)這種硬件平臺(tái)。 對(duì)于新語(yǔ)言的設(shè)計(jì),Sun公司研發(fā)人員并沒(méi)有開(kāi)發(fā)一種全新的語(yǔ)言,而是根據(jù)嵌入式軟件的要求,對(duì)C++進(jìn)行了改造,去除了留在C++的一些不太實(shí)用及影響安全的成分,并結(jié)合嵌入式系統(tǒng)的實(shí)時(shí)性要求,開(kāi)發(fā)了一種稱為Oak的面向?qū)ο笳Z(yǔ)言。 由于在開(kāi)發(fā)Oak語(yǔ)言時(shí),尚且不存在運(yùn)行字節(jié)碼的硬件平臺(tái),所以為了在開(kāi)發(fā)時(shí)可以對(duì)這種語(yǔ)言進(jìn)行實(shí)驗(yàn)研究,他們就在已有的硬件和軟件平臺(tái)基礎(chǔ)上,按照自己所指定的規(guī)范,用軟件建設(shè)了一個(gè)運(yùn)行平臺(tái),整個(gè)系統(tǒng)除了比C++更加簡(jiǎn)單之外,沒(méi)有什么大的區(qū)別。 1992年的夏天,當(dāng)Oak語(yǔ)言開(kāi)發(fā)成功后,研究者們向硬件生產(chǎn)商進(jìn)行演示了Green操作系統(tǒng)、Oak的程序設(shè)計(jì)語(yǔ)言、類庫(kù)和其硬件,以說(shuō)服他們使用Oak語(yǔ)言生產(chǎn)硬件芯片,但是,硬件生產(chǎn)商并未對(duì)此產(chǎn)生極大的熱情。 因?yàn)樗麄冋J(rèn)為,在所有人對(duì)Oak語(yǔ)言還一無(wú)所知的情況下,就生產(chǎn)硬件產(chǎn)品的風(fēng)險(xiǎn)實(shí)在太大了,所以O(shè)ak語(yǔ)言也就因?yàn)槿狈τ布闹С侄鵁o(wú)法進(jìn)入市場(chǎng),從而被擱置了下來(lái)。 1994年6、7月間,在經(jīng)歷了一場(chǎng)歷時(shí)三天的討論之后,團(tuán)隊(duì)決定再一次改變了努力的目標(biāo),這次他們決定將該技術(shù)應(yīng)用于萬(wàn)維網(wǎng)。 他們認(rèn)為隨著Mosaic瀏覽器的到來(lái),因特網(wǎng)正在向同樣的高度互動(dòng)的遠(yuǎn)景演變,而這一遠(yuǎn)景正是他們?cè)谟芯€電視網(wǎng)中看到的。 作為原型,帕特里克·諾頓寫了一個(gè)小型萬(wàn)維網(wǎng)瀏覽器WebRunner。 [4]1995年,互聯(lián)網(wǎng)的蓬勃發(fā)展給了Oak機(jī)會(huì)。 業(yè)界為了使死板、單調(diào)的靜態(tài)網(wǎng)頁(yè)能夠“靈活”起來(lái),急需一種軟件技術(shù)來(lái)開(kāi)發(fā)一種程序,這種程序可以通過(guò)網(wǎng)絡(luò)傳播并且能夠跨平臺(tái)運(yùn)行。 于是,世界各大IT企業(yè)為此紛紛投入了大量的人力、物力和財(cái)力。 這個(gè)時(shí)候,Sun公司想起了那個(gè)被擱置起來(lái)很久的Oak,并且重新審視了那個(gè)用軟件編寫的試驗(yàn)平臺(tái),由于它是按照嵌入式系統(tǒng)硬件平臺(tái)體系結(jié)構(gòu)進(jìn)行編寫的,所以非常小,特別適用于網(wǎng)絡(luò)上的傳輸系統(tǒng),而Oak也是一種精簡(jiǎn)的語(yǔ)言,程序非常小,適合在網(wǎng)絡(luò)上傳輸。 Sun公司首先推出了可以嵌入網(wǎng)頁(yè)并且可以隨同網(wǎng)頁(yè)在網(wǎng)絡(luò)上傳輸?shù)腁pplet(Applet是一種將小程序嵌入到網(wǎng)頁(yè)中進(jìn)行執(zhí)行的技術(shù)),并將Oak更名為Java(在申請(qǐng)注冊(cè)商標(biāo)時(shí),發(fā)現(xiàn)Oak已經(jīng)被人使用了,再想了一系列名字之后,最終,使用了提議者在喝一杯Java咖啡時(shí)無(wú)意提到的Java詞語(yǔ))。 5月23日,Sun公司在Sun world會(huì)議上正式發(fā)布Java和HotJava瀏覽器。 IBM、Apple、DEC、Adobe、HP、Oracle、Netscape和微軟等各大公司都紛紛停止了自己的相關(guān)開(kāi)發(fā)項(xiàng)目,競(jìng)相購(gòu)買了Java使用許可證,并為自己的產(chǎn)品開(kāi)發(fā)了相應(yīng)的Java平臺(tái)。 [5] [6]1996年1月,Sun公司發(fā)布了Java的第一個(gè)開(kāi)發(fā)工具包(JDK 1.0),這是Java發(fā)展歷程中的重要里程碑,標(biāo)志著Java成為一種獨(dú)立的開(kāi)發(fā)工具。 9月,約8.3萬(wàn)個(gè)網(wǎng)頁(yè)應(yīng)用了Java技術(shù)來(lái)制作。 10月,Sun公司發(fā)布了Java平臺(tái)的第一個(gè)即時(shí)(JIT)編譯器。 1997年2月,JDK 1.1面世,在隨后的3周時(shí)間里,達(dá)到了22萬(wàn)次的下載量。 4月2日,Java One會(huì)議召開(kāi),參會(huì)者逾一萬(wàn)人,創(chuàng)當(dāng)時(shí)全球同類會(huì)議規(guī)模之紀(jì)錄。 9月,Java Developer Connection社區(qū)成員超過(guò)10萬(wàn)。 1998年12月8日,第二代Java平臺(tái)的企業(yè)版J2EE發(fā)布。 1999年6月,Sun公司發(fā)布了第二代Java平臺(tái)(簡(jiǎn)稱為Java2)的3個(gè)版本:J2ME(Java2 Micro Edition,Java2平臺(tái)的微型版),應(yīng)用于移動(dòng)、無(wú)線及有限資源的環(huán)境;J2SE(Java 2 Standard Edition,Java 2平臺(tái)的標(biāo)準(zhǔn)版),應(yīng)用于桌面環(huán)境;J2EE(Java 2Enterprise Edition,Java 2平臺(tái)的企業(yè)版),應(yīng)用于基于Java的應(yīng)用服務(wù)器。 Java 2平臺(tái)的發(fā)布,是Java發(fā)展過(guò)程中最重要的一個(gè)里程碑,標(biāo)志著Java的應(yīng)用開(kāi)始普及。 1999年4月27日,HotSpot虛擬機(jī)發(fā)布。 HotSpot虛擬機(jī)發(fā)布時(shí)是作為JDK 1.2的附加程序提供的,后來(lái)它成為了JDK 1.3及之后所有版本的Sun JDK的默認(rèn)虛擬機(jī)[7] 。 2000年5月,JDK1.3、JDK1.4和J2SE1.3相繼發(fā)布,幾周后其獲得了Apple公司Mac OS X的工業(yè)標(biāo)準(zhǔn)的支持。 2001年9月24日,J2EE1.3發(fā)布。 2002年2月26日,J2SE1.4發(fā)布。 自此Java的計(jì)算能力有了大幅提升,與J2SE1.3相比,其多了近62%的類和接口。 在這些新特性當(dāng)中,還提供了廣泛的XML支持、安全套接字(Socket)支持(通過(guò)SSL與TLS協(xié)議)、全新的I/OAPI、正則表達(dá)式、日志與斷言。 2004年9月30日,J2SE1.5發(fā)布,成為Java語(yǔ)言發(fā)展史上的又一里程碑。 為了表示該版本的重要性,J2SE 1.5更名為Java SE 5.0(內(nèi)部版本號(hào)1.5.0),代號(hào)為“Tiger”,Tiger包含了從1996年發(fā)布1.0版本以來(lái)的最重大的更新,其中包括泛型支持、基本類型的自動(dòng)裝箱、改進(jìn)的循環(huán)、枚舉類型、格式化I/O及可變參數(shù)。 Java創(chuàng)始人之一:詹姆斯·高斯林2005年6月,在Java One大會(huì)上,Sun公司發(fā)布了Java SE 6。 此時(shí),Java的各種版本已經(jīng)更名,已取消其中的數(shù)字2,如J2EE更名為JavaEE,J2SE更名為JavaSE,J2ME更名為JavaME。 [8]2006年11月13日,Java技術(shù)的發(fā)明者Sun公司宣布,將Java技術(shù)作為免費(fèi)軟件對(duì)外發(fā)布。 Sun公司正式發(fā)布的有關(guān)Java平臺(tái)標(biāo)準(zhǔn)版的第一批源代碼,以及Java迷你版的可執(zhí)行源代碼。 從2007年3月起,全世界所有的開(kāi)發(fā)人員均可對(duì)Java源代碼進(jìn)行修改[9] 。 2009年,甲骨文公司宣布收購(gòu)Sun[10] 。 2010年,Java編程語(yǔ)言的共同創(chuàng)始人之一詹姆斯·高斯林從Oracle公司辭職。 2011年,甲骨文公司舉行了全球性的活動(dòng),以慶祝Java7的推出,隨后Java7正式發(fā)布。 2014年,甲骨文公司發(fā)布了Java8正式版[11] 。 編程開(kāi)發(fā)編程環(huán)境Java概念圖JDK(Java Development Kit)稱為Java開(kāi)發(fā)包或Java開(kāi)發(fā)工具,是一個(gè)編寫Java的Applet小程序和應(yīng)用程序的程序開(kāi)發(fā)環(huán)境。 JDK是整個(gè)Java的核心,包括了Java運(yùn)行環(huán)境(Java Runtime Environment),一些Java工具和Java的核心類庫(kù)(Java API)。 不論什么Java應(yīng)用服務(wù)器實(shí)質(zhì)都是內(nèi)置了某個(gè)版本的JDK。 主流的JDK是Sun公司發(fā)布的JDK,除了Sun之外,還有很多公司和組織都開(kāi)發(fā)了自己的JDK,例如,IBM公司開(kāi)發(fā)的JDK,BEA公司的Jrocket,還有GNU組織開(kāi)發(fā)的JDK[13] 。 另外,可以把Java API類庫(kù)中的Java SE API子集和Java虛擬機(jī)這兩部分統(tǒng)稱為JRE(JAVA Runtime Environment),JRE是支持Java程序運(yùn)行的標(biāo)準(zhǔn)環(huán)境[14] 。 JRE是個(gè)運(yùn)行環(huán)境,JDK是個(gè)開(kāi)發(fā)環(huán)境。 因此寫Java程序的時(shí)候需要JDK,而運(yùn)行Java程序的時(shí)候就需要JRE。 而JDK里面已經(jīng)包含了JRE,因此只要安裝了JDK,就可以編輯Java程序,也可以正常運(yùn)行Java程序。 但由于JDK包含了許多與運(yùn)行無(wú)關(guān)的內(nèi)容,占用的空間較大,因此運(yùn)行普通的Java程序無(wú)須安裝JDK,而只需要安裝JRE即可[15] 。 編程工具Eclipse:一個(gè)開(kāi)放源代碼的、基于Java的可擴(kuò)展開(kāi)發(fā)平臺(tái)[16] 。 NetBeans:開(kāi)放源碼的Java集成開(kāi)發(fā)環(huán)境,適用于各種客戶機(jī)和Web應(yīng)用。 IntelliJ IDEA:在代碼自動(dòng)提示、代碼分析等方面的具有很好的功能。 [17]MyEclipse:由Genuitec公司開(kāi)發(fā)的一款商業(yè)化軟件,是應(yīng)用比較廣泛的Java應(yīng)用程序集成開(kāi)發(fā)環(huán)境[18] 。 EditPlus:如果正確配置Java的編譯器“Javac”以及解釋器“Java”后,可直接使用EditPlus編譯執(zhí)行Java程序[19] 。 語(yǔ)言特點(diǎn)1.簡(jiǎn)單性Java看起來(lái)設(shè)計(jì)得很像C++,但是為了使語(yǔ)言小和容易熟悉,設(shè)計(jì)者們把C++語(yǔ)言中許多可用的特征去掉了,這些特征是一般程序員很少使用的。 例如,Java不支持go to語(yǔ)句,代之以提供break和continue語(yǔ)句以及異常處理。 Java還剔除了C++的操作符過(guò)載(overload)和多繼承特征,并且不使用主文件,免去了預(yù)處理程序。 因?yàn)镴ava沒(méi)有結(jié)構(gòu),數(shù)組和串都是對(duì)象,所以不需要指針。 Java能夠自動(dòng)處理對(duì)象的引用和間接引用,實(shí)現(xiàn)自動(dòng)的無(wú)用單元收集,使用戶不必為存儲(chǔ)管理問(wèn)題煩惱,能更多的時(shí)間和精力花在研發(fā)上。 2.面向?qū)ο驤ava是一個(gè)面向?qū)ο蟮恼Z(yǔ)言。 對(duì)程序員來(lái)說(shuō),這意味著要注意應(yīng)中的數(shù)據(jù)和操縱數(shù)據(jù)的方法(method),而不是嚴(yán)格地用過(guò)程來(lái)思考。 在一個(gè)面向?qū)ο蟮南到y(tǒng)中,類(class)是數(shù)據(jù)和操作數(shù)據(jù)的方法的集合。 數(shù)據(jù)和方法一起描述對(duì)象(object)的狀態(tài)和行為。 每一對(duì)象是其狀態(tài)和行為的封裝。 類是按一定體系和層次安排的,使得子類可以從超類繼承行為。 在這個(gè)類層次體系中有一個(gè)根類,它是具有一般行為的類。 Java程序是用類來(lái)組織的。 Java還包括一個(gè)類的擴(kuò)展集合,分別組成各種程序包(Package),用戶可以在自己的程序中使用。 例如,Java提供產(chǎn)生圖形用戶接口部件的類(包),這里awt是抽象窗口工具集(abstract windowing toolkit)的縮寫,處理輸入輸出的類(包)和支持網(wǎng)絡(luò)功能的類(包)。 3.分布性Java設(shè)計(jì)成支持在網(wǎng)絡(luò)上應(yīng)用,它是分布式語(yǔ)言。 Java既支持各種層次的網(wǎng)絡(luò)連接,又以Socket類支持可靠的流(stream)網(wǎng)絡(luò)連接,所以用戶可以產(chǎn)生分布式的客戶機(jī)和服務(wù)器。 網(wǎng)絡(luò)變成軟件應(yīng)用的分布運(yùn)載工具。 Java程序只要編寫一次,就可到處運(yùn)行。 4.編譯和解釋性Java編譯程序生成字節(jié)碼(byte-code),而不是通常的機(jī)器碼。 Java字節(jié)碼提供對(duì)體系結(jié)構(gòu)中性的目標(biāo)文件格式,代碼設(shè)計(jì)成可有效地傳送程序到多個(gè)平臺(tái)。 Java程序可以在任何實(shí)現(xiàn)了Java解釋程序和運(yùn)行系統(tǒng)(run-time system)的系統(tǒng)上運(yùn)行。 在一個(gè)解釋性的環(huán)境中,程序開(kāi)發(fā)的標(biāo)準(zhǔn)“鏈接”階段大大消失了。 如果說(shuō)Java還有一個(gè)鏈接階段,它只是把新類裝進(jìn)環(huán)境的過(guò)程,它是增量式的、輕量級(jí)的過(guò)程。 因此,Java支持快速原型和容易試驗(yàn),它將導(dǎo)致快速程序開(kāi)發(fā)。 這是一個(gè)與傳統(tǒng)的、耗時(shí)的“編譯、鏈接和測(cè)試”形成鮮明對(duì)比的精巧的開(kāi)發(fā)過(guò)程。 5.穩(wěn)健性Java原來(lái)是用作編寫消費(fèi)類家用電子產(chǎn)品軟件的語(yǔ)言,所以它是被設(shè)計(jì)成寫高可靠和穩(wěn)健軟件的。 Java消除了某些編程錯(cuò)誤,使得用它寫可靠軟件相當(dāng)容易。 JavaJava是一個(gè)強(qiáng)類型語(yǔ)言,它允許擴(kuò)展編譯時(shí)檢查潛在類型不匹配問(wèn)題的功能。 Java要求顯式的方法聲明,它不支持C風(fēng)格的隱式聲明。 這些嚴(yán)格的要求保證編譯程序能捕捉調(diào)用錯(cuò)誤,這就導(dǎo)致更可靠的程序。 可靠性方面最重要的增強(qiáng)之一是Java的存儲(chǔ)模型。 Java不支持指針,它消除重寫存儲(chǔ)和訛誤數(shù)據(jù)的可能性。 類似地,Java自動(dòng)的“無(wú)用單元收集”預(yù)防存儲(chǔ)漏泄和其它有關(guān)動(dòng)態(tài)存儲(chǔ)分配和解除分配的有害錯(cuò)誤。 Java解釋程序也執(zhí)行許多運(yùn)行時(shí)的檢查,諸如驗(yàn)證所有數(shù)組和串訪問(wèn)是否在界限之內(nèi)。 異常處理是Java中使得程序更穩(wěn)健的另一個(gè)特征。 異常是某種類似于錯(cuò)誤的異常條件出現(xiàn)的信號(hào)。 使用try/catch/finally語(yǔ)句,程序員可以找到出錯(cuò)的處理代碼,這就簡(jiǎn)化了出錯(cuò)處理和恢復(fù)的任務(wù)。 6.安全性Java的存儲(chǔ)分配模型是它防御惡意代碼的主要方法之一。 Java沒(méi)有指針,所以程序員不能得到隱蔽起來(lái)的內(nèi)幕和偽造指針去指向存儲(chǔ)器。 更重要的是,Java編譯程序不處理存儲(chǔ)安排決策,所以程序員不能通過(guò)查看聲明去猜測(cè)類的實(shí)際存儲(chǔ)安排。 編譯的Java代碼中的存儲(chǔ)引用在運(yùn)行時(shí)由Java解釋程序決定實(shí)際存儲(chǔ)地址。 Java運(yùn)行系統(tǒng)使用字節(jié)碼驗(yàn)證過(guò)程來(lái)保證裝載到網(wǎng)絡(luò)上的代碼不違背任何Java語(yǔ)言限制。 這個(gè)安全機(jī)制部分包括類如何從網(wǎng)上裝載。 例如,裝載的類是放在分開(kāi)的名字空間而不是局部類,預(yù)防惡意的小應(yīng)用程序用它自己的版本來(lái)代替標(biāo)準(zhǔn)Java類。 7.可移植性Java使得語(yǔ)言聲明不依賴于實(shí)現(xiàn)的方面。 例如,Java顯式說(shuō)明每個(gè)基本數(shù)據(jù)類型的大小和它的運(yùn)算行為(這些數(shù)據(jù)類型由Java語(yǔ)法描述)。 Java環(huán)境本身對(duì)新的硬件平臺(tái)和操作系統(tǒng)是可移植的。 Java編譯程序也用Java編寫,而Java運(yùn)行系統(tǒng)用ANSIC語(yǔ)言編寫。 8.高性能Java是一種先編譯后解釋的語(yǔ)言,所以它不如全編譯性語(yǔ)言快。 但是有些情況下性能是很要緊的,為了支持這些情況,Java設(shè)計(jì)者制作了“及時(shí)”編譯程序,它能在運(yùn)行時(shí)把Java字節(jié)碼翻譯成特定CPU(中央處理器)的機(jī)器代碼,也就是實(shí)現(xiàn)全編譯了。 Java字節(jié)碼格式設(shè)計(jì)時(shí)考慮到這些“及時(shí)”編譯程序的需要,所以生成機(jī)器代碼的過(guò)程相當(dāng)簡(jiǎn)單,它能產(chǎn)生相當(dāng)好的代碼。 9.多線程性Java是多線程語(yǔ)言,它提供支持多線程的執(zhí)行(也稱為輕便過(guò)程),能處理不同任務(wù),使具有線索的程序設(shè)計(jì)很容易。 Java的lang包提供一個(gè)Thread類,它支持開(kāi)始線索、運(yùn)行線索、停止線索和檢查線索狀態(tài)的方法。 Java的線索支持也包括一組同步原語(yǔ)。 這些原語(yǔ)是基于監(jiān)督程序和條件變量風(fēng)范,由開(kāi)發(fā)的廣泛使用的同步化方案。 用關(guān)鍵詞synchronized,程序員可以說(shuō)明某些方法在一個(gè)類中不能并發(fā)地運(yùn)行。 這些方法在監(jiān)督程序控制之下,確保變量維持在一個(gè)一致的狀態(tài)。 10.動(dòng)態(tài)性Java語(yǔ)言設(shè)計(jì)成適應(yīng)于變化的環(huán)境,它是一個(gè)動(dòng)態(tài)的語(yǔ)言。 例如,Java中的類是根據(jù)需要載入的,甚至有些是通過(guò)網(wǎng)絡(luò)獲取的。 [20]工作原理由四方面組成:工作原理(1)Java編程語(yǔ)言(2)Java類文件格式(3)Java虛擬機(jī)(4)Java應(yīng)用程序接口[21]當(dāng)編輯并運(yùn)行一個(gè)Java程序時(shí),需要同時(shí)涉及到這四種方面。 使用文字編輯軟件(例如記事本、寫字板、UltraEdit等)或集成開(kāi)發(fā)環(huán)境(Eclipse、MyEclipse等)在Java源文件中定義不同的類[22] ,通過(guò)調(diào)用類(這些類實(shí)現(xiàn)了Java API)中的方法來(lái)訪問(wèn)資源系統(tǒng),把源文件編譯生成一種二進(jìn)制中間碼,存儲(chǔ)在class文件中,然后再通過(guò)運(yùn)行與操作系統(tǒng)平臺(tái)環(huán)境相對(duì)應(yīng)的Java虛擬機(jī)來(lái)運(yùn)行class文件,執(zhí)行編譯產(chǎn)生的字節(jié)碼,調(diào)用class文件中實(shí)現(xiàn)的方法來(lái)滿足程序的Java API調(diào)用[6] 。 語(yǔ)言基礎(chǔ)基本數(shù)據(jù)結(jié)構(gòu)在Java中有8種數(shù)據(jù)類型來(lái)存儲(chǔ)數(shù)值、字符和布爾值。 整數(shù)類型整數(shù)型用來(lái)存儲(chǔ)整數(shù)數(shù)值,即沒(méi)有小數(shù)部分的數(shù)值。 可以是正數(shù),也可以是負(fù)數(shù)。 整數(shù)數(shù)據(jù)在Java程序中有3種表示形式,分別為十進(jìn)制、八進(jìn)制和十六進(jìn)制。 整型數(shù)據(jù)根據(jù)它所占內(nèi)容大小的不同可分為4種類型。 數(shù)據(jù)類型內(nèi)存byte8位short16位int32位展開(kāi)全部浮點(diǎn)類型數(shù)據(jù)類型內(nèi)存float32位double64位字符類型字符類型用于存儲(chǔ)單個(gè)字符,占用16位(兩個(gè)字節(jié))的內(nèi)存空間。 在定義字符型變量時(shí),要以單引號(hào)表示。 使用char關(guān)鍵字可定義字符變量。 數(shù)據(jù)類型內(nèi)存char16位布爾類型布爾類型又稱邏輯類型,通過(guò)關(guān)鍵字boolean來(lái)定義布爾類型變量,只有只有true和false兩個(gè)取值,分別代表布爾邏輯中的“真”和“假”。 布爾類型通常被用在流程控制中作為判斷條件。 關(guān)鍵字關(guān)鍵字含義abstract抽象類或方法Assert用來(lái)查找內(nèi)部程序錯(cuò)誤break跳出一個(gè)switch或循環(huán)展開(kāi)全部關(guān)鍵字參考資料來(lái)源[23]運(yùn)算符運(yùn)算符是一些特殊的符號(hào),主要用于數(shù)學(xué)函數(shù)、一些類型的賦值語(yǔ)句和邏輯比較方面。 賦值運(yùn)算符賦值運(yùn)算符以符號(hào)“=”表示,它是一個(gè)二元運(yùn)算符(對(duì)兩個(gè)操作數(shù)作處理),其功能是將右方操作數(shù)所含的值賦給左方的操作數(shù)。 例如:int a = 100;算術(shù)運(yùn)算符運(yùn)算符說(shuō)明+加-減*乘展開(kāi)全部自增和自減運(yùn)算符自增和自減是單目運(yùn)算符,可以放在操作元之前,也可以放在操作元之后。 操作元必須是一個(gè)整型或浮點(diǎn)型變量。 自增、自減運(yùn)算符的作用是使變量的值增1或減1。 放在操作元前面的自增、自減運(yùn)算符,會(huì)先將變量的值加1或減1,然后再使該變量參與表達(dá)式的運(yùn)算。 放在操作元后面的自增、自減運(yùn)算符,會(huì)先使變量參與表達(dá)式的運(yùn)算,然后再將該變量的值加1或減1。 例如:假設(shè)a=5b=++a;//先將a的值加1,然后賦值給b,此時(shí)a的值為6,b的值為6b=a++;//先將a的值賦值給b,再將a的值變?yōu)?,此時(shí)a的值為6,b的值為5比較運(yùn)算符比較運(yùn)算符屬于二元運(yùn)算符,用于程序中的變量之間,變量和自變量之間以及其他類型的信息之間的比較。 比較運(yùn)算符的運(yùn)算結(jié)果是boolean型。 當(dāng)運(yùn)算符對(duì)應(yīng)的關(guān)系成立時(shí),運(yùn)算的結(jié)果為true,否則為false。 比較運(yùn)算符共有6個(gè),通常作為判斷的依據(jù)用于條件語(yǔ)句中。 運(yùn)算符說(shuō)明>比較左方是否大于右方<比較左方是否小于右方==比較左方是否等于右方展開(kāi)全部邏輯運(yùn)算符運(yùn)算符作用&&邏輯與||邏輯或!邏輯非語(yǔ)言基礎(chǔ)參考資料來(lái)源[24]程序舉例/*一個(gè)簡(jiǎn)單的Java應(yīng)用程序,顯示內(nèi)容:Hello World!文件名為Hello.java*/class Hello{//程序開(kāi)始于main()public static void main(String args[]){(Hello World!);} }main方法,正如注釋所說(shuō),這是程序開(kāi)始執(zhí)行的第一行。 對(duì)于一個(gè)Java應(yīng)用程序來(lái)說(shuō),main方法是必需的,Java解釋器在沒(méi)有生成任何對(duì)象的情況下,以main作為入口來(lái)執(zhí)行程序。 每個(gè)類中可以定義多個(gè)方法,但main方法只能有一個(gè)。 關(guān)鍵字public表示訪問(wèn)權(quán)限,指明所有的類都可以使用這一方法。 本例中,main必須被定義為public類型,因?yàn)楫?dāng)程序開(kāi)始執(zhí)行時(shí)它需要被它的類之外的代碼調(diào)用。 關(guān)鍵字static指明該方法是一個(gè)類方法。 關(guān)鍵字void指明main()方法不返回任何值。 main方法圓括號(hào)中定義的String args[]是傳送給main方法的參數(shù),參數(shù)名為args,它是類String的一個(gè)對(duì)象。 方法的參數(shù)用“類名參數(shù)名”來(lái)指定,多個(gè)參數(shù)間用逗號(hào)分隔。 該行的最后一個(gè)字符是“{”,它表示了main程序體的開(kāi)始,一個(gè)方法中包含的所有代碼都將包括在這對(duì)花括號(hào)中間。 另外,main僅是解釋器開(kāi)始工作的地方,一個(gè)復(fù)雜的程序可能包含幾十個(gè)類,但這些類僅需要一個(gè)main方法。 [25]語(yǔ)言標(biāo)準(zhǔn)1997年11月17日,國(guó)際標(biāo)準(zhǔn)化組織(ISO)同意采納Sun公司的專利技術(shù)——Java作為ISO標(biāo)準(zhǔn)。 JAVA作為一個(gè)技術(shù)標(biāo)準(zhǔn)供公眾無(wú)償使用。 根據(jù)ISO的批準(zhǔn),Sun公司將可提交JAVA的標(biāo)準(zhǔn)化平臺(tái)規(guī)范。 [26]發(fā)布時(shí)間名稱2000年11月15日ISO/TS -27年5月15日ISO/IEC -2年7月15日ISO/IEC TR -6:2014展開(kāi)全部語(yǔ)言標(biāo)準(zhǔn)參考資料[27] [28] [29] [30] [31]語(yǔ)言規(guī)范JCP(Java Community Process)是一個(gè)開(kāi)放的國(guó)際組織,主要由Java開(kāi)發(fā)者以及被授權(quán)者組成,職能是發(fā)展和更新Java技術(shù)規(guī)范、參考實(shí)現(xiàn)(RI)、技術(shù)兼容包(TCK)。 JCP維護(hù)的規(guī)范包括Java ME、Java SE、Java EE、XML、OSS、JAIN等。 組織成員可以提交JSR(Java Specification Requests),通過(guò)特定程序以后,進(jìn)入到下一版本的規(guī)范里面。 JSR是早期提議和最終發(fā)布的Java平臺(tái)規(guī)范的具體描述。 通常,一個(gè)新的JSR的提出是為了增加或者規(guī)范Java平臺(tái)的功能。 某個(gè)具體的JSR由專家組共同來(lái)制定,工作由組長(zhǎng)協(xié)調(diào)。 例如,CLDC1.0(Connected Limited Device Configuration,JSR30)由Sun公司的Antero Taivalsaari擔(dān)任組長(zhǎng),同時(shí)專家組的成員還包括Siemens、Motorola、Nokia、Symbian等。 Java ME平臺(tái)規(guī)范是在JSR68中定義的,規(guī)范組長(zhǎng)是Sun公司的Jon Courtney。 JSR完成后,相關(guān)的規(guī)范及JavaAPI會(huì)在JCP的官方網(wǎng)站發(fā)布。 設(shè)備制造商可以在自己的產(chǎn)品中實(shí)現(xiàn)某個(gè)JSR,如MIDP2.0(JSRll8)。 但是這些都必須要通過(guò)TCK(Technology Compatibility Kit)測(cè)試以確保技術(shù)兼容性。 [32]按照技術(shù)類別可以分成以下幾類:1、J2EE平臺(tái)規(guī)范[33]2、J2SE平臺(tái)規(guī)范[34]3、J2ME平臺(tái)規(guī)范[35]4、運(yùn)營(yíng)支持系統(tǒng)規(guī)范(OSS)[36]5、綜合網(wǎng)絡(luò)的Java 應(yīng)用(JAIN)[37]6、XML 操作規(guī)范[38]技術(shù)應(yīng)用1、Android應(yīng)用許多的 Android應(yīng)用都是Java程序員開(kāi)發(fā)者開(kāi)發(fā)。 雖然 Android運(yùn)用了不同的JVM以及不同的封裝方式,但是代碼還是用Java語(yǔ)言所編寫。 相當(dāng)一部分的手機(jī)中都支持JAVA游戲,這就使很多非編程人員都認(rèn)識(shí)了JAVA。 2、在金融業(yè)應(yīng)用的服務(wù)器程序Java在金融服務(wù)業(yè)的應(yīng)用非常廣泛,很多第三方交易系統(tǒng)、銀行、金融機(jī)構(gòu)都選擇用Java開(kāi)發(fā),因?yàn)橄鄬?duì)而言,Java較安全[39] 。 大型跨國(guó)投資銀行用Java來(lái)編寫前臺(tái)和后臺(tái)的電子交易系統(tǒng),結(jié)算和確認(rèn)系統(tǒng),數(shù)據(jù)處理項(xiàng)目以及其他項(xiàng)目。 大多數(shù)情況下,Java被用在服務(wù)器端開(kāi)發(fā),但多數(shù)沒(méi)有任何前端,它們通常是從一個(gè)服務(wù)器(上一級(jí))接收數(shù)據(jù),處理后發(fā)向另一個(gè)處理系統(tǒng)(下一級(jí)處理)。 3、網(wǎng)站Java 在電子商務(wù)領(lǐng)域以及網(wǎng)站開(kāi)發(fā)領(lǐng)域占據(jù)了一定的席位。 開(kāi)發(fā)人員可以運(yùn)用許多不同的框架來(lái)創(chuàng)建web項(xiàng)目,SpringMVC,Struts2.0以及frameworks。 即使是簡(jiǎn)單的 servlet,jsp和以struts為基礎(chǔ)的網(wǎng)站在政府項(xiàng)目中也經(jīng)常被用到。 例如醫(yī)療救護(hù)、保險(xiǎn)、教育、國(guó)防以及其他的不同部門網(wǎng)站都是以Java為基礎(chǔ)來(lái)開(kāi)發(fā)的。 4、嵌入式領(lǐng)域Java在嵌入式領(lǐng)域發(fā)展空間很大。 在這個(gè)平臺(tái)上,只需130KB就能夠使用Java技術(shù)(在智能卡或者傳感器上)。 5、大數(shù)據(jù)技術(shù)Hadoop以及其他大數(shù)據(jù)處理技術(shù)很多都是用Java,例如Apache的基于Java的HBase和Accumulo以及 ElasticSearchas。 6、高頻交易的空間Java平臺(tái)提高了這個(gè)平臺(tái)的特性和即使編譯,他同時(shí)也能夠像 C++ 一樣傳遞數(shù)據(jù)。 正是由于這個(gè)原因,Java成為的程序員編寫交易平臺(tái)的語(yǔ)言,因?yàn)殡m然性能不比C++,但開(kāi)發(fā)人員可以避開(kāi)安全性,可移植性和可維護(hù)性等問(wèn)題。 7、科學(xué)應(yīng)用Java在科學(xué)應(yīng)用中是很好選擇,包括自然語(yǔ)言處理。 最主要的原因是因?yàn)镴ava比C++或者其他語(yǔ)言相對(duì)其安全性、便攜性、可維護(hù)性以及其他高級(jí)語(yǔ)言的并發(fā)性更好。 Java語(yǔ)言好學(xué)難精,配置東西比較復(fù)雜
Java學(xué)習(xí)之路:不走彎路,就是捷徑 (1) 作者: ∣來(lái)源:中國(guó)Java技術(shù)網(wǎng)∣原文地址∣2006-3-14 0.引言 在ChinaITLAB導(dǎo)師制輔導(dǎo)中,筆者發(fā)現(xiàn)問(wèn)得最多的問(wèn)題莫過(guò)于如何學(xué)習(xí)編程?Java該如何學(xué)習(xí)?。 類似的問(wèn)題回答多了,難免會(huì)感覺(jué)厭煩,就萌生了寫下本文的想法。 到時(shí)候再有人問(wèn)起類似的問(wèn)題,我可以告訴他(她),請(qǐng)你去看看《Java學(xué)習(xí)之路》。 拜讀過(guò)臺(tái)灣蔡學(xué)鏞先生的《Java夜未眠》,有些文章如《Java學(xué)習(xí)之道》等讓我們確實(shí)有共鳴,本文題目也由此而來(lái)。 軟件開(kāi)發(fā)之路是充滿荊棘與挑戰(zhàn)之路,也是充滿希望之路。 Java學(xué)習(xí)也是如此,沒(méi)有捷徑可走。 夢(mèng)想像《天龍八部》中虛竹一樣被無(wú)崖子醍醐灌頂而輕松獲得一甲子功力,是很不現(xiàn)實(shí)的。 每天仰天大叫天神啊,請(qǐng)賜給我一本葵花寶典吧,殊不知即使你獲得了葵花寶典,除了受自宮其身之苦外,你也不一定成得了東方不敗,倒是成西方失敗的幾率高一點(diǎn)。 不走彎路,就是捷徑,佛經(jīng)說(shuō)的不無(wú)道理。 1.如何學(xué)習(xí)程序設(shè)計(jì)? Java是一種平臺(tái),也是一種程序設(shè)計(jì)語(yǔ)言,如何學(xué)好程序設(shè)計(jì)不僅僅適用于Java,對(duì)C++等其他程序設(shè)計(jì)語(yǔ)言也一樣管用。 有編程高手認(rèn)為,Java也好C也好沒(méi)什么分別,拿來(lái)就用。 為什么他們能達(dá)到如此境界?我想是因?yàn)榫幊陶Z(yǔ)言之間有共通之處,領(lǐng)會(huì)了編程的精髓,自然能夠做到一通百通。 如何學(xué)習(xí)程序設(shè)計(jì)理所當(dāng)然也有許多共通的地方。 1.1 培養(yǎng)興趣 興趣是能夠讓你堅(jiān)持下去的動(dòng)力。 如果只是把寫程序作為謀生的手段的話,你會(huì)活的很累,也太對(duì)不起自己了。 多關(guān)心一些行業(yè)趣事,多想想蓋茨。 不是提倡天天做白日夢(mèng),但人要是沒(méi)有了夢(mèng)想,你覺(jué)得有味道嗎?可能像許多深圳本地農(nóng)民一樣,打打麻將,喝喝功夫茶,拜拜財(cái)神爺;每個(gè)月就有幾萬(wàn)十幾萬(wàn)甚至更多的進(jìn)帳,憑空多出個(gè)食利階層。 你認(rèn)為,這樣有味道嗎?有空多到一些程序員論壇轉(zhuǎn)轉(zhuǎn),你會(huì)發(fā)現(xiàn),他們其實(shí)很樂(lè)觀幽默,時(shí)不時(shí)會(huì)冒出智慧的火花。 1.2 慎選程序設(shè)計(jì)語(yǔ)言 男怕入錯(cuò)行,女怕嫁錯(cuò)郎。 初學(xué)者選擇程序設(shè)計(jì)語(yǔ)言需要謹(jǐn)慎對(duì)待。 軟件開(kāi)發(fā)不僅僅是掌握一門編程語(yǔ)言了事,它還需要其他很多方面的背景知識(shí)。 軟件開(kāi)發(fā)也不僅僅局限于某幾個(gè)領(lǐng)域,而是已經(jīng)滲透到了各行各業(yè)幾乎每一個(gè)角落。 如果你對(duì)硬件比較感興趣,你可以學(xué)習(xí)C語(yǔ)言/匯編語(yǔ)言,進(jìn)入硬件開(kāi)發(fā)領(lǐng)域。 如果你對(duì)電信的行業(yè)知識(shí)及網(wǎng)絡(luò)比較熟悉,你可以在C/C++等之上多花時(shí)間,以期進(jìn)入電信軟件開(kāi)發(fā)領(lǐng)域。 如果你對(duì)操作系統(tǒng)比較熟悉,你可以學(xué)習(xí)C/Linux等等,為L(zhǎng)inux內(nèi)核開(kāi)發(fā)/驅(qū)動(dòng)程序開(kāi)發(fā)/嵌入式開(kāi)發(fā)打基礎(chǔ)。 如果你想介入到應(yīng)用范圍最廣泛的應(yīng)用軟件開(kāi)發(fā)(包括電子商務(wù)電子政務(wù)系統(tǒng))的話,你可以選擇J2EE或,甚至LAMP組合。 每個(gè)領(lǐng)域要求的背景知識(shí)不一樣。 做應(yīng)用軟件需要對(duì)數(shù)據(jù)庫(kù)等很熟悉。 總之,你需要根據(jù)自己的特點(diǎn)來(lái)選擇合適你的編程語(yǔ)言。 1.3 要腳踏實(shí)地,快餐式的學(xué)習(xí)不可取 先分享一個(gè)故事。 有一個(gè)小朋友,他很喜歡研究生物學(xué),很想知道那些蝴蝶如何從蛹?xì)だ锍鰜?lái),變成蝴蝶便會(huì)飛。 有一次,他走到草原上面看見(jiàn)一個(gè)蛹,便取了回家,然后看著,過(guò)了幾天以后,這個(gè)蛹出了一條裂痕,看見(jiàn)里面的蝴蝶開(kāi)始掙扎,想抓破蛹?xì)わw出來(lái)。 這個(gè)過(guò)程達(dá)數(shù)小時(shí)之久,蝴蝶在蛹里面很辛苦地拼命掙扎,怎么也沒(méi)法子走出來(lái)。 這個(gè)小孩看著看著不忍心,就想不如讓我?guī)蛶退桑汶S手拿起剪刀在蛹上剪開(kāi),使蝴蝶破蛹而出。 但蝴蝶出來(lái)以后,因?yàn)槌岚虿粔蛄Γ兊煤苡纺[,飛不起來(lái)。 這個(gè)故事給我們的啟示是:欲速則不達(dá)。 浮躁是現(xiàn)代人最普遍的心態(tài),能怪誰(shuí)?也許是貧窮落后了這么多年的緣故,就像當(dāng)年的大躍進(jìn)一樣,都想大步跨入共產(chǎn)主義社會(huì)。 現(xiàn)在的軟件公司、客戶、政府、學(xué)校、培訓(xùn)機(jī)構(gòu)等等到處彌漫著浮躁之氣。 就拿筆者比較熟悉的深圳IT培訓(xùn)行業(yè)來(lái)說(shuō)吧,居然有的打廣告宣稱參加培訓(xùn),100%就業(yè),居然報(bào)名的學(xué)生不少,簡(jiǎn)直是藐視天下程序員。 社會(huì)環(huán)境如是,我們不能改變,只能改變自己,鬧市中的安寧,彌足珍貴。 許多初學(xué)者C++/Java沒(méi)開(kāi)始學(xué),立馬使用VC/JBuilder,會(huì)使用VC/JBuilder開(kāi)發(fā)一個(gè)Hello World程序,就忙不迭的向世界宣告,我會(huì)軟件開(kāi)發(fā)了,簡(jiǎn)歷上也大言不慚地寫上精通VC/Java。 結(jié)果到軟件公司面試時(shí)要么被三兩下打發(fā)走了,要么被駁的體無(wú)完膚,無(wú)地自容。 到處碰壁之后才知道捧起《C++編程思想》《Java編程思想》仔細(xì)鉆研,早知如此何必當(dāng)初呀。 你現(xiàn)在講究簡(jiǎn)單方便,你以后的路就長(zhǎng)了,好象也是佛經(jīng)中的勸戒。 1.4 多實(shí)踐,快實(shí)踐 彭端淑的《為學(xué)一首示子侄》中有窮和尚與富和尚的故事。 從前,四川邊境有兩個(gè)和尚,一個(gè)貧窮,一個(gè)有錢。 一天,窮和尚對(duì)富和尚說(shuō):我打算去南海朝圣,你看怎么樣?富和尚說(shuō):這里離南海有幾千里遠(yuǎn),你靠什么去呢?窮和尚說(shuō):我只要一個(gè)水缽,一個(gè)飯碗就夠了。 富和尚為難地說(shuō):幾年前我就打算買條船去南海,可至今沒(méi)去成,你還是別去吧! 一年以后,富和尚還在為租賃船只籌錢,窮和尚卻已經(jīng)從南海朝圣回來(lái)了。 這個(gè)故事可解讀為:任何事情,一旦考慮好了,就要馬上上路,不要等到準(zhǔn)備周全之后,再去干事情。 假如事情準(zhǔn)備考慮周全了再上路的話,別人恐怕捷足先登了。 軟件開(kāi)發(fā)是一門工程學(xué)科,注重的就是實(shí)踐,君子動(dòng)口不動(dòng)手對(duì)軟件開(kāi)發(fā)人員來(lái)講根本就是錯(cuò)誤的,他們提倡動(dòng)手至上,但別害怕,他們大多溫文爾雅,沒(méi)有暴力傾向,雖然有時(shí)候蓬頭垢面的一副比爾蓋茨樣。 有前輩高人認(rèn)為,學(xué)習(xí)編程的秘訣是:編程、編程、再編程,筆者深表贊同。 不僅要多實(shí)踐,而且要快實(shí)踐。 我們?cè)诳磿臅r(shí)候,不要等到你完全理解了才動(dòng)手敲代碼,而是應(yīng)該在看書的同時(shí)敲代碼,程序運(yùn)行的各種情況可以讓你更快更牢固的掌握知識(shí)點(diǎn)。 1.5 多參考程序代碼 程序代碼是軟件開(kāi)發(fā)最重要的成果之一,其中滲透了程序員的思想與靈魂。 許多人被《仙劍奇?zhèn)b傳》中凄美的愛(ài)情故事感動(dòng),悲劇的結(jié)局更有一種缺憾美。 為什么要以悲劇結(jié)尾?據(jù)說(shuō)是因?yàn)閷憽断蓜ζ鎮(zhèn)b傳》的程序員失戀而安排了這樣的結(jié)局,他把自己的感覺(jué)融入到游戲中,卻讓眾多的仙劍迷扼腕嘆息。 多多參考代碼例子,對(duì)Java而言有參考文獻(xiàn)[4.3],有API類的源代碼(JDK安裝目錄下的文件),也可以研究一些開(kāi)源的軟件或框架。 1.6 加強(qiáng)英文閱讀能力 對(duì)學(xué)習(xí)編程來(lái)說(shuō),不要求英語(yǔ), 但不能一點(diǎn)不會(huì),。 最起碼像Java API文檔(參考文獻(xiàn)[4.4])這些東西還是要能看懂的,連猜帶懵都可以;旁邊再開(kāi)啟一個(gè)金山詞霸。 看多了就會(huì)越來(lái)越熟練。 在學(xué)Java的同時(shí)學(xué)習(xí)英文,一箭雙雕多好。 另外好多軟件需要到英文網(wǎng)站下載,你要能夠找到它們,這些是最基本的要求。 英語(yǔ)好對(duì)你學(xué)習(xí)有很大的幫助。 口語(yǔ)好的話更有機(jī)會(huì)進(jìn)入管理層,進(jìn)而可以成為剝削程序員的周扒皮。 1.7 萬(wàn)不得已才請(qǐng)教別人 筆者在ChinaITLab網(wǎng)校的在線輔導(dǎo)系統(tǒng)中解決學(xué)生問(wèn)題時(shí)發(fā)現(xiàn),大部分的問(wèn)題學(xué)生稍做思考就可以解決。 請(qǐng)教別人之前,你應(yīng)該先回答如下幾個(gè)問(wèn)題。 你是否在google中搜索了問(wèn)題的解決辦法? 你是否查看了Java API文檔? 你是否查找過(guò)相關(guān)書籍? 你是否寫代碼測(cè)試過(guò)? 如果回答都是是的話,而且還沒(méi)有找到解決辦法,再問(wèn)別人不遲。 要知道獨(dú)立思考的能力對(duì)你很重要。 要知道程序員的時(shí)間是很寶貴的。 1.8 多讀好書 書中自有顏如玉。 比爾?蓋茨是一個(gè)飽讀群書的人。 雖然沒(méi)有讀完大學(xué),但九歲的時(shí)候比爾?蓋茨就已經(jīng)讀完了所有的百科全書,所以他精通天文、歷史、地理等等各類學(xué)科,可以說(shuō)比爾?蓋茨不僅是當(dāng)今世界上金錢的首富,而且也可以稱得上是知識(shí)的巨富。 筆者在給學(xué)生上課的時(shí)候經(jīng)常會(huì)給他們推薦書籍,到后來(lái)學(xué)生實(shí)在忍無(wú)可忍開(kāi)始抱怨,天吶,這么多書到什么時(shí)候才能看完了,學(xué)軟件開(kāi)發(fā),感覺(jué)上了賊船。 這時(shí)候,我的回答一般是,別著急,什么時(shí)候帶你們?nèi)タ纯次业臅浚浆F(xiàn)在每月花在技術(shù)書籍上的錢400元,這在軟件開(kāi)發(fā)人員之中還只能夠算是中等的,學(xué)生當(dāng)場(chǎng)暈倒。 (注:這一部分學(xué)生是剛學(xué)軟件開(kāi)發(fā)的) 對(duì)于在Java開(kāi)發(fā)領(lǐng)域的好書在筆者另外一篇文章中會(huì)專門點(diǎn)評(píng)。 該文章可作為本文的姊妹篇。 1.9 使用合適的工具 工欲善其事必先利其器。 軟件開(kāi)發(fā)包含各種各樣的活動(dòng),需求收集分析、建立用例模型、建立分析設(shè)計(jì)模型、編程實(shí)現(xiàn)、調(diào)試程序、自動(dòng)化測(cè)試、持續(xù)集成等等,沒(méi)有工具幫忙可以說(shuō)是寸步難行。 工具可以提高開(kāi)發(fā)效率,使軟件的質(zhì)量更高BUG更少。 組合稱手的武器。 到飛花摘葉皆可傷人的境界就很高了,無(wú)招勝有招,手中無(wú)劍心中有劍這樣的境界幾乎不可企及。 在筆者另外一篇文章中會(huì)專門闡述如何選擇合適的工具(該文章也可作為本文的姊妹篇)。 2.軟件開(kāi)發(fā)學(xué)習(xí)路線 兩千多年的儒家思想孔孟之道,中庸的思想透入骨髓,既不冒進(jìn)也不保守并非中庸之道,而是找尋學(xué)習(xí)軟件開(kāi)發(fā)的正確路線與規(guī)律。 從軟件開(kāi)發(fā)人員的生涯規(guī)劃來(lái)講,我們可以大致分為三個(gè)階段,軟件工程師→軟件設(shè)計(jì)師→架構(gòu)設(shè)計(jì)師或項(xiàng)目管理師。 不想當(dāng)元帥的士兵不是好士兵,不想當(dāng)架構(gòu)設(shè)計(jì)師或項(xiàng)目管理師的程序員也不是好的程序員。 我們應(yīng)該努力往上走。 讓我們先整理一下開(kāi)發(fā)應(yīng)用軟件需要學(xué)習(xí)的主要技術(shù)。 A.基礎(chǔ)理論知識(shí),如操作系統(tǒng)、編譯原理、數(shù)據(jù)結(jié)構(gòu)與算法、計(jì)算機(jī)原理等,它們并非不重要。 如不想成為計(jì)算機(jī)科學(xué)家的話,可以采取用到的時(shí)候再來(lái)學(xué)的原則。 B.一門編程語(yǔ)言,現(xiàn)在基本上都是面向?qū)ο蟮恼Z(yǔ)言,Java/C++/C#等等。 如果做WEB開(kāi)發(fā)的話還要學(xué)習(xí)HTML/JavaScript等等。 C.一種方法學(xué)或者說(shuō)思想,現(xiàn)在基本都是面向?qū)ο笏枷耄∣OA/OOD/設(shè)計(jì)模式)。 由此而衍生的基于組件開(kāi)發(fā)CBD/面向方面編程AOP等等。 D.一種關(guān)系型數(shù)據(jù)庫(kù),ORACLE/SQLServer/DB2/MySQL等等 E.一種提高生產(chǎn)率的IDE集成開(kāi)發(fā)環(huán)境JBuilder/Eclipse/等。 F.一種UML建模工具,用ROSE/VISIO/鋼筆進(jìn)行建模。 G.一種軟件過(guò)程,RUP/XP/CMM等等,通過(guò)軟件過(guò)程來(lái)組織軟件開(kāi)發(fā)的眾多活動(dòng),使開(kāi)發(fā)流程專業(yè)化規(guī)范化。 當(dāng)然還有其他的一些軟件工程知識(shí)。 H.項(xiàng)目管理、體系結(jié)構(gòu)、框架知識(shí)。 正確的路線應(yīng)該是:B→C→E→F→G→H。 還需要補(bǔ)充幾點(diǎn): 1).對(duì)于A與C要補(bǔ)充的是,我們應(yīng)該在實(shí)踐中逐步領(lǐng)悟編程理論與編程思想。 新技術(shù)雖然不斷涌現(xiàn),更新速度令人眼花燎亂霧里看花;但萬(wàn)變不離其宗,編程理論與編程思想的變化卻很慢。 掌握了編程理論與編程思想你就會(huì)有撥云見(jiàn)日之感。 面向?qū)ο蟮乃枷朐谀壳皝?lái)講是相當(dāng)關(guān)鍵的,是強(qiáng)勢(shì)技術(shù)之一,在上面需要多投入時(shí)間,給你的回報(bào)也會(huì)讓你驚喜。 2).對(duì)于數(shù)據(jù)庫(kù)來(lái)說(shuō)是獨(dú)立學(xué)習(xí)的,這個(gè)時(shí)機(jī)就由你來(lái)決定吧。 3).編程語(yǔ)言作為學(xué)習(xí)軟件開(kāi)發(fā)的主線,而其余的作為輔線。 4).軟件工程師著重于B、C、E、D;軟件設(shè)計(jì)師著重于B、C、E、D、F;架構(gòu)設(shè)計(jì)師著重于C、F、H。 3.如何學(xué)習(xí)Java? 3.1 Java學(xué)習(xí)路線 3.1.1 基礎(chǔ)語(yǔ)法及Java原理 基礎(chǔ)語(yǔ)法和Java原理是地基,地基不牢靠,猶如沙地上建摩天大廈,是相當(dāng)危險(xiǎn)的。 學(xué)習(xí)Java也是如此,必須要有扎實(shí)的基礎(chǔ),你才能在J2EE、J2ME領(lǐng)域游刃有余。 參加SCJP(SUN公司認(rèn)證的Java程序員)考試不失為一個(gè)好方法,原因之一是為了對(duì)得起你交的1200大洋考試費(fèi),你會(huì)更努力學(xué)習(xí),原因之二是SCJP考試能夠讓你把基礎(chǔ)打得很牢靠,它要求你跟JDK一樣熟悉Java基礎(chǔ)知識(shí);但是你千萬(wàn)不要認(rèn)為考過(guò)了SCJP就有多了不起,就能夠獲得軟件公司的青睞,就能夠獲取高薪,這樣的想法也是很危險(xiǎn)的。 獲得真正的SCJP只能證明你的基礎(chǔ)還過(guò)得去,但離實(shí)際開(kāi)發(fā)還有很長(zhǎng)的一段路要走。 3.1.2 OO思想的領(lǐng)悟 掌握了基礎(chǔ)語(yǔ)法和Java程序運(yùn)行原理后,我們就可以用Java語(yǔ)言實(shí)現(xiàn)面向?qū)ο蟮乃枷肓恕? 面向?qū)ο螅且环N方法學(xué);是獨(dú)立于語(yǔ)言之外的編程思想;是CBD基于組件開(kāi)發(fā)的基礎(chǔ);屬于強(qiáng)勢(shì)技術(shù)之一。 當(dāng)以后因工作需要轉(zhuǎn)到別的面向?qū)ο笳Z(yǔ)言的時(shí)候,你會(huì)感到特別的熟悉親切,學(xué)起來(lái)像喝涼水這么簡(jiǎn)單。 使用面向?qū)ο蟮乃枷脒M(jìn)行開(kāi)發(fā)的基本過(guò)程是: ●調(diào)查收集需求。 ●建立用例模型。 ●從用例模型中識(shí)別分析類及類與類之間的靜態(tài)動(dòng)態(tài)關(guān)系,從而建立分析模型。 ●細(xì)化分析模型到設(shè)計(jì)模型。 ●用具體的技術(shù)去實(shí)現(xiàn)。 ●測(cè)試、部署、總結(jié)。 3.1.3 基本API的學(xué)習(xí) 進(jìn)行軟件開(kāi)發(fā)的時(shí)候,并不是什么功能都需要我們?nèi)?shí)現(xiàn),也就是經(jīng)典名言所說(shuō)的不需要重新發(fā)明輪子。 我們可以利用現(xiàn)成的類、組件、框架來(lái)搭建我們的應(yīng)用,如SUN公司編寫好了眾多類實(shí)現(xiàn)一些底層功能,以及我們下載過(guò)來(lái)的JAR文件中包含的類,我們可以調(diào)用類中的方法來(lái)完成某些功能或繼承它。 那么這些類中究竟提供了哪些方法給我們使用?方法的參數(shù)個(gè)數(shù)及類型是?類的構(gòu)造器需不需要參數(shù)?總不可能SUN公司的工程師打國(guó)際長(zhǎng)途甚至飄洋過(guò)海來(lái)告訴你他編寫的類該如何使用吧。 他們只能提供文檔給我們查看,Java DOC文檔(參考文獻(xiàn)4.4)就是這樣的文檔,它可以說(shuō)是程序員與程序員交流的文檔。 基本API指的是實(shí)現(xiàn)了一些底層功能的類,通用性較強(qiáng)的API,如字符串處理/輸入輸出等等。 我們又把它成為類庫(kù)。 熟悉API的方法一是多查Java DOC文檔(參考文獻(xiàn)4.4),二是使用JBuilder/Eclipse等IDE的代碼提示功能。 3.1.4 特定API的學(xué)習(xí) Java介入的領(lǐng)域很廣泛,不同的領(lǐng)域有不同的API,沒(méi)有人熟悉所有的API,對(duì)一般人而言只是熟悉工作中要用到的API。 如果你做界面開(kāi)發(fā),那么你需要學(xué)習(xí)Swing/AWT/SWT等API;如果你進(jìn)行網(wǎng)絡(luò)游戲開(kāi)發(fā),你需要深入了解網(wǎng)絡(luò)API/多媒體API/2D3D等;如果你做WEB開(kāi)發(fā),就需要熟 悉Servlet等API啦。 總之,需要根據(jù)工作的需要或你的興趣發(fā)展方向去選擇學(xué)習(xí)特定的API。 3.1.5 開(kāi)發(fā)工具的用法 在學(xué)習(xí)基礎(chǔ)語(yǔ)法與基本的面向?qū)ο蟾拍顣r(shí),從鍛煉語(yǔ)言熟練程度的角度考慮,我們推薦使用的工具是Editplus/JCreator+JDK,這時(shí)候不要急于上手JBuilder/Eclipse等集成開(kāi)發(fā)環(huán)境,以免過(guò)于關(guān)注IDE的強(qiáng)大功能而分散對(duì)Java技術(shù)本身的注意力。 過(guò)了這一階段你就可以開(kāi)始熟悉IDE了。 程序員日常工作包括很多活動(dòng),編輯、編譯及構(gòu)建、調(diào)試、單元測(cè)試、版本控制、維持模型與代碼同步、文檔的更新等等,幾乎每一項(xiàng)活動(dòng)都有專門的工具,如果獨(dú)立使用這些工具的話,你將會(huì)很痛苦,你需要在堆滿工具的任務(wù)欄上不斷的切換,效率很低下,也很容易出錯(cuò)。 在JBuilder、Eclipse等IDE中已經(jīng)自動(dòng)集成編輯器、編譯器、調(diào)試器、單元測(cè)試工具JUnit、自動(dòng)構(gòu)建工具ANT、版本控制工具CVS、DOC文檔生成與更新等等,甚至可以把UML建模工具也集成進(jìn)去,又提供了豐富的向?qū)椭煽蚣艽a,讓我們的開(kāi)發(fā)變得更輕松。 應(yīng)該說(shuō)IDE發(fā)展的趨勢(shì)就是集成軟件開(kāi)發(fā)中要用到的幾乎所有工具。 從開(kāi)發(fā)效率的角度考慮,使用IDE是必經(jīng)之路,也是從一個(gè)學(xué)生到一個(gè)職業(yè)程序員轉(zhuǎn)變的里程碑。 Java開(kāi)發(fā)使用的IDE主要有Eclipse、JBuilder、JDeveloper、NetBeans等幾種;而Eclipse、JBuilder占有的市場(chǎng)份額是最大的。 JBuilder在近幾年來(lái)一直是Java集成開(kāi)發(fā)環(huán)境中的霸主,它是由備受程序員尊敬的Borland公司開(kāi)發(fā),在硝煙彌漫的Java IDE大戰(zhàn)中,以其快速的版本更新?lián)魯BM的Visual Age for Java等而成就一番偉業(yè)。 IBM在Visual Age for Java上已經(jīng)無(wú)利可圖之下,干脆將之貢獻(xiàn)給開(kāi)源社區(qū),成為Eclipse的前身,真所謂柳暗花明又一村。 浴火重生的Eclipse以其開(kāi)放式的插件擴(kuò)展機(jī)制、免費(fèi)開(kāi)源獲得廣大程序員(包括幾乎所有的骨灰級(jí)程序員)的青睞,極具發(fā)展?jié)摿Α? 3.1.6 學(xué)習(xí)軟件工程 對(duì)小型項(xiàng)目而言,你可能認(rèn)為軟件工程沒(méi)太大的必要。 隨著項(xiàng)目的復(fù)雜性越來(lái)越高,軟件工程的必要性才會(huì)體現(xiàn)出來(lái)。 參見(jiàn)軟件開(kāi)發(fā)學(xué)習(xí)路線小節(jié)。 3.2學(xué)習(xí)要點(diǎn) 確立的學(xué)習(xí)路線之后,我們還需要總結(jié)一下Java的學(xué)習(xí)要點(diǎn),這些要點(diǎn)在前文多多少少提到過(guò),只是筆者覺(jué)得這些地方特別要注意才對(duì)它們進(jìn)行匯總,不要嫌我婆婆媽媽啊。 3.2.1勤查API文檔 當(dāng)程序員編寫好某些類,覺(jué)得很有成就感,想把它貢獻(xiàn)給各位苦難的同行。 這時(shí)候你要使用Javadoc工具(包含在JDK中)生成標(biāo)準(zhǔn)的Java DOC文檔,供同行使用。 J2SE/J2EE/J2ME的DOC文檔是程序員與程序員交流的工具,幾乎人手一份,除了菜鳥之外。 J2SE DOC文檔官方下載地址:,你可以到google搜索CHM版本下載。 也可以在線查看:。 對(duì)待DOC文檔要像毛主席語(yǔ)錄,早上起床念一遍,吃飯睡覺(jué)前念一遍。 當(dāng)需要某項(xiàng)功能的時(shí)候,你應(yīng)該先查相應(yīng)的DOC文檔看看有沒(méi)有現(xiàn)成的實(shí)現(xiàn),有的話就不必勞神費(fèi)心了直接用就可以了,找不到的時(shí)候才考慮自己實(shí)現(xiàn)。 使用步驟一般如下: ●找特定的包,包一般根據(jù)功能組織。 ●找需要使用類,類命名規(guī)范的話我們由類的名字可猜出一二。 ●選擇構(gòu)造器,大多數(shù)使用類的方式是創(chuàng)建對(duì)象。 ●選擇你需要的方法。 3.2.2 查書/google->寫代碼測(cè)試->查看源代碼->請(qǐng)教別人 當(dāng)我們遇到問(wèn)題的時(shí)候該如何解決? 這時(shí)候不要急著問(wèn)別人,太簡(jiǎn)單的問(wèn)題,沒(méi)經(jīng)過(guò)思考的問(wèn)題,別人會(huì)因此而瞧不起你。 可以先找找書,到google中搜一下看看,絕大部分問(wèn)題基本就解決了。 而像某些類/方法如何使用的問(wèn)題,DOC文檔就是答案。 對(duì)某些知識(shí)點(diǎn)有疑惑是,寫代碼測(cè)試一下,會(huì)給你留下深刻的印象。 而有的問(wèn)題,你可能需要直接看API的源代碼驗(yàn)證你的想法。 萬(wàn)不得已才去請(qǐng)教別人。 3.2.3學(xué)習(xí)開(kāi)源軟件的設(shè)計(jì)思想 Java領(lǐng)域有許多源代碼開(kāi)放的工具、組件、框架,JUnit、ANT、Tomcat、Struts、Spring、Jive論壇、PetStore寵物店等等多如牛毛。 這些可是前輩給我們留下的瑰寶呀。 入寶山而空手歸,你心甘嗎?對(duì)這些工具、框架進(jìn)行分析,領(lǐng)會(huì)其中的設(shè)計(jì)思想,有朝一日說(shuō)不定你也能寫一個(gè)XXX框架什么的,風(fēng)光一把。 分析開(kāi)源軟件其實(shí)是你提高技術(shù)、提高實(shí)戰(zhàn)能力的便捷方法。 3.2.4 規(guī)范的重要性 沒(méi)有規(guī)矩,不成方圓。 這里的規(guī)范有兩層含義。 第一層含義是技術(shù)規(guī)范,多到下載JSRXXX規(guī)范,多讀規(guī)范,這是最權(quán)威準(zhǔn)確最新的教材。 第二層含義是編程規(guī)范,如果你使用了大量的獨(dú)特算法,富有個(gè)性的變量及方法的命名方式;同時(shí),沒(méi)給程序作注釋,以顯示你的編程功底是多么的深厚。 這樣的代碼別人看起來(lái)像天書,要理解談何容易,更不用說(shuō)維護(hù)了,必然會(huì)被無(wú)情地掃入垃圾堆。 Java編碼規(guī)范到此查看或下載,中文的也有,啊,還要問(wèn)我在哪,請(qǐng)參考3.2.2節(jié)。 3.2.5 不局限于Java 很不幸,很幸運(yùn),要學(xué)習(xí)的東西還有很多。 不幸的是因?yàn)橐獙W(xué)的東西太多且多變,沒(méi)時(shí)間陪老婆家人或女朋友,導(dǎo)致身心疲憊,嚴(yán)重者甚至導(dǎo)致抑郁癥。 幸運(yùn)的是別人要搶你飯碗絕非易事,他們或她們需要付出很多才能達(dá)成心愿。 Java不要孤立地去學(xué)習(xí),需要綜合學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)、OOP、軟件工程、UML、網(wǎng)絡(luò)編程、數(shù)據(jù)庫(kù)技術(shù)等知識(shí),用橫向縱向的比較聯(lián)想的方式去學(xué)習(xí)會(huì)更有效。 如學(xué)習(xí)Java集合的時(shí)候找數(shù)據(jù)結(jié)構(gòu)的書看看;學(xué)JDBC的時(shí)候復(fù)習(xí)數(shù)據(jù)庫(kù)技術(shù);采取的依然是需要的時(shí)候再學(xué)的原則。 4.結(jié)束語(yǔ) 需要強(qiáng)調(diào)的是,學(xué)習(xí)軟件開(kāi)發(fā)確實(shí)有一定的難度,也很辛苦,需要付出很多努力,但千萬(wàn)不要半途而廢。 本文如果能對(duì)一直徘徊在Java神殿之外的朋友有所幫助的話,筆者也欣慰了。 哈哈,怎么聽(tīng)起來(lái)老氣橫秋呀?沒(méi)辦法,在電腦的長(zhǎng)期輻射之下,都快變成小老頭了。 最后奉勸各位程序員尤其是MM程序員,完成工作后趕快遠(yuǎn)離電腦,據(jù)《胡播亂報(bào)》報(bào)道,電腦輻射會(huì)在白皙的皮膚上面點(diǎn)綴一些小黑點(diǎn),看起來(lái)鮮艷無(wú)比…… (轉(zhuǎn)載文章請(qǐng)保留出處:Java家())
Java學(xué)習(xí)之路:不走彎路,就是捷徑 (1) 作者: ∣來(lái)源:中國(guó)Java技術(shù)網(wǎng)∣原文地址∣2006-3-14 0.引言 在ChinaITLAB導(dǎo)師制輔導(dǎo)中,筆者發(fā)現(xiàn)問(wèn)得最多的問(wèn)題莫過(guò)于如何學(xué)習(xí)編程?Java該如何學(xué)習(xí)?。 類似的問(wèn)題回答多了,難免會(huì)感覺(jué)厭煩,就萌生了寫下本文的想法。 到時(shí)候再有人問(wèn)起類似的問(wèn)題,我可以告訴他(她),請(qǐng)你去看看《Java學(xué)習(xí)之路》。 拜讀過(guò)臺(tái)灣蔡學(xué)鏞先生的《Java夜未眠》,有些文章如《Java學(xué)習(xí)之道》等讓我們確實(shí)有共鳴,本文題目也由此而來(lái)。 軟件開(kāi)發(fā)之路是充滿荊棘與挑戰(zhàn)之路,也是充滿希望之路。 Java學(xué)習(xí)也是如此,沒(méi)有捷徑可走。 夢(mèng)想像《天龍八部》中虛竹一樣被無(wú)崖子醍醐灌頂而輕松獲得一甲子功力,是很不現(xiàn)實(shí)的。 每天仰天大叫天神啊,請(qǐng)賜給我一本葵花寶典吧,殊不知即使你獲得了葵花寶典,除了受自宮其身之苦外,你也不一定成得了東方不敗,倒是成西方失敗的幾率高一點(diǎn)。 不走彎路,就是捷徑,佛經(jīng)說(shuō)的不無(wú)道理。 1.如何學(xué)習(xí)程序設(shè)計(jì)? Java是一種平臺(tái),也是一種程序設(shè)計(jì)語(yǔ)言,如何學(xué)好程序設(shè)計(jì)不僅僅適用于Java,對(duì)C++等其他程序設(shè)計(jì)語(yǔ)言也一樣管用。 有編程高手認(rèn)為,Java也好C也好沒(méi)什么分別,拿來(lái)就用。 為什么他們能達(dá)到如此境界?我想是因?yàn)榫幊陶Z(yǔ)言之間有共通之處,領(lǐng)會(huì)了編程的精髓,自然能夠做到一通百通。 如何學(xué)習(xí)程序設(shè)計(jì)理所當(dāng)然也有許多共通的地方。 1.1 培養(yǎng)興趣 興趣是能夠讓你堅(jiān)持下去的動(dòng)力。 如果只是把寫程序作為謀生的手段的話,你會(huì)活的很累,也太對(duì)不起自己了。 多關(guān)心一些行業(yè)趣事,多想想蓋茨。 不是提倡天天做白日夢(mèng),但人要是沒(méi)有了夢(mèng)想,你覺(jué)得有味道嗎?可能像許多深圳本地農(nóng)民一樣,打打麻將,喝喝功夫茶,拜拜財(cái)神爺;每個(gè)月就有幾萬(wàn)十幾萬(wàn)甚至更多的進(jìn)帳,憑空多出個(gè)食利階層。 你認(rèn)為,這樣有味道嗎?有空多到一些程序員論壇轉(zhuǎn)轉(zhuǎn),你會(huì)發(fā)現(xiàn),他們其實(shí)很樂(lè)觀幽默,時(shí)不時(shí)會(huì)冒出智慧的火花。 1.2 慎選程序設(shè)計(jì)語(yǔ)言 男怕入錯(cuò)行,女怕嫁錯(cuò)郎。 初學(xué)者選擇程序設(shè)計(jì)語(yǔ)言需要謹(jǐn)慎對(duì)待。 軟件開(kāi)發(fā)不僅僅是掌握一門編程語(yǔ)言了事,它還需要其他很多方面的背景知識(shí)。 軟件開(kāi)發(fā)也不僅僅局限于某幾個(gè)領(lǐng)域,而是已經(jīng)滲透到了各行各業(yè)幾乎每一個(gè)角落。 如果你對(duì)硬件比較感興趣,你可以學(xué)習(xí)C語(yǔ)言/匯編語(yǔ)言,進(jìn)入硬件開(kāi)發(fā)領(lǐng)域。 如果你對(duì)電信的行業(yè)知識(shí)及網(wǎng)絡(luò)比較熟悉,你可以在C/C++等之上多花時(shí)間,以期進(jìn)入電信軟件開(kāi)發(fā)領(lǐng)域。 如果你對(duì)操作系統(tǒng)比較熟悉,你可以學(xué)習(xí)C/Linux等等,為L(zhǎng)inux內(nèi)核開(kāi)發(fā)/驅(qū)動(dòng)程序開(kāi)發(fā)/嵌入式開(kāi)發(fā)打基礎(chǔ)。 如果你想介入到應(yīng)用范圍最廣泛的應(yīng)用軟件開(kāi)發(fā)(包括電子商務(wù)電子政務(wù)系統(tǒng))的話,你可以選擇J2EE或,甚至LAMP組合。 每個(gè)領(lǐng)域要求的背景知識(shí)不一樣。 做應(yīng)用軟件需要對(duì)數(shù)據(jù)庫(kù)等很熟悉。 總之,你需要根據(jù)自己的特點(diǎn)來(lái)選擇合適你的編程語(yǔ)言。 1.3 要腳踏實(shí)地,快餐式的學(xué)習(xí)不可取 先分享一個(gè)故事。 有一個(gè)小朋友,他很喜歡研究生物學(xué),很想知道那些蝴蝶如何從蛹?xì)だ锍鰜?lái),變成蝴蝶便會(huì)飛。 有一次,他走到草原上面看見(jiàn)一個(gè)蛹,便取了回家,然后看著,過(guò)了幾天以后,這個(gè)蛹出了一條裂痕,看見(jiàn)里面的蝴蝶開(kāi)始掙扎,想抓破蛹?xì)わw出來(lái)。 這個(gè)過(guò)程達(dá)數(shù)小時(shí)之久,蝴蝶在蛹里面很辛苦地拼命掙扎,怎么也沒(méi)法子走出來(lái)。 這個(gè)小孩看著看著不忍心,就想不如讓我?guī)蛶退桑汶S手拿起剪刀在蛹上剪開(kāi),使蝴蝶破蛹而出。 但蝴蝶出來(lái)以后,因?yàn)槌岚虿粔蛄Γ兊煤苡纺[,飛不起來(lái)。 這個(gè)故事給我們的啟示是:欲速則不達(dá)。 浮躁是現(xiàn)代人最普遍的心態(tài),能怪誰(shuí)?也許是貧窮落后了這么多年的緣故,就像當(dāng)年的大躍進(jìn)一樣,都想大步跨入共產(chǎn)主義社會(huì)。 現(xiàn)在的軟件公司、客戶、政府、學(xué)校、培訓(xùn)機(jī)構(gòu)等等到處彌漫著浮躁之氣。 就拿筆者比較熟悉的深圳IT培訓(xùn)行業(yè)來(lái)說(shuō)吧,居然有的打廣告宣稱參加培訓(xùn),100%就業(yè),居然報(bào)名的學(xué)生不少,簡(jiǎn)直是藐視天下程序員。 社會(huì)環(huán)境如是,我們不能改變,只能改變自己,鬧市中的安寧,彌足珍貴。 許多初學(xué)者C++/Java沒(méi)開(kāi)始學(xué),立馬使用VC/JBuilder,會(huì)使用VC/JBuilder開(kāi)發(fā)一個(gè)Hello World程序,就忙不迭的向世界宣告,我會(huì)軟件開(kāi)發(fā)了,簡(jiǎn)歷上也大言不慚地寫上精通VC/Java。 結(jié)果到軟件公司面試時(shí)要么被三兩下打發(fā)走了,要么被駁的體無(wú)完膚,無(wú)地自容。 到處碰壁之后才知道捧起《C++編程思想》《Java編程思想》仔細(xì)鉆研,早知如此何必當(dāng)初呀。 你現(xiàn)在講究簡(jiǎn)單方便,你以后的路就長(zhǎng)了,好象也是佛經(jīng)中的勸戒。 1.4 多實(shí)踐,快實(shí)踐 彭端淑的《為學(xué)一首示子侄》中有窮和尚與富和尚的故事。 從前,四川邊境有兩個(gè)和尚,一個(gè)貧窮,一個(gè)有錢。 一天,窮和尚對(duì)富和尚說(shuō):我打算去南海朝圣,你看怎么樣?富和尚說(shuō):這里離南海有幾千里遠(yuǎn),你靠什么去呢?窮和尚說(shuō):我只要一個(gè)水缽,一個(gè)飯碗就夠了。 富和尚為難地說(shuō):幾年前我就打算買條船去南海,可至今沒(méi)去成,你還是別去吧! 一年以后,富和尚還在為租賃船只籌錢,窮和尚卻已經(jīng)從南海朝圣回來(lái)了。 這個(gè)故事可解讀為:任何事情,一旦考慮好了,就要馬上上路,不要等到準(zhǔn)備周全之后,再去干事情。 假如事情準(zhǔn)備考慮周全了再上路的話,別人恐怕捷足先登了。 軟件開(kāi)發(fā)是一門工程學(xué)科,注重的就是實(shí)踐,君子動(dòng)口不動(dòng)手對(duì)軟件開(kāi)發(fā)人員來(lái)講根本就是錯(cuò)誤的,他們提倡動(dòng)手至上,但別害怕,他們大多溫文爾雅,沒(méi)有暴力傾向,雖然有時(shí)候蓬頭垢面的一副比爾蓋茨樣。 有前輩高人認(rèn)為,學(xué)習(xí)編程的秘訣是:編程、編程、再編程,筆者深表贊同。 不僅要多實(shí)踐,而且要快實(shí)踐。 我們?cè)诳磿臅r(shí)候,不要等到你完全理解了才動(dòng)手敲代碼,而是應(yīng)該在看書的同時(shí)敲代碼,程序運(yùn)行的各種情況可以讓你更快更牢固的掌握知識(shí)點(diǎn)。 1.5 多參考程序代碼 程序代碼是軟件開(kāi)發(fā)最重要的成果之一,其中滲透了程序員的思想與靈魂。 許多人被《仙劍奇?zhèn)b傳》中凄美的愛(ài)情故事感動(dòng),悲劇的結(jié)局更有一種缺憾美。 為什么要以悲劇結(jié)尾?據(jù)說(shuō)是因?yàn)閷憽断蓜ζ鎮(zhèn)b傳》的程序員失戀而安排了這樣的結(jié)局,他把自己的感覺(jué)融入到游戲中,卻讓眾多的仙劍迷扼腕嘆息。 多多參考代碼例子,對(duì)Java而言有參考文獻(xiàn)[4.3],有API類的源代碼(JDK安裝目錄下的文件),也可以研究一些開(kāi)源的軟件或框架。 1.6 加強(qiáng)英文閱讀能力 對(duì)學(xué)習(xí)編程來(lái)說(shuō),不要求英語(yǔ), 但不能一點(diǎn)不會(huì),。 最起碼像Java API文檔(參考文獻(xiàn)[4.4])這些東西還是要能看懂的,連猜帶懵都可以;旁邊再開(kāi)啟一個(gè)金山詞霸。 看多了就會(huì)越來(lái)越熟練。 在學(xué)Java的同時(shí)學(xué)習(xí)英文,一箭雙雕多好。 另外好多軟件需要到英文網(wǎng)站下載,你要能夠找到它們,這些是最基本的要求。 英語(yǔ)好對(duì)你學(xué)習(xí)有很大的幫助。 口語(yǔ)好的話更有機(jī)會(huì)進(jìn)入管理層,進(jìn)而可以成為剝削程序員的周扒皮。 1.7 萬(wàn)不得已才請(qǐng)教別人 筆者在ChinaITLab網(wǎng)校的在線輔導(dǎo)系統(tǒng)中解決學(xué)生問(wèn)題時(shí)發(fā)現(xiàn),大部分的問(wèn)題學(xué)生稍做思考就可以解決。 請(qǐng)教別人之前,你應(yīng)該先回答如下幾個(gè)問(wèn)題。 你是否在google中搜索了問(wèn)題的解決辦法? 你是否查看了Java API文檔? 你是否查找過(guò)相關(guān)書籍? 你是否寫代碼測(cè)試過(guò)? 如果回答都是是的話,而且還沒(méi)有找到解決辦法,再問(wèn)別人不遲。 要知道獨(dú)立思考的能力對(duì)你很重要。 要知道程序員的時(shí)間是很寶貴的。 1.8 多讀好書 書中自有顏如玉。 比爾?蓋茨是一個(gè)飽讀群書的人。 雖然沒(méi)有讀完大學(xué),但九歲的時(shí)候比爾?蓋茨就已經(jīng)讀完了所有的百科全書,所以他精通天文、歷史、地理等等各類學(xué)科,可以說(shuō)比爾?蓋茨不僅是當(dāng)今世界上金錢的首富,而且也可以稱得上是知識(shí)的巨富。 筆者在給學(xué)生上課的時(shí)候經(jīng)常會(huì)給他們推薦書籍,到后來(lái)學(xué)生實(shí)在忍無(wú)可忍開(kāi)始抱怨,天吶,這么多書到什么時(shí)候才能看完了,學(xué)軟件開(kāi)發(fā),感覺(jué)上了賊船。 這時(shí)候,我的回答一般是,別著急,什么時(shí)候帶你們?nèi)タ纯次业臅浚浆F(xiàn)在每月花在技術(shù)書籍上的錢400元,這在軟件開(kāi)發(fā)人員之中還只能夠算是中等的,學(xué)生當(dāng)場(chǎng)暈倒。 (注:這一部分學(xué)生是剛學(xué)軟件開(kāi)發(fā)的) 對(duì)于在Java開(kāi)發(fā)領(lǐng)域的好書在筆者另外一篇文章中會(huì)專門點(diǎn)評(píng)。 該文章可作為本文的姊妹篇。 1.9 使用合適的工具 工欲善其事必先利其器。 軟件開(kāi)發(fā)包含各種各樣的活動(dòng),需求收集分析、建立用例模型、建立分析設(shè)計(jì)模型、編程實(shí)現(xiàn)、調(diào)試程序、自動(dòng)化測(cè)試、持續(xù)集成等等,沒(méi)有工具幫忙可以說(shuō)是寸步難行。 工具可以提高開(kāi)發(fā)效率,使軟件的質(zhì)量更高BUG更少。 組合稱手的武器。 到飛花摘葉皆可傷人的境界就很高了,無(wú)招勝有招,手中無(wú)劍心中有劍這樣的境界幾乎不可企及。 在筆者另外一篇文章中會(huì)專門闡述如何選擇合適的工具(該文章也可作為本文的姊妹篇)。 2.軟件開(kāi)發(fā)學(xué)習(xí)路線 兩千多年的儒家思想孔孟之道,中庸的思想透入骨髓,既不冒進(jìn)也不保守并非中庸之道,而是找尋學(xué)習(xí)軟件開(kāi)發(fā)的正確路線與規(guī)律。 從軟件開(kāi)發(fā)人員的生涯規(guī)劃來(lái)講,我們可以大致分為三個(gè)階段,軟件工程師→軟件設(shè)計(jì)師→架構(gòu)設(shè)計(jì)師或項(xiàng)目管理師。 不想當(dāng)元帥的士兵不是好士兵,不想當(dāng)架構(gòu)設(shè)計(jì)師或項(xiàng)目管理師的程序員也不是好的程序員。 我們應(yīng)該努力往上走。 讓我們先整理一下開(kāi)發(fā)應(yīng)用軟件需要學(xué)習(xí)的主要技術(shù)。 A.基礎(chǔ)理論知識(shí),如操作系統(tǒng)、編譯原理、數(shù)據(jù)結(jié)構(gòu)與算法、計(jì)算機(jī)原理等,它們并非不重要。 如不想成為計(jì)算機(jī)科學(xué)家的話,可以采取用到的時(shí)候再來(lái)學(xué)的原則。 B.一門編程語(yǔ)言,現(xiàn)在基本上都是面向?qū)ο蟮恼Z(yǔ)言,Java/C++/C#等等。 如果做WEB開(kāi)發(fā)的話還要學(xué)習(xí)HTML/JavaScript等等。 C.一種方法學(xué)或者說(shuō)思想,現(xiàn)在基本都是面向?qū)ο笏枷耄∣OA/OOD/設(shè)計(jì)模式)。 由此而衍生的基于組件開(kāi)發(fā)CBD/面向方面編程AOP等等。 D.一種關(guān)系型數(shù)據(jù)庫(kù),ORACLE/SqlServer/DB2/MySQL等等 E.一種提高生產(chǎn)率的IDE集成開(kāi)發(fā)環(huán)境JBuilder/Eclipse/等。 F.一種UML建模工具,用ROSE/VISIO/鋼筆進(jìn)行建模。 G.一種軟件過(guò)程,RUP/XP/CMM等等,通過(guò)軟件過(guò)程來(lái)組織軟件開(kāi)發(fā)的眾多活動(dòng),使開(kāi)發(fā)流程專業(yè)化規(guī)范化。 當(dāng)然還有其他的一些軟件工程知識(shí)。 H.項(xiàng)目管理、體系結(jié)構(gòu)、框架知識(shí)。 正確的路線應(yīng)該是:B→C→E→F→G→H。 還需要補(bǔ)充幾點(diǎn): 1).對(duì)于A與C要補(bǔ)充的是,我們應(yīng)該在實(shí)踐中逐步領(lǐng)悟編程理論與編程思想。 新技術(shù)雖然不斷涌現(xiàn),更新速度令人眼花燎亂霧里看花;但萬(wàn)變不離其宗,編程理論與編程思想的變化卻很慢。 掌握了編程理論與編程思想你就會(huì)有撥云見(jiàn)日之感。 面向?qū)ο蟮乃枷朐谀壳皝?lái)講是相當(dāng)關(guān)鍵的,是強(qiáng)勢(shì)技術(shù)之一,在上面需要多投入時(shí)間,給你的回報(bào)也會(huì)讓你驚喜。 2).對(duì)于數(shù)據(jù)庫(kù)來(lái)說(shuō)是獨(dú)立學(xué)習(xí)的,這個(gè)時(shí)機(jī)就由你來(lái)決定吧。 3).編程語(yǔ)言作為學(xué)習(xí)軟件開(kāi)發(fā)的主線,而其余的作為輔線。 4).軟件工程師著重于B、C、E、D;軟件設(shè)計(jì)師著重于B、C、E、D、F;架構(gòu)設(shè)計(jì)師著重于C、F、H。 3.如何學(xué)習(xí)Java? 3.1 Java學(xué)習(xí)路線 3.1.1 基礎(chǔ)語(yǔ)法及Java原理 基礎(chǔ)語(yǔ)法和Java原理是地基,地基不牢靠,猶如沙地上建摩天大廈,是相當(dāng)危險(xiǎn)的。 學(xué)習(xí)Java也是如此,必須要有扎實(shí)的基礎(chǔ),你才能在J2EE、J2ME領(lǐng)域游刃有余。 參加SCJP(SUN公司認(rèn)證的Java程序員)考試不失為一個(gè)好方法,原因之一是為了對(duì)得起你交的1200大洋考試費(fèi),你會(huì)更努力學(xué)習(xí),原因之二是SCJP考試能夠讓你把基礎(chǔ)打得很牢靠,它要求你跟JDK一樣熟悉Java基礎(chǔ)知識(shí);但是你千萬(wàn)不要認(rèn)為考過(guò)了SCJP就有多了不起,就能夠獲得軟件公司的青睞,就能夠獲取高薪,這樣的想法也是很危險(xiǎn)的。 獲得真正的SCJP只能證明你的基礎(chǔ)還過(guò)得去,但離實(shí)際開(kāi)發(fā)還有很長(zhǎng)的一段路要走。 3.1.2 OO思想的領(lǐng)悟 掌握了基礎(chǔ)語(yǔ)法和Java程序運(yùn)行原理后,我們就可以用Java語(yǔ)言實(shí)現(xiàn)面向?qū)ο蟮乃枷肓恕? 面向?qū)ο螅且环N方法學(xué);是獨(dú)立于語(yǔ)言之外的編程思想;是CBD基于組件開(kāi)發(fā)的基礎(chǔ);屬于強(qiáng)勢(shì)技術(shù)之一。 當(dāng)以后因工作需要轉(zhuǎn)到別的面向?qū)ο笳Z(yǔ)言的時(shí)候,你會(huì)感到特別的熟悉親切,學(xué)起來(lái)像喝涼水這么簡(jiǎn)單。 使用面向?qū)ο蟮乃枷脒M(jìn)行開(kāi)發(fā)的基本過(guò)程是: ●調(diào)查收集需求。 ●建立用例模型。 ●從用例模型中識(shí)別分析類及類與類之間的靜態(tài)動(dòng)態(tài)關(guān)系,從而建立分析模型。 ●細(xì)化分析模型到設(shè)計(jì)模型。 ●用具體的技術(shù)去實(shí)現(xiàn)。 ●測(cè)試、部署、總結(jié)。 3.1.3 基本API的學(xué)習(xí) 進(jìn)行軟件開(kāi)發(fā)的時(shí)候,并不是什么功能都需要我們?nèi)?shí)現(xiàn),也就是經(jīng)典名言所說(shuō)的不需要重新發(fā)明輪子。 我們可以利用現(xiàn)成的類、組件、框架來(lái)搭建我們的應(yīng)用,如SUN公司編寫好了眾多類實(shí)現(xiàn)一些底層功能,以及我們下載過(guò)來(lái)的JAR文件中包含的類,我們可以調(diào)用類中的方法來(lái)完成某些功能或繼承它。 那么這些類中究竟提供了哪些方法給我們使用?方法的參數(shù)個(gè)數(shù)及類型是?類的構(gòu)造器需不需要參數(shù)?總不可能SUN公司的工程師打國(guó)際長(zhǎng)途甚至飄洋過(guò)海來(lái)告訴你他編寫的類該如何使用吧。 他們只能提供文檔給我們查看,Java DOC文檔(參考文獻(xiàn)4.4)就是這樣的文檔,它可以說(shuō)是程序員與程序員交流的文檔。 基本API指的是實(shí)現(xiàn)了一些底層功能的類,通用性較強(qiáng)的API,如字符串處理/輸入輸出等等。 我們又把它成為類庫(kù)。 熟悉API的方法一是多查Java DOC文檔(參考文獻(xiàn)4.4),二是使用JBuilder/Eclipse等IDE的代碼提示功能。 3.1.4 特定API的學(xué)習(xí) Java介入的領(lǐng)域很廣泛,不同的領(lǐng)域有不同的API,沒(méi)有人熟悉所有的API,對(duì)一般人而言只是熟悉工作中要用到的API。 如果你做界面開(kāi)發(fā),那么你需要學(xué)習(xí)Swing/AWT/SWT等API;如果你進(jìn)行網(wǎng)絡(luò)游戲開(kāi)發(fā),你需要深入了解網(wǎng)絡(luò)API/多媒體API/2D3D等;如果你做WEB開(kāi)發(fā),就需要熟 悉Servlet等API啦。 總之,需要根據(jù)工作的需要或你的興趣發(fā)展方向去選擇學(xué)習(xí)特定的API。 3.1.5 開(kāi)發(fā)工具的用法 在學(xué)習(xí)基礎(chǔ)語(yǔ)法與基本的面向?qū)ο蟾拍顣r(shí),從鍛煉語(yǔ)言熟練程度的角度考慮,我們推薦使用的工具是Editplus/JCreator+JDK,這時(shí)候不要急于上手JBuilder/Eclipse等集成開(kāi)發(fā)環(huán)境,以免過(guò)于關(guān)注IDE的強(qiáng)大功能而分散對(duì)Java技術(shù)本身的注意力。 過(guò)了這一階段你就可以開(kāi)始熟悉IDE了。 程序員日常工作包括很多活動(dòng),編輯、編譯及構(gòu)建、調(diào)試、單元測(cè)試、版本控制、維持模型與代碼同步、文檔的更新等等,幾乎每一項(xiàng)活動(dòng)都有專門的工具,如果獨(dú)立使用這些工具的話,你將會(huì)很痛苦,你需要在堆滿工具的任務(wù)欄上不斷的切換,效率很低下,也很容易出錯(cuò)。 在JBuilder、Eclipse等IDE中已經(jīng)自動(dòng)集成編輯器、編譯器、調(diào)試器、單元測(cè)試工具JUnit、自動(dòng)構(gòu)建工具ANT、版本控制工具CVS、DOC文檔生成與更新等等,甚至可以把UML建模工具也集成進(jìn)去,又提供了豐富的向?qū)椭煽蚣艽a,讓我們的開(kāi)發(fā)變得更輕松。 應(yīng)該說(shuō)IDE發(fā)展的趨勢(shì)就是集成軟件開(kāi)發(fā)中要用到的幾乎所有工具。 從開(kāi)發(fā)效率的角度考慮,使用IDE是必經(jīng)之路,也是從一個(gè)學(xué)生到一個(gè)職業(yè)程序員轉(zhuǎn)變的里程碑。 Java開(kāi)發(fā)使用的IDE主要有Eclipse、JBuilder、JDeveloper、NetBeans等幾種;而Eclipse、JBuilder占有的市場(chǎng)份額是最大的。 JBuilder在近幾年來(lái)一直是Java集成開(kāi)發(fā)環(huán)境中的霸主,它是由備受程序員尊敬的Borland公司開(kāi)發(fā),在硝煙彌漫的Java IDE大戰(zhàn)中,以其快速的版本更新?lián)魯BM的Visual Age for Java等而成就一番偉業(yè)。 IBM在Visual Age for Java上已經(jīng)無(wú)利可圖之下,干脆將之貢獻(xiàn)給開(kāi)源社區(qū),成為Eclipse的前身,真所謂柳暗花明又一村。 浴火重生的Eclipse以其開(kāi)放式的插件擴(kuò)展機(jī)制、免費(fèi)開(kāi)源獲得廣大程序員(包括幾乎所有的骨灰級(jí)程序員)的青睞,極具發(fā)展?jié)摿Α? 3.1.6 學(xué)習(xí)軟件工程 對(duì)小型項(xiàng)目而言,你可能認(rèn)為軟件工程沒(méi)太大的必要。 隨著項(xiàng)目的復(fù)雜性越來(lái)越高,軟件工程的必要性才會(huì)體現(xiàn)出來(lái)。 參見(jiàn)軟件開(kāi)發(fā)學(xué)習(xí)路線小節(jié)。 3.2學(xué)習(xí)要點(diǎn) 確立的學(xué)習(xí)路線之后,我們還需要總結(jié)一下Java的學(xué)習(xí)要點(diǎn),這些要點(diǎn)在前文多多少少提到過(guò),只是筆者覺(jué)得這些地方特別要注意才對(duì)它們進(jìn)行匯總,不要嫌我婆婆媽媽啊。 3.2.1勤查API文檔 當(dāng)程序員編寫好某些類,覺(jué)得很有成就感,想把它貢獻(xiàn)給各位苦難的同行。 這時(shí)候你要使用Javadoc工具(包含在JDK中)生成標(biāo)準(zhǔn)的Java DOC文檔,供同行使用。 J2SE/J2EE/J2ME的DOC文檔是程序員與程序員交流的工具,幾乎人手一份,除了菜鳥之外。 J2SE DOC文檔官方下載地址:,你可以到google搜索CHM版本下載。 也可以在線查看:。 對(duì)待DOC文檔要像毛主席語(yǔ)錄,早上起床念一遍,吃飯睡覺(jué)前念一遍。 當(dāng)需要某項(xiàng)功能的時(shí)候,你應(yīng)該先查相應(yīng)的DOC文檔看看有沒(méi)有現(xiàn)成的實(shí)現(xiàn),有的話就不必勞神費(fèi)心了直接用就可以了,找不到的時(shí)候才考慮自己實(shí)現(xiàn)。 使用步驟一般如下: ●找特定的包,包一般根據(jù)功能組織。 ●找需要使用類,類命名規(guī)范的話我們由類的名字可猜出一二。 ●選擇構(gòu)造器,大多數(shù)使用類的方式是創(chuàng)建對(duì)象。 ●選擇你需要的方法。 3.2.2 查書/google->寫代碼測(cè)試->查看源代碼->請(qǐng)教別人 當(dāng)我們遇到問(wèn)題的時(shí)候該如何解決? 這時(shí)候不要急著問(wèn)別人,太簡(jiǎn)單的問(wèn)題,沒(méi)經(jīng)過(guò)思考的問(wèn)題,別人會(huì)因此而瞧不起你。 可以先找找書,到google中搜一下看看,絕大部分問(wèn)題基本就解決了。 而像某些類/方法如何使用的問(wèn)題,DOC文檔就是答案。 對(duì)某些知識(shí)點(diǎn)有疑惑是,寫代碼測(cè)試一下,會(huì)給你留下深刻的印象。 而有的問(wèn)題,你可能需要直接看API的源代碼驗(yàn)證你的想法。 萬(wàn)不得已才去請(qǐng)教別人。 3.2.3學(xué)習(xí)開(kāi)源軟件的設(shè)計(jì)思想 Java領(lǐng)域有許多源代碼開(kāi)放的工具、組件、框架,JUnit、ANT、Tomcat、Struts、Spring、Jive論壇、PetStore寵物店等等多如牛毛。 這些可是前輩給我們留下的瑰寶呀。 入寶山而空手歸,你心甘嗎?對(duì)這些工具、框架進(jìn)行分析,領(lǐng)會(huì)其中的設(shè)計(jì)思想,有朝一日說(shuō)不定你也能寫一個(gè)XXX框架什么的,風(fēng)光一把。 分析開(kāi)源軟件其實(shí)是你提高技術(shù)、提高實(shí)戰(zhàn)能力的便捷方法。 3.2.4 規(guī)范的重要性 沒(méi)有規(guī)矩,不成方圓。 這里的規(guī)范有兩層含義。 第一層含義是技術(shù)規(guī)范,多到下載JSRXXX規(guī)范,多讀規(guī)范,這是最權(quán)威準(zhǔn)確最新的教材。 第二層含義是編程規(guī)范,如果你使用了大量的獨(dú)特算法,富有個(gè)性的變量及方法的命名方式;同時(shí),沒(méi)給程序作注釋,以顯示你的編程功底是多么的深厚。 這樣的代碼別人看起來(lái)像天書,要理解談何容易,更不用說(shuō)維護(hù)了,必然會(huì)被無(wú)情地掃入垃圾堆。 Java編碼規(guī)范到此查看或下載,中文的也有,啊,還要問(wèn)我在哪,請(qǐng)參考3.2.2節(jié)。 3.2.5 不局限于Java 很不幸,很幸運(yùn),要學(xué)習(xí)的東西還有很多。 不幸的是因?yàn)橐獙W(xué)的東西太多且多變,沒(méi)時(shí)間陪老婆家人或女朋友,導(dǎo)致身心疲憊,嚴(yán)重者甚至導(dǎo)致抑郁癥。 幸運(yùn)的是別人要搶你飯碗絕非易事,他們或她們需要付出很多才能達(dá)成心愿。 Java不要孤立地去學(xué)習(xí),需要綜合學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)、OOP、軟件工程、UML、網(wǎng)絡(luò)編程、數(shù)據(jù)庫(kù)技術(shù)等知識(shí),用橫向縱向的比較聯(lián)想的方式去學(xué)習(xí)會(huì)更有效。 如學(xué)習(xí)Java集合的時(shí)候找數(shù)據(jù)結(jié)構(gòu)的書看看;學(xué)JDBC的時(shí)候復(fù)習(xí)數(shù)據(jù)庫(kù)技術(shù);采取的依然是需要的時(shí)候再學(xué)的原則。 4.結(jié)束語(yǔ) 需要強(qiáng)調(diào)的是,學(xué)習(xí)軟件開(kāi)發(fā)確實(shí)有一定的難度,也很辛苦,需要付出很多努力,但千萬(wàn)不要半途而廢。 本文如果能對(duì)一直徘徊在Java神殿之外的朋友有所幫助的話,筆者也欣慰了。 哈哈,怎么聽(tīng)起來(lái)老氣橫秋呀?沒(méi)辦法,在電腦的長(zhǎng)期輻射之下,都快變成小老頭了。 最后奉勸各位程序員尤其是MM程序員,完成工作后趕快遠(yuǎn)離電腦,據(jù)《胡播亂報(bào)》報(bào)道,電腦輻射會(huì)在白皙的皮膚上面點(diǎn)綴一些小黑點(diǎn),看起來(lái)鮮艷無(wú)比…… (轉(zhuǎn)載文章請(qǐng)保留出處:Java家())
內(nèi)容聲明:
1、本站收錄的內(nèi)容來(lái)源于大數(shù)據(jù)收集,版權(quán)歸原網(wǎng)站所有!
2、本站收錄的內(nèi)容若侵害到您的利益,請(qǐng)聯(lián)系我們進(jìn)行刪除處理!
3、本站不接受違法信息,如您發(fā)現(xiàn)違法內(nèi)容,請(qǐng)聯(lián)系我們進(jìn)行舉報(bào)處理!
4、本文地址:http://m.hudongshop.com/article/46e19c74f98fe7bb5114.html,復(fù)制請(qǐng)保留版權(quán)鏈接!
簡(jiǎn)介隨機(jī)數(shù)在科學(xué)計(jì)算和工程應(yīng)用中無(wú)處不在,從模擬物理現(xiàn)象到優(yōu)化算法,可靠的隨機(jī)數(shù)對(duì)于獲得準(zhǔn)確和可重復(fù)的結(jié)果至關(guān)重要,MATLAB,作為一種廣泛使用的技術(shù)計(jì)算語(yǔ)言,提供了各種函數(shù),使我們能夠生成各種分布的隨機(jī)數(shù),在文章中,我們將深入研究MATLAB的隨機(jī)數(shù)生成器,探討其優(yōu)點(diǎn)、限制和最佳實(shí)踐,以幫助您生成可靠和可信的隨機(jī)數(shù),MATLAB隨...。
互聯(lián)網(wǎng)資訊 2024-09-29 20:19:57
前言歡迎來(lái)到排版基礎(chǔ)知識(shí)的終極指南!本指南將帶你從排版新手成長(zhǎng)為一位排版大師,讓你在創(chuàng)建視覺(jué)上令人愉悅且易于閱讀的設(shè)計(jì)時(shí)能夠自信自如,排版基礎(chǔ)字體字體是指字母、數(shù)字和符號(hào)的特定樣式,選擇正確的字體對(duì)于營(yíng)造正確的基調(diào)和氛圍至關(guān)重要,以下是選擇字體的幾個(gè)關(guān)鍵因素,可讀性,字體必須清晰易讀,即使是小尺寸,調(diào)性,不同的字體會(huì)傳達(dá)不同的情緒和印...。
互聯(lián)網(wǎng)資訊 2024-09-23 17:29:06
引言人工智能,AI,算法是當(dāng)今技術(shù)領(lǐng)域最具影響力和變革性的工具之一,它們?yōu)榻鉀Q復(fù)雜問(wèn)題、自動(dòng)化任務(wù)和做出明智決策提供了強(qiáng)大的解決方案,本文旨在提供人工智能算法設(shè)計(jì)和實(shí)施的全面指南,涵蓋從基本原理到實(shí)際應(yīng)用的各個(gè)方面,人工智能算法的基礎(chǔ)1.機(jī)器學(xué)習(xí)機(jī)器學(xué)習(xí)是人工智能的一個(gè)子領(lǐng)域,允許算法從數(shù)據(jù)中學(xué)習(xí)而無(wú)需明確編程,它分為以下類型,監(jiān)督學(xué)...。
最新資訊 2024-09-15 16:05:38
焦點(diǎn)圖庫(kù)是任何網(wǎng)站或應(yīng)用程序的必備元素,它們可用于展示圖像、視頻或其他內(nèi)容,有多種JavaScript焦點(diǎn)圖庫(kù)可供選擇,每個(gè)焦點(diǎn)圖庫(kù)都有自己獨(dú)特的優(yōu)點(diǎn)和缺點(diǎn),在本文中,我們將比較一些最流行的JavaScript焦點(diǎn)圖庫(kù),我們將根據(jù)以下標(biāo)準(zhǔn)對(duì)它們進(jìn)行評(píng)估,功能易用性性能文檔支持焦點(diǎn)圖庫(kù)比較表名稱功能易用性性能文檔支持Slick響應(yīng)式自動(dòng)...。
技術(shù)教程 2024-09-15 08:12:32
按鈕,是,當(dāng)您使用`history.back,`方法返回頁(yè)面時(shí),瀏覽器前進(jìn)按鈕將變?yōu)榭捎茫驗(yàn)樗F(xiàn)在可以向前導(dǎo)航到當(dāng)前頁(yè)面,我可以使用`history.back,`方法在不同的域之間導(dǎo)航嗎,否,`history.back,`方法只能在當(dāng)前域的歷史記錄中導(dǎo)航,如果您需要在不同的域之間導(dǎo)航,您需要使用`window.location...。
本站公告 2024-09-13 18:31:02
錦囊妙計(jì)1,熟練掌握C語(yǔ)言基本語(yǔ)法和概念了解變量類型、指針、數(shù)組和結(jié)構(gòu)體等基本概念,掌握運(yùn)算符、語(yǔ)句和控制結(jié)構(gòu)的用法,練習(xí)編寫簡(jiǎn)單的C語(yǔ)言程序,錦囊妙計(jì)2,理解C語(yǔ)言指針了解指針的基本概念,包括指針變量和解引用,掌握指針運(yùn)算和數(shù)組指針,練習(xí)使用指針操作數(shù)據(jù)結(jié)構(gòu),錦囊妙計(jì)3,了解數(shù)據(jù)結(jié)構(gòu)和算法熟悉常見(jiàn)的線性數(shù)據(jù)結(jié)構(gòu),如鏈表和...。
最新資訊 2024-09-12 22:09:05
成為C語(yǔ)言編程大師提升技能,把握機(jī)遇C語(yǔ)言作為一種低級(jí)編程語(yǔ)言,在計(jì)算機(jī)科學(xué)領(lǐng)域發(fā)揮著至關(guān)重要的作用,它以其可移植性、高效性和對(duì)硬件的低級(jí)訪問(wèn)而聞名,精通C語(yǔ)言可以為你的職業(yè)生涯打開(kāi)一扇大門,讓你有機(jī)會(huì)在各個(gè)行業(yè)工作,免費(fèi)下載C語(yǔ)言PDF為了幫助你踏上成為C語(yǔ)言編程大師的旅程,我們提供了一份免費(fèi)的PDF指南,其中包含以下內(nèi)容,C語(yǔ)言...。
互聯(lián)網(wǎng)資訊 2024-09-09 10:26:28
PHP是一個(gè)強(qiáng)大的服務(wù)器端編程語(yǔ)言,廣泛用于Web開(kāi)發(fā),像任何軟件一樣,PHP也容易受到安全漏洞的影響,為了應(yīng)對(duì)這些威脅,PHP5.2.6引入了多項(xiàng)安全強(qiáng)化措施,以保護(hù)應(yīng)用程序免受攻擊,安全強(qiáng)化措施PHP5.2.6中引入的安全強(qiáng)化措施包括,register,globals禁用register,globals是一個(gè)PHP設(shè)置,允許將UR...。
技術(shù)教程 2024-09-07 14:35:44
對(duì)聯(lián)廣告是一種在社交媒體上越來(lái)越流行的廣告形式,它通過(guò)在用戶分享的內(nèi)容旁邊顯示廣告,為品牌提供了一個(gè)有效的方式來(lái)吸引受眾,對(duì)聯(lián)廣告的優(yōu)勢(shì)對(duì)聯(lián)廣告為企業(yè)提供了許多好處,包括,提高品牌知名度,對(duì)聯(lián)廣告可以幫助企業(yè)擴(kuò)大其品牌的覆蓋面,從而吸引更多潛在客戶,提升轉(zhuǎn)化率,對(duì)聯(lián)廣告可以吸引相關(guān)受眾并鼓勵(lì)他們采取行動(dòng),例如訪問(wèn)網(wǎng)站或購(gòu)買產(chǎn)品,增加參...。
技術(shù)教程 2024-09-06 19:44:09
簡(jiǎn)介在JavaScript中,bind函數(shù)是一個(gè)強(qiáng)大的工具,它允許您控制函數(shù)的執(zhí)行上下文,通過(guò)綁定一個(gè)函數(shù)到一個(gè)特定的對(duì)象,您可以顯式地設(shè)置函數(shù)中的`this`關(guān)鍵字的值,從而在調(diào)用函數(shù)時(shí)控制上下文,什么是執(zhí)行上下文執(zhí)行上下文是JavaScript引擎在執(zhí)行代碼時(shí)創(chuàng)建的環(huán)境,它包含了函數(shù)執(zhí)行所需的所有信息,包括,作用域鏈,一系列對(duì)象,...。
最新資訊 2024-09-06 16:02:27
優(yōu)勢(shì)網(wǎng)址全面詳盡的教程,提供從入門到高級(jí)的全面教程,涵蓋廣泛的主題,針對(duì)特定主題的深入文章,專注于特定主題的深入文章,提供深入的見(jiàn)解和分析,大量實(shí)踐問(wèn)題,提供大量的實(shí)踐問(wèn)題和練習(xí)題,幫助鞏固所學(xué)知識(shí),優(yōu)點(diǎn)全面詳盡的教程這些網(wǎng)站提供從入門到高級(jí)的全面教程,涵蓋從基礎(chǔ)概念到高級(jí)技術(shù)等廣泛的主題,它們按照循序漸進(jìn)的方式組織內(nèi)容,使學(xué)習(xí)者能夠...。
互聯(lián)網(wǎng)資訊 2024-09-05 15:15:58
現(xiàn)在是互聯(lián)網(wǎng)快速發(fā)展的時(shí)代,擁有一個(gè)優(yōu)秀的網(wǎng)站就相當(dāng)于做生意擁有了一個(gè)流量火爆的店面,網(wǎng)站的好壞將會(huì)直接影響到企業(yè)網(wǎng)絡(luò)營(yíng)銷的效果,雖說(shuō)現(xiàn)在的建站公司有很多,但許多都是魚龍混雜,真心能幫助企業(yè)解決網(wǎng)站制作難題的少之又少,網(wǎng)站建設(shè)非常多都是直接套用模板,沒(méi)有針對(duì)企業(yè)需求進(jìn)行定制化服務(wù),推廣效果也比較差,但奧晶科技會(huì)根據(jù)用戶的不同需求提供個(gè)...。
技術(shù)教程 2024-09-02 00:35:46