<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    夢想飛翔

    自強不息
    posts - 111, comments - 30, trackbacks - 0, articles - 0
      BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

    2007年5月19日

    大數(shù)據(jù)是用scala語言,和java有些不同又比java強大,省去了很多繁瑣的東西,scala中的的接口用trait來定義,不同于java的接口,trait中可以有抽象方法也可以有不抽象方法。scala中的方法中還可以定義方法,這在java中是從來沒有的。
    大數(shù)據(jù)未來幾年發(fā)展的重點方向,大數(shù)據(jù)戰(zhàn)略已經(jīng)在十八屆五中全會上作為重點戰(zhàn)略方向,中國在大數(shù)據(jù)方面才剛剛起步,但是在美國已經(jīng)產(chǎn)生了上千億的市場價值。舉個例子,美國通用公司是一個生產(chǎn)飛機發(fā)動機的一個公司,這家公司在飛機發(fā)動機的每一個零部件上都安裝了傳感器,這些傳感器在飛機發(fā)動機運作的同時不斷的把發(fā)動機狀態(tài)的數(shù)據(jù)傳到通用公司的云平臺上,通用公司又有很多數(shù)據(jù)分析中心專門接受這些數(shù)據(jù),根據(jù)大數(shù)據(jù)的分析可以隨時掌握每一家航空公司發(fā)動機的飛行狀況,可以告知這些航空公司發(fā)動機的哪些部件需要檢修或保養(yǎng),避免飛機事故,通過這種服務(wù)通用公司就產(chǎn)生了幾百億美元的產(chǎn)值。
    現(xiàn)在正是學(xué)習(xí)大數(shù)據(jù)的最好機遇,不花一分錢就可以成為大數(shù)據(jù)高手,實現(xiàn)年薪50萬的夢想。
    王家林的第一個中國夢:免費為全社會培養(yǎng)100萬名優(yōu)秀的大數(shù)據(jù)從業(yè)人員!
    您可以通過王家林老師的微信號18610086859發(fā)紅包捐助大數(shù)據(jù)、互聯(lián)網(wǎng)+、O2O、工業(yè)4.0、微營銷、移動互聯(lián)網(wǎng)等系列免費實戰(zhàn)課程, 目前已經(jīng)發(fā)布的王家林免費視頻全集如下:
    1,《大數(shù)據(jù)不眠夜:Spark內(nèi)核天機解密(共100講)》:http://pan.baidu.com/s/1eQsHZAq 
    2,《Hadoop深入淺出實戰(zhàn)經(jīng)典》http://pan.baidu.com/s/1mgpfRPu 
    3,《Spark純實戰(zhàn)公益大講壇》http://pan.baidu.com/s/1jGpNGwu 
    4,《Scala深入淺出實戰(zhàn)經(jīng)典》http://pan.baidu.com/s/1sjDWG25 
    5,《Docker公益大講壇》http://pan.baidu.com/s/1kTpL8UF 
    6,《Spark亞太研究院Spark公益大講堂》http://pan.baidu.com/s/1i30Ewsd 
    7,DT大數(shù)據(jù)夢工廠Spark、Scala、Hadoop的所有視頻、PPT和代碼在百度云網(wǎng)盤的鏈接:
    http://pan.baidu.com/share/home?uk=4013289088#category/type=0&qq-pf-to=pcqq.group 
    王家林免費在51CTO發(fā)布的1000集合大數(shù)據(jù)spark、hadoop、scala、docker視頻: 
    1,《Scala深入淺出實戰(zhàn)初級入門經(jīng)典視頻課程》http://edu.51cto.com/lesson/id-66538.html 
    2,《Scala深入淺出實戰(zhàn)中級進階經(jīng)典視頻課程》http://edu.51cto.com/lesson/id-67139.html 
    3,《Akka深入淺出實戰(zhàn)經(jīng)典視頻課程》http://edu.51cto.com/lesson/id-77672.html 
    4,《Spark亞太研究院決勝大數(shù)據(jù)時代公益大講堂》http://edu.51cto.com/lesson/id-30815.html 
    5,《云計算Docker虛擬化公益大講壇 》http://edu.51cto.com/lesson/id-61776.html 
    6,《Spark 大講堂(純實戰(zhàn)手動操作)》http://edu.51cto.com/lesson/id-78653.html 
    7,《Hadoop深入淺出實戰(zhàn)經(jīng)典視頻課程-集群、HDFS、Yarn、MapReduce》http://edu.51cto.com/lesson/id-77141.html 
    8,《從技術(shù)角度思考Hadoop到底是什么》http://edu.51cto.com/course/course_id-1151.html 

    “DT大數(shù)據(jù)夢工廠”團隊第一個中國夢:免費為社會培養(yǎng)100萬名優(yōu)秀的大數(shù)據(jù)從業(yè)人員。每天早上4點起持續(xù)分享大數(shù)據(jù)、互聯(lián)網(wǎng)+、O2O、工業(yè)4.0、微營銷、移動互聯(lián)網(wǎng)等領(lǐng)域的
    精華內(nèi)容,幫助您和公司在DT時代打造智慧大腦,將生產(chǎn)力提高百倍以上!
    DT大數(shù)據(jù)夢工廠微信公眾號:DT_Spark,二維碼如下,期待大家加入!

    posted @ 2015-12-22 11:23 love1563 閱讀(106) | 評論 (0)編輯 收藏

    大數(shù)據(jù)是用scala語言,和java有些不同又比java強大,省去了很多繁瑣的東西,scala中的的接口用trait來定義,不同于java的接口,trait中可以有抽象方法也可以有不抽象方法。scala中的方法中還可以定義方法,這在java中是從來沒有的。
    大數(shù)據(jù)未來幾年發(fā)展的重點方向,大數(shù)據(jù)戰(zhàn)略已經(jīng)在十八屆五中全會上作為重點戰(zhàn)略方向,中國在大數(shù)據(jù)方面才剛剛起步,但是在美國已經(jīng)產(chǎn)生了上千億的市場價值。舉個例子,美國通用公司是一個生產(chǎn)飛機發(fā)動機的一個公司,這家公司在飛機發(fā)動機的每一個零部件上都安裝了傳感器,這些傳感器在飛機發(fā)動機運作的同時不斷的把發(fā)動機狀態(tài)的數(shù)據(jù)傳到通用公司的云平臺上,通用公司又有很多數(shù)據(jù)分析中心專門接受這些數(shù)據(jù),根據(jù)大數(shù)據(jù)的分析可以隨時掌握每一家航空公司發(fā)動機的飛行狀況,可以告知這些航空公司發(fā)動機的哪些部件需要檢修或保養(yǎng),避免飛機事故,通過這種服務(wù)通用公司就產(chǎn)生了幾百億美元的產(chǎn)值。
    現(xiàn)在正是學(xué)習(xí)大數(shù)據(jù)的最好機遇,不花一分錢就可以成為大數(shù)據(jù)高手,實現(xiàn)年薪50萬的夢想。
    王家林的第一個中國夢:免費為全社會培養(yǎng)100萬名優(yōu)秀的大數(shù)據(jù)從業(yè)人員!
    您可以通過王家林老師的微信號18610086859發(fā)紅包捐助大數(shù)據(jù)、互聯(lián)網(wǎng)+、O2O、工業(yè)4.0、微營銷、移動互聯(lián)網(wǎng)等系列免費實戰(zhàn)課程, 目前已經(jīng)發(fā)布的王家林免費視頻全集如下:
    1,《大數(shù)據(jù)不眠夜:Spark內(nèi)核天機解密(共100講)》:http://pan.baidu.com/s/1eQsHZAq 
    2,《Hadoop深入淺出實戰(zhàn)經(jīng)典》http://pan.baidu.com/s/1mgpfRPu 
    3,《Spark純實戰(zhàn)公益大講壇》http://pan.baidu.com/s/1jGpNGwu 
    4,《Scala深入淺出實戰(zhàn)經(jīng)典》http://pan.baidu.com/s/1sjDWG25 
    5,《Docker公益大講壇》http://pan.baidu.com/s/1kTpL8UF 
    6,《Spark亞太研究院Spark公益大講堂》http://pan.baidu.com/s/1i30Ewsd 
    7,DT大數(shù)據(jù)夢工廠Spark、Scala、Hadoop的所有視頻、PPT和代碼在百度云網(wǎng)盤的鏈接:
    http://pan.baidu.com/share/home?uk=4013289088#category/type=0&qq-pf-to=pcqq.group 
    王家林免費在51CTO發(fā)布的1000集合大數(shù)據(jù)spark、hadoop、scala、docker視頻: 
    1,《Scala深入淺出實戰(zhàn)初級入門經(jīng)典視頻課程》http://edu.51cto.com/lesson/id-66538.html 
    2,《Scala深入淺出實戰(zhàn)中級進階經(jīng)典視頻課程》http://edu.51cto.com/lesson/id-67139.html 
    3,《Akka深入淺出實戰(zhàn)經(jīng)典視頻課程》http://edu.51cto.com/lesson/id-77672.html 
    4,《Spark亞太研究院決勝大數(shù)據(jù)時代公益大講堂》http://edu.51cto.com/lesson/id-30815.html 
    5,《云計算Docker虛擬化公益大講壇 》http://edu.51cto.com/lesson/id-61776.html 
    6,《Spark 大講堂(純實戰(zhàn)手動操作)》http://edu.51cto.com/lesson/id-78653.html 
    7,《Hadoop深入淺出實戰(zhàn)經(jīng)典視頻課程-集群、HDFS、Yarn、MapReduce》http://edu.51cto.com/lesson/id-77141.html 
    8,《從技術(shù)角度思考Hadoop到底是什么》http://edu.51cto.com/course/course_id-1151.html 

    “DT大數(shù)據(jù)夢工廠”團隊第一個中國夢:免費為社會培養(yǎng)100萬名優(yōu)秀的大數(shù)據(jù)從業(yè)人員。每天早上4點起持續(xù)分享大數(shù)據(jù)、互聯(lián)網(wǎng)+、O2O、工業(yè)4.0、微營銷、移動互聯(lián)網(wǎng)等領(lǐng)域的
    精華內(nèi)容,幫助您和公司在DT時代打造智慧大腦,將生產(chǎn)力提高百倍以上!
    DT大數(shù)據(jù)夢工廠微信公眾號:DT_Spark,二維碼如下,期待大家加入!

    posted @ 2015-12-22 11:22 love1563 閱讀(92) | 評論 (0)編輯 收藏

         摘要:   閱讀全文

    posted @ 2015-02-27 19:30 love1563 閱讀(1412) | 評論 (0)編輯 收藏

         摘要:   閱讀全文

    posted @ 2014-02-18 16:45 love1563 閱讀(4095) | 評論 (3)編輯 收藏

         摘要:   閱讀全文

    posted @ 2013-12-28 10:34 love1563 閱讀(2318) | 評論 (0)編輯 收藏

         摘要:     JessMA(原名:Portal-Basic)是一套功能完備的高性能 Full-Stack Web 應(yīng)用開發(fā)框架,內(nèi)置可擴展的 MVC Web 基礎(chǔ)架構(gòu)和 DAO 數(shù)據(jù)庫訪問組件(內(nèi)部已提供了 Hibernate、MyBatis 與 JDBC...  閱讀全文

    posted @ 2013-11-24 07:49 love1563 閱讀(3447) | 評論 (0)編輯 收藏

         摘要: ITPUB索引樹  閱讀全文

    posted @ 2013-09-30 11:42 love1563 閱讀(3352) | 評論 (0)編輯 收藏

    apache svn:http://svn.apache.org/repos/asf

    posted @ 2013-09-03 14:21 love1563 閱讀(2226) | 評論 (0)編輯 收藏

    開發(fā)軟件時,我的主要目標之一是:要么防止將缺陷引入代碼庫,要么限制缺陷的生存期;換言之,要盡早找到缺陷。很顯然,越是了解如何編寫更好的代碼以及如何有效測試軟件,就越能及早地捕捉到缺陷。我也很想要一張能發(fā)現(xiàn)潛在缺陷的安全之網(wǎng)。

    在本系列 八月份 的那期文章中,我得出了這樣的結(jié)論:將檢驗工具集成到構(gòu)建過程(例如,使用 Ant 或 Maven)中,能夠建立起一種尋找潛在缺陷的方法。盡管這種方法使一致性成為可能并超越了 IDE,但它也有一點反作用。必須在本地構(gòu)建軟件或等待 Continuous Integration 構(gòu)建的運行。如果使用 Eclipse 插件,就可以在通過 Continuous Integration 構(gòu)建或集成 發(fā)現(xiàn)一些這樣的沖突。這就促成了我稱為漸進編程 的編程方式,在這種方式下,允許在編碼過程中進行一定程度的質(zhì)量檢驗 ——再也不能比這個更早了!

    本文涵蓋了我所認為的 “五大” 代碼分析領(lǐng)域:

    • 編碼標準
    • 代碼重復(fù)
    • 代碼覆蓋率
    • 依賴項分析
    • 復(fù)雜度監(jiān)控

    可以用接下來的幾個靈活的 Eclipse 插件來揭示這些分析領(lǐng)域:

    • CheckStyle:用于編碼標準
    • PMD 的 CPD:幫助發(fā)現(xiàn)代碼重復(fù)
    • Coverlipse:測量代碼覆蓋率
    • JDepend:提供依賴項分析
    • Eclipse Metric 插件:有效地查出復(fù)雜度

    Eclipse 不是您的構(gòu)建系統(tǒng)

      使用 Eclipse 插件與您將這些檢驗工具用于構(gòu)建過程并不矛盾。事實上,您想要確保的是:下列使用 Eclipse 插件的規(guī)則就是應(yīng)用到構(gòu)建過程中的規(guī)則。

    安裝 Eclipse 插件

    安裝 Eclipse 插件再簡單不過了,只需要幾個步驟。在開始之前,最好把該插件下載站點的 URL 準備好。表 1 是本文用到的插件的列表:


    表 1. 代碼改進插件和相應(yīng)的下載站點 URL
    工具目的Eclipse 插件的 URL
    CheckStyle編碼標準分析http://eclipse-cs.sourceforge.net/update/
    Coverlipse測試代碼覆蓋率http://coverlipse.sf.net/update
    CPD復(fù)制/粘貼檢驗http://pmd.sourceforge.net/eclipse/
    JDepend包依賴項分析http://andrei.gmxhome.de/eclipse/
    Metrics復(fù)雜度監(jiān)控http://metrics.sourceforge.net/update

    知道了這些有用插件的下載地址后,安裝插件就是一個極簡單的過程。啟動 Eclipse,然后遵循下列步驟:

    1. 選擇 Help | Software Updates | Find and Install,如圖 1 所示:



      圖 1. 尋找并安裝 Eclipse 插件
      尋找并安裝 Eclipse 插件



    2. 選擇 Search for new features to install 單選按鈕,單擊 Next

    3. 單擊 New Remote Site,輸入要安裝的插件名和 URL(參見圖 2),單擊 OK,然后單擊 Finish 來顯示 Eclipse 更新管理器。



      圖 2. 配置新的遠程站點
      配置新的遠程站點



    4. 在 Eclipse 更新管理器中,有一個查看插件各方面特性的選項。我通常選擇頂級項,如圖 3 所示。選擇您需要的選項并單擊 Finish。Eclipse 現(xiàn)在安裝該插件。您需要重啟 Eclipse 實例。



      圖 3. 安裝 Eclipse 插件
      安裝 Eclipse 插件

    請遵循上述這些步驟來安裝其他的 Eclipse 插件;只需改變插件名和相應(yīng)的下載位置即可。


    用 CheckStyle 校正標準

    代碼庫的可維護性直接影響著軟件的整個成本。另外,不佳的可維護性還會讓開發(fā)人員十分頭痛(進而導(dǎo)致開發(fā)人員的缺乏)—— 代碼越容易修改,就越容易添加新的產(chǎn)品特性。像 CheckStyle 這樣的工具可以協(xié)助尋找那些可影響到可維護性、與編碼標準相沖突的地方,比方說,過大的類、太長的方法和未使用的變量等等。

    有關(guān) PMD

    另一個叫做 PMD 的開源工具提供的功能和 CheckStyle 類似。我偏愛 CheckStyle,但 PMD 也有很多執(zhí)著的追隨者,所以我建議您了解一下這個工具,畢竟它也頗受一些人的青睞。

    使用 Eclipse 的 CheckStyle 插件的好處是能夠在編碼過程中了解到源代碼上下文的各種編碼沖突,讓開發(fā)人員更可能在簽入該代碼前真正處理好這些沖突。您也幾乎可以把 CheckStyle 插件視作一個連續(xù)的代碼復(fù)查工具!

    安裝 CheckStyle 插件并做如下配置(參見圖 4):

    1. 選擇 Project,然后選擇 Eclipse 菜單中的 Properties 菜單項。

    2. 選擇 CheckStyle active for this project 復(fù)選框,單擊 OK



      圖 4. 在 Eclipse 中配置 CheckStyle 插件
      在 Eclipse 中配置 CheckStyle 插件

    Eclipse 重新構(gòu)建工作空間,并在 Eclipse 控制臺中列示已發(fā)現(xiàn)的編碼沖突,如圖 5 所示:


    圖 5. Eclipse 中 CheckStyle 的代碼沖突列表
    Eclipse 中 CheckStyle 的代碼沖突列表

    使用 CheckStyle 插件在 Eclipse 內(nèi)嵌入編碼標準檢驗是一種很棒的方法,用這種方法可以在編碼時 積極地改進代碼,從而在開發(fā)周期的早期發(fā)現(xiàn)源代碼中潛在的缺陷。這么做還有更多的好處,如節(jié)省時間、減少失敗,也因此會減少項目的成本。沒錯,這就是一種積極主動的方式!


    用 Coverlipse 確認覆蓋率

    Coverlipse 是一個用于 Cobertura 的 Eclipse 插件,Cobertura 是一個代碼覆蓋率工具,可以用它來評估具有相應(yīng)測試的源代碼的比率。Cobertura 也提供一個 Ant 任務(wù)和 Maven 插件,但用 Cobertura,您可以在編寫代碼時 評估代碼覆蓋率。您見過這樣的模式嗎?

    通過選擇 Eclipse 菜單項 Run 安裝 Coverlipse 插件并將其和 JUnit 關(guān)聯(lián)起來,該操作會顯示一系列運行配置選項,例如 JUnit、SWT 應(yīng)用程序和 Java™ 應(yīng)用程序。右鍵單擊它并選擇 JUnit w/Coverlipse 節(jié)點中的 New。在這里,需要確定 JUnit 測試的位置,如圖 6 所示:


    圖 6. 配置 Coverlipse 以獲取代碼覆蓋率
    配置 Coverlipse 以獲取代碼覆蓋率

    一旦單擊了 Run,Eclipse 會運行 Coverlipse 并在源代碼(如圖 7 所示)中嵌入標記,該標記顯示了具有相關(guān) JUnit 測試的代碼部分:


    圖 7. Coverlipse 生成的具有嵌入類標記的報告
    Coverlipse 生成的具有嵌入類標記的報告

    正如您所見,使用 Coverlipse Eclipse 插件可以更快地確定代碼覆蓋率。例如,這種實時數(shù)據(jù)功能有助于在將代碼簽入 CM 系統(tǒng) 更好地進行測試。這對漸進編程來說意味著什么呢?


    用 CPD 捕捉代碼重復(fù)

    Eclipse 的 PMD 插件提供了一項叫做 CPD(或復(fù)制粘貼探測器)的功能,用于尋找重復(fù)的代碼。為在 Eclipse 中使用這項便利的工具,需要安裝具有 PMD 的 Eclipse 插件,該插件具有 CPD 功能。

    為尋找重復(fù)的代碼,請用右鍵單擊一個 Eclipse 項目并選擇 PMD | Find Suspect Cut and Paste,如圖 8 所示:


    圖 8. 使用 CPD 插件運行復(fù)制粘貼檢驗
    使用 PMD/CPD 插件運行復(fù)制粘貼檢驗

    一旦運行了 CPD,您的 Eclipse 根目錄下就會創(chuàng)建出一個 report 文件夾,其中包含一個叫做 cpd.txt 的文件,文件中列示了所有重復(fù)的代碼。圖 9 中是一個 cpd.txt 文件的例子:


    圖 9. Eclipse 插件生成的 CPD 文本文件
    Eclipse 插件生成的 CPD 文本文件

    靠人工來尋找重復(fù)的代碼是一項挑戰(zhàn),但使用像 CPD 這樣的插件卻能在編碼時輕松地發(fā)現(xiàn)重復(fù)的代碼。


    使用 JDepend 進行依賴項檢查

    JDepend 是個可免費獲取的開源工具,它為包依賴項提供面向?qū)ο蟮亩攘恐担源酥该鞔a庫的彈性。換句話說,JDepend 可有效測量一個架構(gòu)的健壯性(反之,脆弱性)。

    除了 Eclipse 插件,JDepend 還提供一個 Ant 任務(wù)、Maven 插件和一個 Java 應(yīng)用程序,用以獲取這些度量值。對于相同的信息,它們有著不同的傳遞機制;但 Eclipse 插件的特別之處和相應(yīng)優(yōu)點是:它能以更接近源代碼(即,編碼時)的方式傳遞這條信息。

    圖 10 演示了使用 Eclipse JDepend 插件的方法:通過右鍵單擊源文件夾并選擇 Run JDepend Analysis。一定要選擇一個含源代碼的源文件夾;否則看不到此菜單項。


    圖 10. 使用 JDepend Analysis 分析代碼
    使用 JDepend Analysis 分析代碼

    圖 11 顯示了運行 JDepend Analysis 時生成的報告。左邊顯示包,右邊顯示針對每個包的依賴項度量值。


    圖 11. Eclipse 項目中的包依賴項
    Eclipse 項目中的包依賴項

    正如您所見,JDepend 插件提供了有助于不斷觀察架構(gòu)可維護性變化的大量信息 —— 這其中最大的好處是您可以在編碼時看到這些數(shù)據(jù)。


    用 Metrics 測量復(fù)雜度

    “五大”代碼分析最后的一項是測量復(fù)雜度。Eclipse 提供一種叫做 Metrics 的插件,使用該插件可以進行許多有用的代碼度量,包括圈復(fù)雜度度量,它用于測量方法中惟一路徑的數(shù)目。

    安裝 Metrics 插件并重啟 Eclipse;然后遵循下列步驟:

    1. 右鍵單擊您的項目并選擇 Properties 菜單。在結(jié)果窗口中,選擇 Enable Metrics plugin 復(fù)選框并單擊 OK,如圖 12 所示:



      圖 12. 為項目配置 Metrics
      為項目配置 Metrics



    2. 從 Eclipse 中選擇 Window 菜單打開 Metrics 視圖,然后選擇 Show View | Other...

    3. 選擇 Metrics | Metrics View 打開如圖 13 中顯示的窗口。您需要使用 Java 透視圖并重新構(gòu)建項目,從而顯示這些度量值。



      圖 13. 打開 Eclipse 中的 Metrics View
      打開 Eclipse 中的 Metrics View



    4. 單擊 OK 來顯示如圖 14 中的窗口。

      在此例中,我正在查看一個單獨方法的圈復(fù)雜度。真正妙的是您可以雙擊 Metrics 列表中的方法,該插件會在 Eclipse 編輯器中為此方法打開源代碼。這就讓修正變得超級簡單(如果需要的話)!



      圖 14. 查看方法的圈復(fù)雜度
      查看方法的圈復(fù)雜度

    正如我之前提到過的,Eclipse Metrics 插件還提供了許多功能強大的度量值,有助于您在開發(fā)軟件的過程中改進代碼 —— 可見,它是一個漸進編程意義上的插件!


    合適的才是最好的

    正如您從本文中看到的那樣,將“五大”測量方法,即編碼標準、代碼重復(fù)、代碼覆蓋率、依賴項分析和復(fù)雜度監(jiān)控,用于改進代碼質(zhì)量十分重要。但適合您的才是好的。請記住還有其他許多可用的 Eclipse 插件(比如 PMD 和 FindBugs)能夠幫助您在開發(fā)周期的早期改進代碼質(zhì)量。不管您想要的工具或偏愛的方法是什么,重要的是:行動起來去積極改進代碼質(zhì)量并讓手工代碼檢驗的過程變得更加有效。我估計您使用這些插件一段時間后,就再也離不開它們了。


    參考資料

    學(xué)習(xí)

    • 您可以參閱本文在 developerWorks 全球站點上的 英文原文

    • 讓開發(fā)自動化(Paul Duvall,developerWorks):閱讀完整的系列。

    • Improving Code Quality with PMD and Eclipse” (Levent Gurses,Jacoozi,2005 年 1 月):這篇文章將 PMD 視為 Eclipse 插件,介紹了使用 PMD 改進代碼質(zhì)量并縮短代碼檢驗過程的方法。

    • 用 Cobertura 測量測試覆蓋率” (Elliotte Rusty Harold,developerWorks,2005 年 5 月):Elliotte Rusty Harold 分享了他的經(jīng)驗,即如何使用代碼覆蓋率的最佳實踐來利用 Cobertura。

    • 不要被覆蓋報告所迷惑” (Andrew Glover,developerWorks,2006 年 1 月):這篇文章進一步揭示了覆蓋率報告中的數(shù)字所代表的真正含義,也給出了這些數(shù)字所不能代表的含義。

    • Managing Your Dependencies with JDepend” (Glen Wilcox,OnJava,2004 年 1 月):在這篇文章中,Glen Wilcox 介紹了 JDepend,這是一個可以免費獲取的工具,它能洞悉軟件架構(gòu)中的許多質(zhì)量問題。

    • 軟件架構(gòu)的代碼質(zhì)量” (Andrew Glover,developerWorks,2006 年 4 月):Andrew Glover 介紹了如何持續(xù)監(jiān)控以及如何改正能夠影響軟件架構(gòu)長期存續(xù)性的代碼質(zhì)量問題。

    • 讓開發(fā)自動化: 持續(xù)檢查” (Paul Duvall,developerWorks,2006 年 8 月):Paul Duvall 介紹了自動化的檢查工具(如 CheckStyle、JavaNCSS 和 CPD )是如何增強開發(fā)過程的以及何時應(yīng)該使用這些工具。

    • Detecting Duplicate Code with PMD's CPD” (Tom Copeland,OnJava,2003 年 3 月):Tom Copeland 介紹了一種叫做 CPD(復(fù)制/粘貼檢測器)的開源工具,該工具用于尋找重復(fù)的 Java 代碼。

    • Maintain organizational standards with code audits” (testearly.com):編碼標準有利于廣大開發(fā)人員對代碼庫達成共識。

    • developerWorks Java 技術(shù)專區(qū):數(shù)百篇關(guān)于 Java 編程各方面的文章。

    獲得產(chǎn)品和技術(shù)

    討論

    • 提高代碼質(zhì)量論壇:developerWorks 的積極貢獻者 Andrew Glover 是一名專注于改進代碼質(zhì)量的顧問,他為這個由他主持的論壇帶來了很多相當(dāng)專業(yè)的知識。

    關(guān)于作者

    Paul Duvall

    Paul Duvall 是 Stelligent Incorporated 的 CTO,該公司利用有效的開發(fā)人員測試策略,以及能夠讓團隊盡早盡多地監(jiān)視和提高代碼質(zhì)量的持續(xù)集成技術(shù),幫助其他企業(yè)解決軟件的質(zhì)量問題。他還是 UML™ 2 Toolkit 一書的作者之一,目前正在與他人合作撰寫 Continuous Integration: Improving Software Quality and Reducing Risk (Addison-Wesley) 一書。

    posted @ 2013-06-19 17:27 love1563 閱讀(2174) | 評論 (1)編輯 收藏

    http://www.open-open.com/bbs/view/1320934157953/


      1. ctrl+shift+r:打開資源

        這可能是所有快捷鍵組合中最省時間的了。這組快捷鍵可以讓你打開你的工作區(qū)中任何一個文件,而你只需要按下文件名或mask名中的前幾個字母,比如applic*.xml。美中不足的是這組快捷鍵并非在所有視圖下都能用。


    【轉(zhuǎn)】eclipse快捷鍵 10個最有用的快捷鍵

    2. ctrl+o:快速outline

        如果想要查看當(dāng)前類的方法或某個特定方法,但又不想把代碼拉上拉下,也不想使用查找功能的話,就用ctrl+o吧。它可以列出當(dāng)前類中的所有方法及屬性,你只需輸入你想要查詢的方法名,點擊enter就能夠直接跳轉(zhuǎn)至你想去的位置。


    【轉(zhuǎn)】eclipse快捷鍵 10個最有用的快捷鍵

    3. ctrl+e:快速轉(zhuǎn)換編輯器

        這組快捷鍵將幫助你在打開的編輯器之間瀏覽。使用ctrl+page down或ctrl+page up可以瀏覽前后的選項卡,但是在很多文件打開的狀態(tài)下,ctrl+e會更加有效率。


    eclipse快捷鍵 10個最有用的快捷鍵

    4. ctrl+2,L:為本地變量賦值

        開發(fā)過程中,我常常先編寫方法,如Calendar.getInstance(),然后通過ctrl+2快捷鍵將方法的計算結(jié)果賦值于一個本地變量之上。 這樣我節(jié)省了輸入類名,變量名以及導(dǎo)入聲明的時間。Ctrl+F的效果類似,不過效果是把方法的計算結(jié)果賦值于類中的域。

        5. alt+shift+r:重命名

        重命名屬性及方法在幾年前還是個很麻煩的事,需要大量使用搜索及替換,以至于代碼變得零零散散的。今天的Java IDE提供源碼處理功能,Eclipse也是一樣。現(xiàn)在,變量和方法的重命名變得十分簡單,你會習(xí)慣于在每次出現(xiàn)更好替代名稱的時候都做一次重命名。要使 用這個功能,將鼠標移動至屬性名或方法名上,按下alt+shift+r,輸入新名稱并點擊回車。就此完成。如果你重命名的是類中的一個屬性,你可以點擊alt+shift+r兩次,這會呼叫出源碼處理對話框,可以實現(xiàn)get及set方法的自動重命名。

        6. alt+shift+l以及alt+shift+m:提取本地變量及方法

        源碼處理還包括從大塊的代碼中提取變量和方法的功能。比如,要從一個string創(chuàng)建一個常量,那么就選定文本并按下alt+shift+l即可。如果同 一個string在同一類中的別處出現(xiàn),它會被自動替換。方法提取也是個非常方便的功能。將大方法分解成較小的、充分定義的方法會極大的減少復(fù)雜度,并提 升代碼的可測試性。

        7. shift+enter及ctrl+shift+enter

        Shift+enter在當(dāng)前行之下創(chuàng)建一個空白行,與光標是否在行末無關(guān)。Ctrl+shift+enter則在當(dāng)前行之前插入空白行。

        8. Alt+方向鍵

        這也是個節(jié)省時間的法寶。這個組合將當(dāng)前行的內(nèi)容往上或下移動。在try/catch部分,這個快捷方式尤其好使。

        9. ctrl+m

        大顯示屏幕能夠提高工作效率是大家都知道的。Ctrl+m是編輯器窗口最大化的快捷鍵。

        10. ctrl+.及ctrl+1:下一個錯誤及快速修改

        ctrl+.將光標移動至當(dāng)前文件中的下一個報錯處或警告處。這組快捷鍵我一般與ctrl+1一并使用,即修改建議的快捷鍵。新版Eclipse的修改建 議做的很不錯,可以幫你解決很多問題,如方法中的缺失參數(shù),throw/catch exception,未執(zhí)行的方法等等。


    eclipse快捷鍵 10個最有用的快捷鍵

    更多快捷鍵組合可在Eclipse按下ctrl+shift+L查看。

    posted @ 2013-06-11 15:28 love1563 閱讀(1435) | 評論 (0)編輯 收藏

    查閱了一下網(wǎng)絡(luò)和博客園,發(fā)現(xiàn)還沒有一個明確地指導(dǎo)源碼管理提交準則的相關(guān)文章,因此斗膽整理了一部分自己平時開發(fā)管理的心得,加上查閱了部分英文資料寫了一個不算很完善的SVN提交準則。

     

    負責(zé)而謹慎地提交自己的代碼

    SVN更新的原則是要隨時更新,隨時提交。當(dāng)完成了一個小功能,能夠通過編譯并且并且自己測試之后,謹慎地提交。

    如果提交過程中產(chǎn)生了沖突,則需要同之前的開發(fā)人員聯(lián)系,兩個人一起協(xié)商解決沖突,解決沖突之后,需要兩人一起測試保證解決沖突之后,程序不會影響其他功能。

    如果提交過程中產(chǎn)生了更新,則也是需要重新編譯并且完成自己的一些必要測試,再進行提交。

     

    保持原子性的提交

    每次提交的間歇盡可能地短,以一個小時,兩個小時的開發(fā)工作為宜。如在更改UI界面的時候,可以每完成一個UI界面的修改或者設(shè)計,就提交一次。在開發(fā)功能模塊的時候,可以每完成一個小細節(jié)功能的測試,就提交一次,在修改bug的時候,每修改掉一個bug并且確認修改了這個bug,也就提交一次。我們提倡多提交,也就能多為代碼添加上保險。

     

    不要提交自動生成的文件

    Visual Studio在生成過程中會產(chǎn)生很多自動文件,如.suo等配置文件,Debug,Release,Obj等編譯文件,以及其他的一些自動生成,同編譯代碼無關(guān)的文件,這些文件在提交的時候不應(yīng)該簽入,如果不小心簽入了,需要使用Delete命令從倉庫中刪除。

     

    不要提交不能通過編譯的代碼

    代碼在提交之前,首先要確認自己能夠在本地編譯。如果在代碼中使用了第三方類庫,要考慮到項目組成員中有些成員可能沒有安裝相應(yīng)的第三方類庫或者沒有放入GAC(針對.Net Framework)中,項目經(jīng)理在準備項目工作區(qū)域的時候,需要考慮到這樣的情況,確保開發(fā)小組成員在簽出代碼之后能夠在統(tǒng)一的環(huán)境中進行編譯。

     

    不要提交自己不明白的代碼

    代碼在提交入SVN之后,你的代碼將被項目成員所分享。如果提交了你不明白的代碼,你看不懂,別人也看不懂,如果在以后出現(xiàn)了問題將會成為項目質(zhì)量的隱患。因此在引入任何第三方代碼之前,確保你對這個代碼有一個很清晰的了解。

     

    提前宣布自己的工作計劃

    在自己準備開始進行某項功能的修改之前,先給工作小組的成員談?wù)勛约旱男薷挠媱潱尨蠹叶寄芰私饽愕乃枷耄私饽慵磳浖鞒龅男薷模@樣能盡可能的減少在開發(fā)過程中可能出現(xiàn)的沖突,提高開發(fā)效率。同時你也能夠在和成員的交流中發(fā)現(xiàn)自己之前設(shè)計的不足,完善你的設(shè)計。

     

    對提交的信息采用明晰的標注

    +) 表示增加了功能

    *) 表示對某些功能進行了更改

    -) 表示刪除了文件,或者對某些功能進行了裁剪,刪除,屏蔽。

    b) 表示修正了具體的某個bug

    posted @ 2013-02-14 19:43 love1563 閱讀(5189) | 評論 (9)編輯 收藏

         摘要: J2EE層次設(shè)計架構(gòu)實例的分析詳解
      閱讀全文

    posted @ 2012-10-09 08:52 love1563 閱讀(2707) | 評論 (1)編輯 收藏

         摘要: 大型網(wǎng)站的架構(gòu)
      閱讀全文

    posted @ 2012-10-09 08:49 love1563 閱讀(2180) | 評論 (0)編輯 收藏

         摘要: 系統(tǒng)、軟件版本號大全  閱讀全文

    posted @ 2012-10-04 21:00 love1563 閱讀(236) | 評論 (0)編輯 收藏

         摘要: 基于XMPP協(xié)議的手機多方多端即時通訊方案
      閱讀全文

    posted @ 2012-10-04 18:26 love1563 閱讀(1576) | 評論 (0)編輯 收藏

         摘要:   閱讀全文

    posted @ 2011-05-29 23:50 love1563 閱讀(2545) | 評論 (0)編輯 收藏

         摘要:   閱讀全文

    posted @ 2011-05-29 23:47 love1563 閱讀(2652) | 評論 (0)編輯 收藏

         摘要:   閱讀全文

    posted @ 2011-02-25 10:54 love1563 閱讀(273) | 評論 (0)編輯 收藏

         摘要:   閱讀全文

    posted @ 2010-08-19 01:48 love1563 閱讀(167) | 評論 (0)編輯 收藏

    http://www.jollen.org/blog/android_os/

    posted @ 2010-07-16 09:28 love1563 閱讀(253) | 評論 (0)編輯 收藏

    http://www.chengyunfeng.com/page/1

    posted @ 2010-07-15 11:23 love1563 閱讀(182) | 評論 (0)編輯 收藏

    http://hi.baidu.com/lfcaolibin/blog/category/Android/index/2

    posted @ 2010-07-14 09:34 love1563 閱讀(159) | 評論 (0)編輯 收藏

         摘要:   閱讀全文

    posted @ 2009-09-24 14:29 love1563 閱讀(1289) | 評論 (0)編輯 收藏

         摘要:   閱讀全文

    posted @ 2009-09-24 14:25 love1563 閱讀(1855) | 評論 (0)編輯 收藏

         摘要:   閱讀全文

    posted @ 2009-09-24 14:23 love1563 閱讀(1396) | 評論 (0)編輯 收藏

         摘要:   閱讀全文

    posted @ 2009-09-10 20:56 love1563 閱讀(133) | 評論 (0)編輯 收藏

         摘要:   閱讀全文

    posted @ 2009-09-10 20:52 love1563 閱讀(487) | 評論 (0)編輯 收藏

         摘要:   閱讀全文

    posted @ 2009-09-10 20:34 love1563 閱讀(1004) | 評論 (0)編輯 收藏

         摘要:   閱讀全文

    posted @ 2009-09-09 16:33 love1563 閱讀(182) | 評論 (0)編輯 收藏

         摘要:   閱讀全文

    posted @ 2009-09-09 16:28 love1563 閱讀(364) | 評論 (0)編輯 收藏

         摘要:   閱讀全文

    posted @ 2009-05-07 15:18 love1563 閱讀(248) | 評論 (0)編輯 收藏

         摘要:   閱讀全文

    posted @ 2009-04-30 15:27 love1563 閱讀(473) | 評論 (0)編輯 收藏

         摘要:   閱讀全文

    posted @ 2009-04-30 11:53 love1563 閱讀(12383) | 評論 (11)編輯 收藏

         摘要:   閱讀全文

    posted @ 2009-04-30 11:39 love1563 閱讀(1316) | 評論 (0)編輯 收藏

         摘要:   閱讀全文

    posted @ 2009-04-29 15:23 love1563 閱讀(387) | 評論 (0)編輯 收藏

         摘要:   閱讀全文

    posted @ 2009-04-29 14:25 love1563 閱讀(210) | 評論 (0)編輯 收藏

         摘要:   閱讀全文

    posted @ 2009-04-29 14:22 love1563 閱讀(250) | 評論 (0)編輯 收藏

         摘要:   閱讀全文

    posted @ 2009-04-29 13:35 love1563 閱讀(849) | 評論 (0)編輯 收藏

         摘要:   閱讀全文

    posted @ 2009-04-20 13:33 love1563 閱讀(191) | 評論 (0)編輯 收藏

         摘要:   閱讀全文

    posted @ 2009-04-16 09:59 love1563 閱讀(179) | 評論 (0)編輯 收藏

         摘要:   閱讀全文

    posted @ 2009-04-15 10:39 love1563 閱讀(163) | 評論 (0)編輯 收藏

         摘要:   閱讀全文

    posted @ 2009-04-13 09:35 love1563 閱讀(187) | 評論 (0)編輯 收藏

         摘要:   閱讀全文

    posted @ 2009-04-08 21:53 love1563 閱讀(208) | 評論 (0)編輯 收藏

         摘要:   閱讀全文

    posted @ 2009-04-07 10:24 love1563 閱讀(196) | 評論 (0)編輯 收藏

         摘要:   閱讀全文

    posted @ 2009-03-30 14:59 love1563 閱讀(1968) | 評論 (0)編輯 收藏

         摘要:   閱讀全文

    posted @ 2009-03-30 14:05 love1563 閱讀(199) | 評論 (0)編輯 收藏

         摘要:   閱讀全文

    posted @ 2009-03-26 10:48 love1563 閱讀(231) | 評論 (0)編輯 收藏

         摘要:   閱讀全文

    posted @ 2009-03-24 09:11 love1563 閱讀(253) | 評論 (0)編輯 收藏

         摘要:   閱讀全文

    posted @ 2009-03-12 09:57 love1563 閱讀(199) | 評論 (0)編輯 收藏

    http://blog.csdn.net/xymyeah/archive/2009/02/26/3940807.aspx

    posted @ 2009-03-11 12:30 love1563 閱讀(190) | 評論 (0)編輯 收藏

         摘要:   閱讀全文

    posted @ 2009-03-10 17:30 love1563 閱讀(959) | 評論 (0)編輯 收藏

         摘要:   閱讀全文

    posted @ 2009-03-06 16:18 love1563 閱讀(143) | 評論 (0)編輯 收藏

         摘要:   閱讀全文

    posted @ 2009-03-05 15:18 love1563 閱讀(286) | 評論 (0)編輯 收藏

         摘要:   閱讀全文

    posted @ 2009-03-05 14:27 love1563 閱讀(255) | 評論 (0)編輯 收藏

         摘要:   閱讀全文

    posted @ 2009-03-05 14:18 love1563 閱讀(195) | 評論 (0)編輯 收藏

         摘要:   閱讀全文

    posted @ 2009-03-05 09:37 love1563 閱讀(353) | 評論 (0)編輯 收藏

         摘要:   閱讀全文

    posted @ 2009-03-05 09:02 love1563 閱讀(487) | 評論 (0)編輯 收藏

         摘要:   閱讀全文

    posted @ 2009-03-05 08:59 love1563 閱讀(312) | 評論 (0)編輯 收藏

         摘要:   閱讀全文

    posted @ 2009-03-04 14:18 love1563 閱讀(262) | 評論 (0)編輯 收藏

         摘要:   閱讀全文

    posted @ 2009-02-25 17:17 love1563 閱讀(310) | 評論 (0)編輯 收藏

         摘要:   閱讀全文

    posted @ 2009-02-25 14:29 love1563 閱讀(210) | 評論 (0)編輯 收藏

         摘要:   閱讀全文

    posted @ 2009-02-25 11:09 love1563 閱讀(1707) | 評論 (0)編輯 收藏

         摘要:   閱讀全文

    posted @ 2009-02-24 17:50 love1563 閱讀(296) | 評論 (0)編輯 收藏

         摘要:   閱讀全文

    posted @ 2009-02-24 16:33 love1563 閱讀(190) | 評論 (0)編輯 收藏

         摘要:   閱讀全文

    posted @ 2009-02-24 16:30 love1563 閱讀(182) | 評論 (0)編輯 收藏

         摘要:   閱讀全文

    posted @ 2009-02-24 15:50 love1563 閱讀(172) | 評論 (0)編輯 收藏

         摘要:   閱讀全文

    posted @ 2009-02-24 15:00 love1563 閱讀(191) | 評論 (0)編輯 收藏

         摘要:   閱讀全文

    posted @ 2009-02-23 16:41 love1563 閱讀(538) | 評論 (0)編輯 收藏

         摘要:   閱讀全文

    posted @ 2007-08-23 14:30 love1563 閱讀(158) | 評論 (0)編輯 收藏

         摘要:   閱讀全文

    posted @ 2007-08-14 17:14 love1563 閱讀(415) | 評論 (0)編輯 收藏

         摘要:   閱讀全文

    posted @ 2007-08-14 13:47 love1563 閱讀(242) | 評論 (0)編輯 收藏

         摘要:   閱讀全文

    posted @ 2007-08-14 13:29 love1563 閱讀(273) | 評論 (0)編輯 收藏

         摘要:   閱讀全文

    posted @ 2007-08-10 15:38 love1563 閱讀(246) | 評論 (0)編輯 收藏

         摘要:   閱讀全文

    posted @ 2007-08-10 14:05 love1563 閱讀(284) | 評論 (0)編輯 收藏

         摘要:   閱讀全文

    posted @ 2007-08-09 10:52 love1563 閱讀(372) | 評論 (0)編輯 收藏

    KzStepCounter.exe
    UltraSnap.exe

    posted @ 2007-08-09 09:36 love1563 閱讀(423) | 評論 (1)編輯 收藏

         摘要:   閱讀全文

    posted @ 2007-08-08 15:31 love1563 閱讀(405) | 評論 (0)編輯 收藏

         摘要:   閱讀全文

    posted @ 2007-08-08 14:21 love1563 閱讀(628) | 評論 (0)編輯 收藏

         摘要:   閱讀全文

    posted @ 2007-08-08 09:49 love1563 閱讀(504) | 評論 (1)編輯 收藏

         摘要:   閱讀全文

    posted @ 2007-08-07 13:08 love1563 閱讀(1129) | 評論 (0)編輯 收藏

         摘要:   閱讀全文

    posted @ 2007-08-07 10:44 love1563 閱讀(1844) | 評論 (0)編輯 收藏

         摘要:   閱讀全文

    posted @ 2007-08-06 16:46 love1563 閱讀(289) | 評論 (0)編輯 收藏

    http://www.jint.cn/

    posted @ 2007-08-06 10:31 love1563 閱讀(142) | 評論 (0)編輯 收藏

         摘要:   閱讀全文

    posted @ 2007-08-03 17:35 love1563 閱讀(207) | 評論 (0)編輯 收藏

         摘要:   閱讀全文

    posted @ 2007-08-03 17:14 love1563 閱讀(854) | 評論 (0)編輯 收藏

         摘要:   閱讀全文

    posted @ 2007-08-03 16:36 love1563 閱讀(266) | 評論 (0)編輯 收藏

         摘要:   閱讀全文

    posted @ 2007-08-03 16:01 love1563 閱讀(221) | 評論 (0)編輯 收藏

         摘要:   閱讀全文

    posted @ 2007-08-03 15:59 love1563 閱讀(1424) | 評論 (3)編輯 收藏

         摘要:   閱讀全文

    posted @ 2007-08-03 10:59 love1563 閱讀(330) | 評論 (0)編輯 收藏

         摘要:   閱讀全文

    posted @ 2007-08-03 10:17 love1563 閱讀(900) | 評論 (0)編輯 收藏

         摘要:   閱讀全文

    posted @ 2007-08-01 14:01 love1563 閱讀(201) | 評論 (0)編輯 收藏

         摘要:   閱讀全文

    posted @ 2007-08-01 14:01 love1563 閱讀(241) | 評論 (0)編輯 收藏

         摘要:   閱讀全文

    posted @ 2007-08-01 12:58 love1563 閱讀(441) | 評論 (0)編輯 收藏

         摘要: 149 、 JAVA 代碼查錯 1.abstract?class?Name?{???private?String?name;???public?abstract?boolean?isStupidName(String?name)?{}} 大俠們,這有何錯誤 ? 答案 :? ...  閱讀全文

    posted @ 2007-05-21 11:55 love1563 閱讀(121) | 評論 (0)編輯 收藏

         摘要: 138 、 Java 的通信編程,編程題 ( 或問答 ) ,用 JAVA SOCKET ...  閱讀全文

    posted @ 2007-05-21 11:54 love1563 閱讀(175) | 評論 (0)編輯 收藏

         摘要:   閱讀全文

    posted @ 2007-05-21 11:52 love1563 閱讀(492) | 評論 (0)編輯 收藏

    148 將一個鍵盤輸入的數(shù)字轉(zhuǎn)化成中文輸出
    (例如:輸入:1234567?????輸出:一百二拾三萬四千五百六拾七)
    java語言實現(xiàn),,請編一段程序?qū)崿F(xiàn)!
    ?public?class?Reader?{
    ??private?String?strNum;
    ??private?String?strNumChFormat;
    ??private?String?strNumTemp;
    ??private?int?intNumLen;
    ??private?String?strBegin;
    ??public?Reader(String?strNum)?{
    ????this.strNum?=?strNum;
    ??}
    ??public?boolean?check(String?strNum)?{
    ????boolean?valid?=?false;
    ????
    ????if?(strNum.substring(0,1).equals("0")){
    ?????this.strNum?=?strNum.substring(1);
    ????}
    ????try?{
    ??????new?Double(strNum);
    ??????valid?=?true;
    ????}
    ????catch?(NumberFormatException?ex)?{
    ??????System.out.println("Bad?number?format!");
    ????}
    ????return?valid;
    ??}
    ??public?void?init()?{
    ????strNumChFormat?=?"";
    ????intNumLen?=?strNum.length();
    ????strNumTemp?=?strNum;
    ????strNumTemp?=?strNumTemp.replace('1',?'');
    ????strNumTemp?=?strNumTemp.replace('2',?'');
    ????strNumTemp?=?strNumTemp.replace('3',?'');
    ????strNumTemp?=?strNumTemp.replace('4',?'');
    ????strNumTemp?=?strNumTemp.replace('5',?'');
    ????strNumTemp?=?strNumTemp.replace('6',?'');
    ????strNumTemp?=?strNumTemp.replace('7',?'');
    ????strNumTemp?=?strNumTemp.replace('8',?'');
    ????strNumTemp?=?strNumTemp.replace('9',?'');
    ????strNumTemp?=?strNumTemp.replace('0',?'');
    ????strNumTemp?=?strNumTemp.replace('.',?'');
    ????strBegin?=?strNumTemp.substring(0,?1);
    ??}
    ??public?String?readNum()?{
    ????if?(check(strNum))?{
    ??????init();
    ??????try?{
    ????????for?(int?i?=?1,?j?=?1,?k?=?1;?i?<?intNumLen;?i++)?{
    ??????????if?(strNumTemp.charAt(intNumLen?-?1)?==?''?&&?i?==?1)?{
    ????????????strNumChFormat?=?"";
    ??????????}
    ??????????else?if?(strNumTemp.charAt(intNumLen?-?i)?==?''?&&?j?==?1)?{
    ????????????strNumChFormat?=?""?+?strNumChFormat;
    ??????????}
    ??????????else?if?(strNumTemp.charAt(intNumLen?-?i)?==?'')?{
    ????????????j?=?1;
    ????????????k?=?1;
    ????????????strNumChFormat?=?strNumTemp.charAt(intNumLen?-?i)?+?strNumChFormat;
    ????????????continue;
    ??????????}
    ??????????else?{
    ????????????strNumChFormat?=?strNumTemp.charAt(intNumLen?-?i)?+?strNumChFormat;
    ??????????}
    ??????????if?(strNumTemp.charAt(intNumLen?-?i?-?1)?!=?''?&&
    ??????????????strNumTemp.charAt(intNumLen?-?i?-?1)?!=?'')?{
    ????????????if?(j?==?1?&&?i?<?intNumLen)?{
    ??????????????strNumChFormat?=?''?+?strNumChFormat;
    ????????????}
    ????????????else?if?(j?==?2?&&?i?<?intNumLen)?{
    ??????????????strNumChFormat?=?''?+?strNumChFormat;
    ????????????}
    ????????????else?if?(j?==?3?&&?i?<?intNumLen)?{
    ??????????????strNumChFormat?=?''?+?strNumChFormat;
    ????????????}
    ??????????}
    ??????????if?(j?==?4?&&?i?<?intNumLen)?{
    ????????????j?=?0;
    ??????????}
    ??????????if?(k?==?4?&&?i?<?intNumLen)?{
    ????????????strNumChFormat?=?''?+?strNumChFormat;
    ??????????}
    ??????????else?if?(k?==?8?&&?i?<?intNumLen)?{
    ????????????k?=?0;
    ????????????strNumChFormat?=?''?+?strNumChFormat;
    ??????????}
    ??????????j++;
    ??????????k++;
    ????????}
    ????????while?(strNumChFormat.indexOf("")?!=?-1)?{
    ??????????strNumChFormat?=?strNumChFormat.replaceAll("",?"?");
    ????????}
    ????????if?(strNumChFormat.substring(0,?2)?==?"一拾")?{
    ??????????strNumChFormat?=?strNumChFormat.substring(1,?strNumChFormat.length());
    ????????}
    ????????if?(strNumChFormat.indexOf("")?>=?0)?{
    ??????????String?rebegin?=?strNumChFormat.substring(0,
    ??????????????strNumChFormat.indexOf(""));
    ??????????String?relast?=?strNumChFormat.substring(strNumChFormat.indexOf(""),
    ??????????????strNumChFormat.length());
    ??????????for?(int?i?=?1;?i?<=?relast.length();?i++)?{
    ????????????relast?=?relast.replaceAll("",?"");
    ????????????relast?=?relast.replaceAll("",?"");
    ????????????relast?=?relast.replaceAll("",?"");
    ????????????relast?=?relast.replaceAll("",?"");
    ????????????relast?=?relast.replaceAll("",?"");
    ??????????}
    ??????????strNumChFormat?=?rebegin?+?relast;
    ????????}
    ??????}
    ??????catch?(ArrayIndexOutOfBoundsException?ex)?{
    ????????ex.printStackTrace();
    ??????}
    ??????catch?(Exception?ex)?{
    ????????ex.printStackTrace();
    ??????}
    ??????int?off?=?strNumChFormat.indexOf("");
    ??????strNumChFormat?=?strBegin?+?strNumChFormat.substring(0);
    ????}
    ????else?{
    ??????strNumChFormat?=?"";
    ????}
    ????return?strNumChFormat;
    ??}
    ??public?static?void?main(String?args[])?{
    ????try?{
    ??????String?number?=?args[0].toString();
    ??????System.out.println("The?number?is:?"?+?number);
    ??????Reader?reader?=?new?Reader(number);
    ??????System.out.println("Output?String:?"?+?reader.readNum());
    ????}
    ????catch?(Exception?ex)?{
    ??????System.out.println("Please?input?like?that:?javac?Reader?<number>");
    ????}
    ??}
    }

    posted @ 2007-05-21 11:36 love1563 閱讀(800) | 評論 (0)編輯 收藏

    ?

    提綱:
    1、版權(quán)聲明
    2、前言
    3、正文
    4、結(jié)論
    5、附注
    6、參考資料

    =======================================================

    1、版權(quán)聲明:
    ??本文作者:little,原始出處:用"堆棧區(qū)數(shù)據(jù)復(fù)制"理解Java賦值和參數(shù)傳遞機制的心得?([link]http://java.learndiary.com/disDiaryContentAction.do?goalID=2716[/link]),郵件:mdx-xx@tom.com。如有任何反饋意見請聯(lián)系作者,作者會在本文原始出處隨時更新此文。轉(zhuǎn)載及引用請保留此版權(quán)聲明,謝謝。

    2、前言:
    ??關(guān)于Java的賦值和參數(shù)傳遞是按值(by?value)進行的還是按引用(by?reference)進行的,這個問題曾經(jīng)迷惑了很多人,包括我。而且,我想,這個問題還將繼續(xù)迷惑一些人,包括那些C++的高手。
    ??在這里,我不準備用“按值(by?value)”和“按引用(by?value)”這樣的術(shù)語來闡述這個問題。因為,從字面的理解來看,這樣的術(shù)語在不同的人頭腦里有不同的含義。我試圖從Java數(shù)據(jù)(包括原始類型(primitive?type)和對象(ojbect))在內(nèi)存中的存儲這個角度,用一個自創(chuàng)的“術(shù)語”來闡述我對這個問題的理解。這個術(shù)語就是:“堆棧區(qū)數(shù)據(jù)復(fù)制(Stack?Data?Copy,簡稱SDC)”。詳細一點就是:在Java中,不管是賦值操作還是參數(shù)傳遞操作--針對原始類型(primitive?type),是對堆棧區(qū)的原始類型的值進行復(fù)制;針對對象,是對儲存在堆棧區(qū)的,對象的引用中所儲存的對象的值的地址進行復(fù)制。
    ??像上面摳字眼的句子讀起來比較費力,我在后面將用兩個例子并結(jié)合一些示意圖來闡述我對這個問題的理解。希望各位朋友幫助糾正錯誤。

    3、正文:
    1)、賦值操作:
    例子源碼:(Assign.java)

    1. public ?class?Assign{
    2. ??public?static?void?main(String[]?args){
    3. ????int?i?=?1;
    4. ????Object?o?=?new?Object();
    5. ????System.out.println("i?=?"?+?i?+?"?;?o?=?"?+?o?);?//?Step?1?(示意圖:3-1-1)
    6. ????int?j?=?i;???
    7. ????Object?p?=?o;
    8. ????System.out.println("i?=?"?+?i?+?"?;?j?=?"?+?j?+?"?;?o?=?"?+?o?+?"?;?p?=?"?+?p);?//Step?2?(示意圖:3-1-2)
    9. ????j++;
    10. ????p?=?new?Object();
    11. ????System.out.println("i?=?"?+?i?+?"?;?j?=?"?+?j?+?"?;?o?=?"?+?o?+?"?;?p?=?"?+?p);?//Step?3?(示意圖:3-1-3)
    12. ??}
    13. }


    對上面例子的說明:
    (1),Step?1中,整數(shù)i和對象o得到賦值。

    示意圖3-1-1

    ?
    chart3-1-1.bmp
    從示意圖3-1-1中可以看出:整數(shù)i存儲在堆棧區(qū)(Stack);對象o的引用存儲在了堆棧區(qū),但是對象o的值卻存儲在了內(nèi)存堆中(Heap),對象o的引用存儲了對象o的地址。
    Step?1在我的機器上的一次輸出結(jié)果:
    1. i?=?1?;?o?=?java.lang.Object@a90653

    至于對象o的值輸出來怎么會是那個樣子,我只能告訴您:在java程序的一次運行過程中,每個Object對象輸出這樣的值是唯一的,因此可以借此來判斷對象的引用指向的對象是否發(fā)生了改變。詳情請參考Java?API?文檔(下同,這里給出的是:J2SE?1.5.0?API?中文版):
    [link]http://gceclub.sun.com.cn/Java_Docs/html/zh_CN/api/java/io/PrintStream.html#println(java.lang.Object)[/link]
    [link]http://gceclub.sun.com.cn/Java_Docs/html/zh_CN/api/java/lang/Object.html#toString()[/link]
    (2),Step?2中,把整數(shù)i賦值給了整數(shù)j,把對象o賦值給了對象p。

    示意圖3-1-2

    chart3-1-2.bmp

    從示意圖3-1-2中可以看出:整數(shù)i的值復(fù)制給了整數(shù)j,整數(shù)j同樣存儲在堆棧區(qū);存儲在堆棧區(qū)的對象o的引用中存儲的對象o的地址C復(fù)制給了對象p的引用,對象p的引用同樣在堆棧區(qū)中。因為對象p的引用得到了對象o的引用復(fù)制過來的對象o的值的存儲地址C,所以對象p的引用和對象o的引用都指向了在堆(heap)中的同一個對象,并且,這個對象的地址是地址C。
    Step?2在我的機器上的一次輸出結(jié)果:
    1. i?=?1?;?j?=?1?;?o?=?java.lang.Object@a90653?;?p?=?java.lang.Object@a90653

    (3),Step?3中,整數(shù)j的值加1,賦給了對象p新的對象值。

    示意圖3-1-3

    chart3-1-3.bmp

    從示意圖3-1-3中可以看出:整數(shù)i的值不變,整數(shù)j的值加1變?yōu)?,整數(shù)在堆棧區(qū)中;新生成的對象的值存儲在了堆(Heap)中,地址為F。新生成對象的地址F存儲在了堆棧區(qū)p的引用中,替換了原來存儲在其中的地址C。于是,p的引用就指向了新生成的對象,這個新生成的對象的地址是地址F。而整數(shù)i和對象o的?(包括對象o的引用)沒有改變也不曾有任何改變(除了初次賦值)。
    Step?3在我的機器上的一次輸出結(jié)果:
    1. i?=?1?;?j?=?2?;?o?=?java.lang.Object@a90653?;?p?=?java.lang.Object@de6ced


    至此,通過上面的例子及其示意圖和說明,我得到一個結(jié)論:
    在Java賦值操作中,針對原始類型(primitive?type),是對堆棧區(qū)的原始類型的值進行復(fù)制;針對對象,是對儲存在堆棧區(qū)的,對象的引用中所儲存的對象的值的地址進行復(fù)制。這就是術(shù)語:“堆棧區(qū)數(shù)據(jù)復(fù)制(Stack?Data?Copy,簡稱SDC)”在Java賦值操作中的闡述。

    2)、方法中的參數(shù)傳遞操作:
    例子源碼:(PassParameter.java)
    1. public?class?PassParameter{
    2. ??static?void?showMe(int?pi,?Object?po){
    3. ????System.out.println("pi?=?"?+?pi?+?"?;?po?=?"?+?po);?//?Step?2?(示意圖:3-2-2)
    4. ????pi++;
    5. ????po?=?new?Object();
    6. ????System.out.println("pi?=?"?+?pi?+?"?;?po?=?"?+?po);?//?Step?3?(示意圖:3-2-3)
    7. ??}
    8. ??public?static?void?main(String[]?args){
    9. ????int?i?=?1;
    10. ????Object?o?=?new?Object();
    11. ????System.out.println("i?=?"?+?i?+?"?;?o?=?"?+?o);?//?Step?1?(示意圖:3-1-1)
    12. ????showMe(i,?o);
    13. ????System.out.println("i?=?"?+?i?+?"?;?o?=?"?+?o);?//?Step?4?(示意圖:3-2-3)
    14. ??}
    15. }


    對上面例子的說明:
    (1),Step?1中,與上面Assign.java中的Step?1相同,略,下面重復(fù)其示意圖3-1-1。

    示意圖3-1-1

    chart3-1-1.bmp
    ?

    Step?1在我的機器上的一次輸出結(jié)果:
    1. i?=?1?;?o?=?java.lang.Object@a90653

    (2),Step?2中,與上面Assign.java中的Step?2類似,只是Assign.java中的整數(shù)j和對象p變成了這里的方法showMe()中的參數(shù):整數(shù)pi和對象po。并且,由于這里是參數(shù)傳遞,把Assign.java示意圖3-1-2中的“=”替換成PassParameter.java示意圖3-2-2中的“<--”,以此表示是參數(shù)傳遞。據(jù)我的理解,它們是一回事。

    示意圖3-2-2

    chart3-2-2.bmp

    Step?2在我的機器上的一次輸出結(jié)果:
    1. pi?=?1?;?po?=?java.lang.Object@a90653

    (3),Step?3和Step?4合并起來,見示意圖3-2-3同樣,與上面Assign.java中的Step?3類似。

    示意圖3-2-3

    ?chart3-2-3.bmp

    Step?3和Step?4在我的機器上的一次輸出結(jié)果:
    1. pi?=?2?;?po?=?java.lang.Object@de6ced
    2. i?=?1?;?o?=?java.lang.Object@a90653


    至此,通過上面的例子及其示意圖和說明,我得到一個結(jié)論:
    在Java方法參數(shù)傳遞操作中,針對原始類型(primitive?type),是對堆棧區(qū)的原始類型的值進行復(fù)制;針對對象,是對儲存在堆棧區(qū)的,對象的引用中所儲存的對象的地址的值進行復(fù)制。這就是術(shù)語:“堆棧區(qū)數(shù)據(jù)復(fù)制(Stack?Data?Copy,簡稱SDC)”在Java方法參數(shù)傳遞操作中的闡述。

    4,結(jié)論
    綜上所述:在Java中,不管是賦值操作還是方法的參數(shù)傳遞操作--針對原始類型(primitive?type),是對堆棧區(qū)的原始類型的值進行復(fù)制;針對對象,是對儲存在堆棧區(qū)的,對象的引用中所儲存的對象的值的地址進行復(fù)制。
    所以,據(jù)我的理解,術(shù)語:“堆棧區(qū)數(shù)據(jù)復(fù)制(Stack?Data?Copy,簡稱SDC)”能夠有助于理解在Java中進行賦值和傳遞參數(shù)的機制,能夠有助于在一定程度上消除“傳值”、“傳引用”等語義上的多變性的負面影響,可以提出來供大家交流。

    5,附注:
    由于本人水平有限,上面的一切全是基于實踐進行的帶有一些推測成分在內(nèi)的個人心得總結(jié)。我也以上面的自創(chuàng)術(shù)語去成功解釋過一些文章中的有關(guān)問題(如下面參考資料中的例程)。謹希望在能為部分Java初學(xué)者提供一個理解Java賦值和參數(shù)傳遞的手段的同時,更能得到各位朋友的斧正,以便能夠?qū)@個問題形成更加正確和準確的認識。在我提高認識的同時,我會在本文原始出處:用"堆棧區(qū)數(shù)據(jù)復(fù)制"理解Java賦值和參數(shù)傳遞機制的心得?([link]http://java.learndiary.com/disDiaryContentAction.do?goalID=2716[/link])中隨時更新此文。再次貼出我的郵件:mdx-xx@tom.com。謝謝。

    6,參考資料:

    1),Java參數(shù)傳遞方式?([link]http://www.jiehoo.com/java-pass-parameter.htm[/link])
    2),破除java神話之二:參數(shù)是傳址的?([link]http://www.javaresearch.org/article/showarticle.jsp?column=544&thread=443[/link])
    3),Java?應(yīng)用程序中的按值傳遞語義?([link]http://www.javaresearch.org/article/showarticle.jsp?column=1&thread=706[/link])
    4),我對《Java?應(yīng)用程序中的按值傳遞語義》的理解?([link]http://www.javaresearch.org/article/showarticle.jsp?column=1&thread=3156[/link])
    5),Thinking?in?Java,?3rd?Edition?in?Java?([download]http://www.mindviewinc.com/downloads/TIJ-3rd-edition4.0.zip[/download])

    ??????????????????????????????????????????????????????????????全文完
    ??????????????????????????????????????????????????????????????2006年11月22日午????

    posted @ 2007-05-19 17:30 love1563 閱讀(369) | 評論 (0)編輯 收藏

    主站蜘蛛池模板: 亚洲av福利无码无一区二区| 亚洲国产成人精品电影| 77777亚洲午夜久久多喷| 日本亚洲中午字幕乱码| 全免费a级毛片免费看| 18禁无遮挡无码网站免费| 中文字幕亚洲无线码a| 亚洲伊人久久大香线蕉影院| 又长又大又粗又硬3p免费视频| 99免费视频观看| 亚洲成a人片在线观看久| 亚洲高清免费在线观看| 免费在线人人电影网| 国产乱子精品免费视观看片| 亚洲精品无码激情AV| 亚洲免费观看在线视频| 日本一区午夜艳熟免费| 国产在线19禁免费观看| 亚洲精品国产免费| 全亚洲最新黄色特级网站| 亚洲AV无码日韩AV无码导航| 精品成人一区二区三区免费视频| 最近中文字幕2019高清免费| 亚洲精品网站在线观看不卡无广告| 亚洲精品一二三区| 97精品免费视频| 国产亚洲美女精品久久久2020| 久久亚洲国产最新网站| 99视频有精品视频免费观看| 亚洲精品一级无码鲁丝片| 亚洲熟妇无码av另类vr影视| 久久久精品2019免费观看| 久久精品国产亚洲5555| 亚洲精品乱码久久久久久蜜桃图片| 91热久久免费精品99| 国产亚洲色婷婷久久99精品91| 亚洲av成人片在线观看| 国产一卡二卡四卡免费| 亚洲人成电影亚洲人成9999网| 精品无码国产污污污免费网站国产| 国产成人无码a区在线观看视频免费|