導航:首頁 > 編程語言 > googlejava編碼規范

googlejava編碼規范

發布時間:2022-10-29 11:53:49

⑴ 除了安卓,谷歌有哪些用戶熟知的開源項目

谷歌開源項目很多的,下面我列舉幾個我用過的:

  1. Google GFlags

    GFlags是一個命令行標記的處理庫,它可以替代「getopt()」,其內置對C++的支持比如string,十分方便。


  2. Google Glog

    Glog提供強大的日誌處理工具庫,能夠滿足客戶端以及伺服器等多種應用場景,性能高資源消耗低。


  3. ProtoBuf

    ProtoBuf是一種可擴展編碼序列數據的方式,Google在幾乎所有內部RPC協議和文件格式都使用了ProtoBuf。它可以用於很多語言無縫交換數據,是一種很好的通信協議。而且被一些IDE所支持,比如NetBeans。


  4. Chromium

    Chromium是Chrome瀏覽器的開源項目,Chromium的目標是建立一個新一代的強大網路應用程序,它與Chrome有很多不同之處。Chrome以穩定為主,而Chromium以功能驅動為主。


  5. V8 引擎

    V8是Google的開源javaScript引擎,用C++寫成,用於Chrome瀏覽器之上。V8使用ECMAScript的ECMA-262第三版可運行於Windows XP、Vista、Mac OS 10.5和使用IA-32或ARM處理器的Linux。V8可獨立運行也可嵌入到任何C++程序里使用。


  6. Chromium OS

    Chromium OS是開源版的Chrome OS操作系統,提供快速、簡單而安全的網路體驗。


  7. Google Style Guide

    Google內部的C++編碼規范


  8. GO

    Google開發的新編程語言,具有強大的並發能力,適用於處理海量數據。


  9. Skia

    Skia是一個完整的2D圖形處理庫,用於繪制文字、圖形、圖片等,在Chrome和Android上都有應用。


  10. GoogleTest

    GoogleTest是一個強大適用的C++ 單元測試和性能測試庫,使用易上手。


  11. Fonts

    谷歌提供了自家的所有開源字體,如:Roboto、Open Sans等。


  12. Gson

    Gson是一個Java序列化庫,能夠提供Java對象到Json對象的完美轉換。


  13. LevelDB

    LevelDB是一個key-value資料庫,可以有序存放key和value的映射,性能高。


其他更多好的開源項目請到https://github/google查找


⑵ java HelloWorld中H和W為什麼一定要大寫

java 是運行java程序的意思,你可以在你的java安裝路徑中找到java.exe這個文件,你編寫的程序在編譯後就是能java.exe這個文件運行的,但是你要運行你寫的程序就要找到那個文件,如果你的程序文件名與你java 後寫的名不一樣,java.exe將會找不到運行文件。
再就是public類的類名就是包含這個類的文件的文件名,這是規定。當然你可以全弄成小寫的,只要統一就可以,但是java代碼規范就是類名大寫,多個單詞的話就要把每個單詞首字母大寫。

⑶ 小弟剛剛學java.還是菜鳥.我想問問我這段代碼為什麼出現"需要為class,interface或enum

推薦你看這些書
都是我總結的
希望給我加精哈!
下面是我根據多年的閱讀和實踐經驗,給您推薦的一些圖書:

第一部分: Java語言篇

1 《Java編程規范》

星級:

適合對象:初級,中級

介紹:作者James Gosling(Java之父),所以這本書我覺得你怎麼也得讀一下。對基礎講解的很不錯。

2 《Java核心技術:卷Ⅰ基礎知識》

星級:

適合對象:初級,中級

介紹:官方機構圖書,你怎麼也得有一本,這本書比較全面而且易懂。放在案旁用到的時候查一查,看一看。是學習入門必備書。

註:新手必備

3 《Java編程思想》
星級:

適合對象:初級,中級

介紹:這本書的作者就是著名的C++編程思想,對OO的理解很好,Java作為一門面向對象的語言,你學習Java最好也同時參考這本書進行入門學習。

註:新手必備

4 《Effective Java》

星級:

適合對象:初級,中級,高級

介紹:作者是Java的第2號人物,目前是Google的Java老大,是James Gosling強力推薦的一本書。

5 《Java與模式》

星級:

適合對象:中級,高級

介紹:是國人寫的難得的值得購買的一本書,當然現在也有大話設計模式之類的出現,這本書出現的比較早,是初級到中高級必讀的圖書之一。

註:沒有理解面向對象前,讀這本書沒有意義。最好是有過項目經驗再讀比較好。

6 《SCJP學習指南》 星級:

適合對象:初級,中級

介紹:官方考試必備圖書,對你檢驗自己學些Java知識情況很有幫助,這本書最適合學生閱讀,這本書理解透了,找工作面試Java題目不會有任何問題,工作多年的拿這里的題目不會做的都很多。

7 《Java數據結構和演算法

星級:

適合對象:初級,中級,高級

介紹:這本書使用Java語言描述了我們常用的數據結構,寫的非常不錯。值得一看,不過目前基本斷貨(這個就是最有利的說明)。

8《Junit Recipes中文版:程序員實用測試技巧》

星級:

適合對象:初級,中級,高級

介紹:目前敏捷盛行,這個你是不管怎樣也得看一看的。

第二部分:中級進階篇

1《Spring in action》

星級:

適合對象:初級,中級,高級

介紹:Spring框架,作為Java程序員是怎麼都必須學習的。IOC、AOP是你以後見到的軟體的基礎。另外基本上很多東西都和Spring產生聯系。

2《精通Spring 2.x:企業應用開發詳解》

星級:

適合對象:初級,中級,高級

介紹:書中提供了Spring中的目前最流行用法的實例和實用情況。

3《iBatis實踐》

星級:

適合對象:初級,中級,高級

介紹:iBatis必看參考書,in action從未讓人失望過。

4 《精通Hibernate:Java對象持久化技術詳解》

星級:

適合對象:初級,中級,高級

介紹:Hibernate必備參考書,也是國人寫的,難得的一本好書,而且作者是個MM。

5 《Struts 2.1權威指南》

星級:

適合對象:初級,中級

介紹:學習Struts2的一本國人寫的不錯的書,不過名稱顯得大了點。權威指南應該只有作者才可以這么叫。

6 《Maven實踐》

星級:

適合對象:初級,中級

介紹:從Ant到Maven現在時大勢所趨了,您怎麼也得學習一下。

7《expert one-on-one J2EE Development without EJB中文版》

星級:

適合對象:初級,中級

介紹:這個其實是Spring的基礎,作者巨牛。強力推薦,可惜是基本買不到這本書了。

8 《Tomcat權威指南》

星級:

適合對象:初級,中級

介紹:做Java Web的一般都必須學習這個,為Apache的開源項目。

9 《Head First Servlets & Jsp》

星級:

適合對象:初級,中級

介紹:Servlet和Jsp作為JavaEE程序員是必須要掌握好的,而且Head First系列從未令人失望。

10 《Head First HTML與CSS.XHTML》

星級:

適合對象:初級

介紹:介紹Web前端的不錯的入門書。

11 《HTML+CSS網頁設計與布局從入門到精通》

星級:

適合對象:初級

介紹:這本書最大的特點是帶光碟而且講解的不錯,應用實例也不錯。

12 《JavaScript寶典》

星級:

適合對象:初級,中級,高級

介紹:是學習js的必備參考工具書之一,我記得幾年前國內都沒有中文版,我都把整本書列印出來看了一下。

13 《JavaScript權威指南》

星級:

適合對象:初級,中級,高級

介紹:是學習js的必備參考工具書之一。我看我同事購買了,看起來還不錯。

14 《征服Ajax Web2.0開發技術詳解》

星級:

適合對象:初級,中級

介紹:這本書當年是CSDN送給我的,感覺還是不錯的。對學習AJAX有幫助。

15 《jQuery基礎教程》

星級:

適合對象:初級,中級,高級

介紹:從這個開始學習jQuery才是根本。不然以後遇到的很多奇怪問題不知所以然。jQuery個人感覺已經成為目前的javascript標准庫了,插件無數,大大簡化了前端工作。

16 《XML入門經典》

星級:

適合對象:初級,中級,高級

介紹:很多人覺得沒必要買XML書籍,不過我還是覺得推薦一本給你作為工具書,而且看本書可以使得你對XML方方面面有個了解。裡面不少東西還是用到的。

17 《敏捷軟體開發(原則模式與實踐)》

星級:

適合對象:中級,高級

介紹:敏捷大師的著作,您怎麼也得看看。這本書包含了UML的講解,所以我就不推薦UML的書了。

18 《重構:改善既有代碼的設計》

星級:

適合對象:中級,高級

介紹:同樣是大師的傑作,不可不看。最重要的是讓你明白軟體也是一步步改進的,不是一蹴而就的。

19 《代碼整潔之道》

星級:

適合對象:中級,高級

介紹:軟體工程的理想編碼是需要無數人編出來的代碼像一個人寫的。這本書當作規范就不錯。

注意:WebService的圖書我還真不知道給您推薦什麼,都不怎麼樣。您做個實例就明白,不過怎麼做介面才是核心。

第三部分:高級篇

1 《Java消息服務》

星級:

適合對象:初級,中級,高級

介紹:消息機制是以前分布式經常實用到的,與此相關的有Apache Active MQ進行開發,而且這本書的實例也是用的AQ。

2 《Java並非實踐》

星級:

適合對象:中級,高級

介紹:這本書也是牛人們強力推薦的,學習並發必備。

3 《Enterprise JavaBeans 3.0中文版》

星級:

適合對象:中級,高級

介紹:EJB技術在大型系統中使用,主要有銀行等金融機構。是開發分布式程序的選項之一,不過我不喜歡,其實銀行使用的也不怎麼的。結合JavaEE容器使用,開源的有JBoss,商用的有IBM和Oracle支持。

註:該類型書也有Head First系列,也很不錯。另外《J2EE應用與BEA WebLogic Server》書也很不錯。

4 《Hadoop權威指南》

星級:

適合對象:中級,高級

介紹:雲計算必備圖書。作為分布式計算的工具,Hadoop目前可以說是市場上唯一成熟的產品,而且大家也都向其看齊。而起雲計算炙手可熱,你搞明白這本書就大概明白了什麼是雲以及怎麼做雲。

附: 《Linux 鳥哥的私房菜》

星級:

適合對象:初級,中級,高級

介紹:這本書對使用和學習Linux很有用,大而全,解釋的也不錯,常用的基本都有了,一本在手,絕無顧憂。

最後,推薦一本貫徹全部軟體工程和全文的圖書《代碼大全》,只是一句話:兩屆Software Development Magzine Jolt Award震撼大獎得主。

⑷ 學習JAVA應該准備點什麼

1. JAVA學習路線 1.1 基礎語法及JAVA原理 基礎語法和JAVA原理是地基,地基不牢靠,猶如沙地上建摩天大廈,是相當危險的。學習JAVA也是如此,必須要有扎實的基礎,你才能在J2EE、J2ME領域游刃有餘。參加SCJP(SUN公司認證的JAVA程序員)考試不失為一個好方法,原因之一是為了對得起你交的1200大洋考試費,你會更努力學習,原因之二是SCJP考試能夠讓你把基礎打得很牢靠,它要求你跟JDK一樣熟悉JAVA基礎知識;但是你千萬不要認為考過了SCJP就有多了不起,就能夠獲得軟體公司的青睞,就能夠獲取高薪,這樣的想法也是很危險的。獲得"真正"的SCJP只能證明你的基礎還過得去,但離實際開發還有很長的一段路要走。 1.2 OO思想的領悟 掌握了基礎語法和JAVA程序運行原理後,我們就可以用JAVA語言實現面向對象的思想了。面向對象,是一種方法學;是獨立於語言之外的編程思想;是CBD基於組件開發的基礎;屬於強勢技術之一。當以後因工作需要轉到別的面向對象語言的時候,你會感到特別的熟悉親切,學起來像喝涼水這么簡單。 使用面向對象的思想進行開發的基本過程是: ●調查收集需求。 ●建立用例模型。 ●從用例模型中識別分析類及類與類之間的靜態動態關系,從而建立分析模型。 ●細化分析模型到設計模型。 ●用具體的技術去實現。 ●測試、部署、總結。 1.3 基本API的學習 進行軟體開發的時候,並不是什麼功能都需要我們去實現,也就是經典名言所說的"不需要重新發明輪子"。我們可以利用現成的類、組件、框架來搭建我們的應用,如SUN公司編寫好了眾多類實現一些底層功能,以及我們下載過來的JAR文件中包含的類,我們可以調用類中的方法來完成某些功能或繼承它。那麼這些類中究竟提供了哪些方法給我們使用?方法的參數個數及類型是?類的構造器需不需要參數?總不可能SUN公司的工程師打國際長途甚至飄洋過海來告訴你他編寫的類該如何使用吧。他們只能提供文檔給我們查看,JAVA DOC文檔(參考文獻4.4)就是這樣的文檔,它可以說是程序員與程序員交流的文檔。 基本API指的是實現了一些底層功能的類,通用性較強的API,如字元串處理/輸入輸出等等。我們又把它成為類庫。熟悉API的方法一是多查JAVA DOC文檔(參考文獻4.4),二是使用JBuilder/Eclipse等IDE的代碼提示功能。 1.4 特定API的學習 JAVA介入的領域很廣泛,不同的領域有不同的API,沒有人熟悉所有的API,對一般人而言只是熟悉工作中要用到的API。如果你做界面開發,那麼你需要學習Swing/AWT/SWT等API;如果你進行網路游戲開發,你需要深入了解網路API/多媒體API/2D3D等;如果你做WEB開發,就需要熟悉Servlet等API啦。總之,需要根據工作的需要或你的興趣發展方向去選擇學習特定的API。 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集成開發環境中的霸主,它是由備受程序員尊敬的Borland公司開發,在硝煙彌漫的JAVA IDE大戰中,以其快速的版本更新擊敗IBM的Visual Age for JAVA等而成就一番偉業。IBM在Visual Age for JAVA上已經無利可圖之下,乾脆將之貢獻給開源社區,成為Eclipse的前身,真所謂"柳暗花明又一村"。浴火重生的Eclipse以其開放式的插件擴展機制、免費開源獲得廣大程序員(包括幾乎所有的骨灰級程序員)的青睞,極具發展潛力。 1.6 學習軟體工程 對小型項目而言,你可能認為軟體工程沒太大的必要。隨著項目的復雜性越來越高,軟體工程的必要性才會體現出來。參見"軟體開發學習路線"小節。 2. 學習要點 確立的學習路線之後,我們還需要總結一下JAVA的學習要點,這些要點在前文多多少少提到過,只是筆者覺得這些地方特別要注意才對它們進行匯總,不要嫌我婆婆媽媽啊。 2.1勤查API文檔 當程序員編寫好某些類,覺得很有成就感,想把它貢獻給各位苦難的同行。這時候你要使用"javadoc"工具(包含在JDK中)生成標準的JAVA DOC文檔,供同行使用。J2SE/J2EE/J2ME的DOC文檔是程序員與程序員交流的工具,幾乎人手一份,除了菜鳥之外。J2SE DOC文檔官方下載地址: http://java.sun.com/j2se/1.5.0/download.jsp ,你可以到google搜索CHM版本下載。也可以在線查看: http://java.sun.com/j2se/1.5.0/docs/api/index.html 。 對待DOC文檔要像毛主席語錄,早上起床念一遍,吃飯睡覺前念一遍。 當需要某項功能的時候,你應該先查相應的DOC文檔看看有沒有現成的實現,有的話就不必勞神費心了直接用就可以了,找不到的時候才考慮自己實現。使用步驟一般如下: ●找特定的包,包一般根據功能組織。 ●找需要使用類,類命名規范的話我們由類的名字可猜出一二。 ●選擇構造器,大多數使用類的方式是創建對象。 ●選擇你需要的方法。 2.2 查書/google->寫代碼測試->查看源代碼->請教別人 當我們遇到問題的時候該如何解決? 這時候不要急著問別人,太簡單的問題,沒經過思考的問題,別人會因此而瞧不起你。可以先找找書,到google中搜一下看看,絕大部分問題基本就解決了。而像"某些類/方法如何使用的問題",DOC文檔就是答案。對某些知識點有疑惑是,寫代碼測試一下,會給你留下深刻的印象。而有的問題,你可能需要直接看API的源代碼驗證你的想法。萬不得已才去請教別人。 2.3學習開源軟體的設計思想 JAVA領域有許多源代碼開放的工具、組件、框架,JUnit、ANT、Tomcat、Struts、Spring、Jive論壇、PetStore寵物店等等多如牛毛。這些可是前輩給我們留下的瑰寶呀。入寶山而空手歸,你心甘嗎?對這些工具、框架進行分析,領會其中的設計思想,有朝一日說不定你也能寫一個XXX框架什麼的,風光一把。分析開源軟體其實是你提高技術、提高實戰能力的便捷方法。 2.4 規范的重要性 沒有規矩,不成方圓。這里的規范有兩層含義。第一層含義是技術規范,多到 http://www.jcp.org 下載JSRXXX規范,多讀規范,這是最權威准確最新的教材。第二層含義是編程規范,如果你使用了大量的獨特演算法,富有個性的變數及方法的命名方式;同時,沒給程序作注釋,以顯示你的編程功底是多麼的深厚。這樣的代碼別人看起來像天書,要理解談何容易,更不用說維護了,必然會被無情地掃入垃圾堆。JAVA編碼規范到此查看或下載 http://java.sun.com/docs/codeconv/ ,中文的也有,啊,還要問我在哪,請參考3.2.2節。 2.5 不局限於JAVA 很不幸,很幸運,要學習的東西還有很多。不幸的是因為要學的東西太多且多變,沒時間陪老婆家人或女朋友,導致身心疲憊,嚴重者甚至導致抑鬱症。幸運的是別人要搶你飯碗絕非易事,他們或她們需要付出很多才能達成心願。 JAVA不要孤立地去學習,需要綜合學習數據結構、OOP、軟體工程、UML、網路編程、資料庫技術等知識,用橫向縱

⑸ java學習心得

學習Java的第一步是安裝好JDK,寫一個Hello World, 其實JDK的學習沒有那麼簡單,關於JDK有兩個問題是很容易一直困擾 Java程序員的地方:一個是CLASSPATH的問題,其實從原理上來說,是要搞清楚JRE的ClassLoader是如何載入Class的;另一個問題是package和import問題,如何來尋找類的路徑問題。把這兩個問題摸索清楚了,就掃除了學習Java和使用JDK的最大障礙。推薦看一下王森的《Java深度歷險》,對這兩個問題進行了深入的探討。

第二步是學習Java的語法。Java的語法是類C++的,基本上主流的編程語言不是類C,就是類C++的,沒有什麼新東西,所以語法的學習,大概就是半天的時間足夠了。唯一需要注意的是有幾個不容易搞清楚的關鍵字的用法,public,protected,private,static,什麼時候用,為什麼要用,怎麼用,這可能需要有人來指點一下,我當初是完全自己琢磨出來的,花了很久的時間。不過後來我看到《Thinking in Java》這本書上面是講了這些概念的。

第三步是學習Java的面向對象的編程語言的特性的地方。比如繼承,構造器,抽象類,介面,方法的多態,重載,覆蓋,Java的異常處理機制。對於一個沒有面向對象語言背景的人來說,我覺得這個過程需要花很長很長時間,因為學習Java之前沒有C++的經驗,只有C的經驗,我是大概花了一個月左右吧,才徹底把這些概念都搞清楚,把書上面的例子反復的揣摩,修改,嘗試,把那幾章內容反復的看過來,看過去,看了不下5遍,才徹底領悟了。不過我想如果有 C++經驗的話,應該一兩天時間足夠了。那麼在這個過程中,可以多看看《Thinking in Java》這本書,對面向對象的講解非常透徹。可惜的是我學習的時候,並沒有看到這本書,所以自己花了大量的時間,通過自己的嘗試和揣摩來學會的。

第四步就是開始熟悉Java的類庫。Java的基礎類庫其實就是JDK安裝目錄下面jre\lib\rt.jar這個包。學習基礎類庫就是學習rt.jar。基礎類庫裡面的類非常非常多。據說有3000多個,但是真正對於我們來說最核心的只有4個,分別是
java.lang.*;
java.io.*;
java.util.*;
java.sql.*;

這四個包的學習,每個包的學習都可以寫成一本厚厚的教材,而O'reilly也確實是這樣做的。我覺得如果時間比較緊,是不可能通過讀四本書來學習。我覺得比較好的學習方法是這樣的:
首先要通讀整個package的框架,了解整個package的class,interface,exception的構成,最好是能夠找到介紹整個包框架的文章。這些專門介紹包的書籍的前幾章應該就是這些總體的框架內容介紹。

對包整體框架的把握並不是要熟悉每個類的用法,記住它有哪些屬性,方法。想記也記不住的。而是要知道包有哪些方面的類構成的,這些類的用途是什麼,最核心的幾個類分別是完成什麼功能的。我在給人培訓的時候一般是一次課講一個包,所以不可能詳細的介紹每個類的用法,但是我反復強調,我給你們講這些包的不是要告訴你們類的方法是怎麼調用的,也不要求你們記住類的方法調用,而是要你們了解,Java給我們提供了哪些類,每個類是用在什麼場合,當我遇到問題的時候,我知道哪個類,或者哪幾個類的組合可以解決我的問題,That'all!,當我們具體寫程序的時候,只要你知道該用哪個類來完成你的工作就足夠了。編碼的時候,具體的方法調用,是邊寫代碼,邊查Documentation,所有的東西都在Documentation裡面,不要求你一定記住,實際你也記不住3000多個類的總共將近10萬個方法調用。所以對每個包的總體框架的把握就變得極為重要。

第五步,通過上面的學習,如果學的比較扎實的話,就打好了Java的基礎了,剩下要做的工作是掃清Documentation裡面除了上面4個包之外的其他一些比較有用處的類。相信進展到這一步,Java的自學能力已經被培養出來了,可以到了直接學習Documentation的水平了。除了要做 GUI編程之外,JDK裡面其他會有用處的包是這些:
java.text.*;
java.net.*;
javax.naming.*;
這些包裡面真正用的比較多的類其實很少,只有幾個,所以不需要花很多時間。

第六步,Java Web 編程
Web編程的核心是HTTP協議,HTTP協議和Java無關,如果不熟悉HTTP協議的話,雖然也可以學好Servlet/JSP編程,但是達不到舉一反三,一通百通的境界。所以HTTP協議的學習是必備的。如果熟悉了HTTP協議的話,又有了Java編程的良好的基礎,學習 Servlet/JSP簡直易如反掌,我學習Servlet/JSP就用了不到一周的時間,然後就開始用JSP來做項目了。

在Servlet/JSP的學習中,重頭仍然是Servlet Documentation。Servlet API最常用的類很少,花比較少的時間就可以掌握了。把這些類都看一遍,多寫幾個例子試試。Servlet/JSP編程本質就是在反復調用這些類來通過HTTP協議在Web Server 和Brower之間交談。另外對JSP,還需要熟悉幾個常用JSP的標記,具體的寫法記不住的話,臨時查就是了。

此外Java Web編程學習的重點要放在Web Application的設計模式上,如何進行業務邏輯的分析,並且進行合理的設計,按照 MVC設計模式的要求,運用Servlet和JSP分別完成不同的邏輯層,掌握如何在Servlet和JSP之間進行流程的控制和數據的共享,以及 Web Application應該如何配置和部署。

第七步,J2EE編程
以上的學習過程如果是比較順利的話,進行到這一步,難度又陡然提高。因為上面的知識內容都是只涉及一個方面,而像EJB,JMS,JTA等核心的J2EE規范往往是幾種Java技術的綜合運用的結晶,所以掌握起來難度比較大。

首先一定要學習好JNDI,JNDI是App Server定位伺服器資源(EJB組件,Datasouce,JMS)查找方法,如果對JNDI 不熟悉的話,EJB,JMS這些東西幾乎學不下去。JNDI其實就是javax.naming.*這個包,運用起來很簡單。難點在於伺服器資源文件的配置。對於伺服器資源文件的配置,就需要看看專門的文檔規范了,比如web.xml的寫法,ejb-jar.xml的寫法等等。針對每種不同的 App Server,還有自己的服務資源配置文件,也是需要熟悉的。

然後可以學習JTA,主要是要理解JTA對於事務的控制的方法,以及該在什麼場合使用JTA。這里可以簡單的舉個例子,我們知道一般情況可以對於一個資料庫連接進行事務控制(conn.setAutoCommit(false),....,conn.commit()),做為一個原子操作,但是假設我的業務需求是要把對兩個不同資料庫的操作做為一個原子操作,你能做的到嗎?這時候只能用JTA了。假設操作過程是先往A資料庫插一條記錄,然後刪除B 資料庫另一個記錄,我們自己寫代碼是控制不了把整個操作做為一個原子操作的。用JTA的話,由App Server來完成控制。

在學習EJB之前要學習對象序列化和RMI,RMI是EJB的基礎。接著學習JMS和EJB,對於EJB來說,最關鍵是要理解EJB是如何通過RMI來實現對遠端對象的調用的,以及在什麼情況下要用到EJB。

在學習完EJB,JMS這些東西之後,你可能會意識到要急不可待學習兩個領域的知識,一個是UML,另一個是Design Pattern。 Java企業軟體的設計非常重視框架(Framework)的設計,一個好的軟體框架是軟體開發成功的必要條件。在這個時候,應該開始把學習的重點放在設計模式和框架的學習上,通過學習和實際的編程經驗來掌握EJB的設計模式和J2EE的核心模式。

J2EE規范裡面,除了EJB,JMS,JTA,Servlet/JSP,JDBC之外還有很多很多的企業技術,這里不一一進行介紹了。

另外還有一個最新領域Web Services。Web Services也完全沒有任何新東西,它像是一種黏合劑,可以把不同的服務統一起來提供一個統一的調用介面,作為使用者來說,我只要獲得服務提供者給我的WSDL(對服務的描述),就夠了,我完全不知道伺服器提供者提供的服務究竟是EJB 組件,還是.Net組件,還是什麼CORBA組件,還是其他的什麼實現,我也不需要知道。Web Services最偉大的地方就在於通過統一的服務提供方式和調用方式,實現了整個Internet服務的共享,是一個非常令人激動的技術領域。Web Services好像目前還沒有什麼很好的書籍,但是可以通過在網路上面查資料的方式來學習。

⑹ 為什麼很多程序員不用switch,而是大量的if……else if

我個人覺得switch其實非常多餘。

1 大部分場景,都是2到3個可能分支,用個if else就可以了,除非有4 個以上分支,太多else顯得不好看,才考慮用switch.

2 switch限制多。switch必須是常量變數。if後面可以寫任意表達式。

3用法復雜,case後面要麼break,要麼return,要是不寫,居然還會繼續執行剩下的分支,對於新手來說分分鍾掉坑。

4 寫法上其實也不比if else優雅簡潔,switch xxx case xxxx ….

所以,switch徒增復雜性,真的不怎麼實用。

如果有10000種switch的可能性,有1000000個值需要被處理,怕是你們說的這些個switch的好處就完全消失了,預期平均每次要比較5000次,1000000個值,總計要比較50億次,不知道你們的CPU是啥主頻能扛得住這個計算量,針對這種情況的終極武器還是hash,根據不同的語言,hash的value可以是匿名函數,可以是介面的不同實現,用hash來快速確定處理演算法,而不是switch

答案:主要因為switch不適合業務系統的實際復雜需求,業務不斷的變更迭代,一更改需求,條件的復雜度高了,switch無力處理。

switch優點

那麼什麼時候適合switch,它的場景是:基於單一變數的值(如枚舉),這樣的可讀性比if條件更清晰。

switch缺點

從上面的場景來看,實在太局限,我來簡單說一下它的一些缺點吧:

1. 現實的業務場景很復雜,條件不單一,一旦需求變更,維護代碼相當崩潰。

2. switch經常忘記寫break,估計很多人一不小心就忘記寫了。如果你看過google的代碼規范,你會發現,Google對switch的要求非常多。

switch的封裝才更靈活


其實switch有人還在用也有一部分是 歷史 原因,但是隨著 科技 的發展,原有的設計以及落後了。

有些編程語言,如Python都沒有switch這種語法。當然也有部分新語言Golang和Kotlin還是繼承下來,但是又把switch包裝了一下,去掉了令人誤會的語法,這才讓switch變得靈活起來了。 如果不封裝,很難用。

IF語句的好處

通過上面描述的缺點也就是if語句更靈活的地方,根據業務進行邏輯條件編寫,可維護性高。同時只要寫的代碼質量高,可讀性也就會更高。

建議

現實的業務實際是很復雜的,我也不建議一定要用大量的if……else if,而是應該盡早返回來減少嵌套,這樣增加了可讀性以及降低維護的成本。

從C/ C++來看,當分支較多且switch要比較的值是連續的話,執行速度遠遠遠遠快於if,因為switch是直接跳到目標代碼執行的,而if則需要執行很多條語句,慢的不是一點點,一般編譯器會根據分支數量和比較的值是否連續生成不同匯編代碼,如果編譯器判定不能提升速度的話,switch生成的匯編代碼和if是一模一樣的沒有任何區別。

至於很多人不用switch我覺得可能是:

1.為了方便寫代碼,思維習慣隨手就用if寫了;

2.可能根本就不懂為什麼要用switch吧。

作為程序員來說,我更喜歡switch的結構,更直觀更容易找到相應的代碼塊。不過為什麼很多程序員不用Switch,而是使用大量的if...else if的結構,甚至像Python已經不支持原生Switch語法了?

這個原因很簡單,因為switch語法結構最後編譯還是通過if...else if來完成代碼的,所以從效率角度來說和if...else if一樣的。但是switch對比條件比較單一,絕大多數支持switch的編程語言都支持等於比較,也就是說變數只能等於case中的條件才會執行代碼塊。但是現實情況中,對比條件絕大多數比單一等於運算要復雜得多,因此很多程序員就直接使用if...else if。但是if...else if的結構,後期維護起來會比較不清晰,畢竟沒有Case...Break那麼直觀。但是添加一些註解應該還是能解決這個問題的。

所以,我現在能使用Switch的時候還是會使用switch,畢竟後期代碼維護起來方便點。不過更多時候還是用if...else if。

送大家以下java學習資料







我曾經接手過一份代碼,遇到過一個三十幾個if else套if else的模塊。

心理罵罵咧咧誰他喵寫的這玩意,然後開始review 歷史 。

大致情況是這樣的:第一個程序員寫下這段代碼時,只有兩個if else;後來開始逐漸加需求,先是一個、兩個,隨後量變引起質變,於是邏輯分支快速擴張。

這個時候已經沒有人願意去重構成switch或是其他什麼設計模式了,畢竟復雜度擺在那裡,萬一崩了還得背鍋。

三四個程序員接手這段代碼之後,就變成我現在這種局面了。

第一個程序員絕對沒有料到這么簡單的邏輯在之後會變成這么復雜的模塊,甚至在增添第一第二條else時,也只是很隨意的加上。

所以我覺得,這個鍋絕對是是甲方的,讓他娘的隨便改需求。

這么一想心裡就好受多了,編程嘛,最重要的是要看的開。

於是我又增加了兩條else,測試,提交,下班。

有時候真的不是我們不想寫好代碼,是不能寫好代碼。寫著寫著需求砍了、需求變了,什麼設計模式都不頂用,最終還是怎樣快怎樣方便怎樣來,因為根本沒人知道這段代碼還能不能活的過下一段需求變動。

有的人肯定要說怎麼不訂合同。合同肯定是有的,但是明明白紙黑字寫的合同,該改還是得改,畢竟你要是不同意甲方那些「微小的變動」,以後還做不做了?!金主真能去得罪?

還是要學會得過且過,跟什麼過不去也不能跟自己過不去,糟糕的代碼忍一忍就完了:代碼能跑、頭發不少,對我們這些打工的人而言比什麼都重要。

現實工作絕不是課本中的理想狀態,會有無數的突發情況在等著你。你定義了半天觀察者、備忘錄,第二天這部分需求被砍了;寫了半天介面,抽象類,忽然下午告訴你要加個十萬八千里打不著邊的啥東西,於是又開始加適配器,等你加完了告訴你又砍了。甚至有次半夜被喊起來改代碼,等改完了發現需求被撤回了,氣的我直接請了兩天假調整心情。

設計模式和大的框架絕對是一個項目中非常重要的東西,但不是絕對重要的;一個好的PM團隊,在某種意義上,才真正決定了這個項目的代碼質量。[1]



請用5秒鍾的時間查看下面的代碼是否存在bug。

OK,熟練的程序猿應該已經發現Bug所在了,在第8行和第10行下面我沒有添加關鍵字break; 這就導致這段代碼的行為邏輯與我的設計初衷不符了。


缺點一. 語法正確,邏輯錯誤


這就是第一個理由為什麼程序猿很少使用switch來做條件判斷,對於新手來說忘記寫break實在是再普通不過了,就算是老猿忘記寫也是時有發生的事情,而這個語法錯誤在諸多的語法檢查器上沒有辦法檢查出來的,因為從語法角度來說是正確的!可是代碼的處理邏輯卻是錯誤的!用if來重寫這段代碼的話,就不會發生這種錯誤。

上面的代碼為了保證正確我添加了else做一個邏輯上的保證,其實如果不寫else,這段代碼也不會發生邏輯錯誤,而且一旦我忘記寫花括弧的時候,語法編譯器是會提示我添加的,甚至可以使用eslint這種的工具強制我使用花括弧,這樣就不會犯語法錯誤了,一旦出現bug,那麼肯定是我邏輯上的問題了。


缺點二 .死板的語法


switch盡管對於break很寬容,但是對判斷條件很嚴苛,case後面只能跟常量,如果你用C編寫的話,甚至只能用int類型作為判斷條件。對於我們這么瀟灑自如的程序猿來說,這種限制實在是太麻煩了,用if的話,別說是常量了,我用函數都可以,真正做到方便快捷。


缺點三 .需要子函數來處理分支


這個缺點跟缺點一有關,為了防止漏寫break,因此建議把分支處理方法獨立成一個子函數來處理,這樣在閱讀代碼的時候就會減少忘記寫break帶來的bug,那麼用if來寫的話,我想怎麼寫就怎麼寫,非常隨意自由,但是這也導致了代碼的可讀性大大降低。


switch的優點


既然switch有這么嚴重的缺點,那怎麼在所有語言中依然會存在呢?那就說下switch的優點吧,它的優點也剛好是它的缺點。


在很久很久以前,那時候的電腦性能還不如一台小霸學習機的時候,聰明的計算機科學家為了提高計算機的處理速度,將一些邏輯分支處理方法簡化了一下,把一些需要做邏輯判斷的操作給固定死,然後只要查表一樣一個一個對一下就能做出相應的反應了。


比如說a=0的判斷,switch和if在cpu上面的處理方式是不一樣的,switch是在編譯階段將子函數的地址和判斷條件綁定了,只要直接將a的直接映射到子函數地址去執行就可以了,但是if處理起來就不一樣了。


它首先要把a的值放到CPU的寄存器中,然後要把比較的值放到CPU的另一個寄存器中,然後做減法,然後根據計算結果跳轉到子函數去執行,這樣一來就要多出3步的操作了,如果邏輯判斷多的話,那麼將會比switch多處許多倍的操作,盡管寄存器操作的速度很快,但是對於當時的學習機來說,這點速度根本不夠用啊。


那還有一個問題,為什麼要使用break來做一個判斷結束呢?這不是很容易造成語法錯誤了?那就要說到子函數的問題上了。


在早起的電腦代碼中是沒有子函數的概念的,那時候都是用goto隨意跳轉的,你想去第10行代碼,很簡單goto 10就可以了。這種編程思維在C的早期階段還是一直受到影響的,因此早期的C也沒有子函數,都是一堆邏輯處理混亂在一起,goto滿天飛,所以那時候你沒有一個最強大腦是寫不了程序的。那為了告訴程序我這里條件判斷處理結束,就添加了break作為終止符號。後來慢慢的有了子程序,有了更好的編程規范,才一步一步的將寫代碼淪落到體力勞動。


後來發展的新語言為了標榜自己的血統,多少都要參考下C,然後就把switch這種詭異的語法也繼承下來了。但是也不是所有的語言都照搬,比如Google發明的新語言golang和kotlin就又把switch包裝了一下,去掉了令人誤會的語法,又讓switch變得靈活起來了,對了,在代碼重構的時候,還是用switch把,這樣看起來的確代碼更簡潔哦![2]


switch只能用於簡單判斷,不支持表達式。

沒有if else 使用方便。

不是盡量別用,而是不合適沒法用,合適得時候該用還是用。

比如說,變數i要求大於10,小於20,一條if(i>10&&i

⑺ 初學java什麼書好

Java小白自學書籍推薦:
1、《Head First Java, 2nd Edition(中文版)》
這本書不僅內容豐富、有趣且通俗易懂,並且涵蓋了所有 Java 相關的基礎知識。如果你是 Java 初學者,這本書正適合你。
2、《Java 核心技術(卷1、2)》
寫作風格相比 Head First 趣味性來說更顯傳統,所涵蓋的內容包括 Java 基礎知識及高級應用,是對於入門來說的另一種選擇。
3、《Java 編程思想(第4版)》
必讀之作,不僅涵蓋所有 Java 基礎,對於編程思想層面的提升也有很好的幫助。
4、《Head First 設計模式》
延續 Head First 一貫生動趣味的寫作風格,介紹 23 個設計模式,推薦作為設計模式入門級書。
5、《Effective Java 中文版(第2版)》
Java 編程中78條極具實用價值的經驗規則,這些經驗規則涵蓋了大多數開發人員每天所面臨的問題的解決方案。
6、《重構:改善既有代碼的設計》
出自於 Martin Fowler 的大作,寫出優秀代碼的必經之路。
7、《Java 虛擬機規范(Java SE 7版)》
作者是 Java 編程語言的主要貢獻者之一。如果你想系統、全面、深入的學習 JVM,絕對不能錯過這本書。

⑻ 我最近下了韓順平的java學習視頻,其中有五個大內容,我應該以哪個順序來學習呢

入門(1-2 個月)

目標:參與簡單的項目開發。

技能:

熟練使用一種 IDE。Intellij IDEA或者 Eclipse 都可以,推薦使用前者。至少熟悉常用的快捷鍵,會 debug(包括遠程 debug)項目。

熟悉一種編輯器。比如 Vim/Emacs/Sublime Text,至少學會搜索/替換/代碼補全。

掌握 Java。經典的《Java 核心技術:卷1 基礎知識》(或者《Java基礎教程301集》《Java 編程思想》)必看,跳過其中的圖形和 applet 章節。習慣查閱 Java API Doc。為了保證代碼的質量,《Effective Java》、《Clean Code》和《重構》也需要至少通讀一遍。

熟悉 Linux 開發環境和 bash shell。Linux 是我們的開發和部署環境,你最好盡快熟練它。Linux 的基本使用可以通過《鳥哥的Linux私房菜:基礎學習篇(第三版)》學習,開發 bash shell 腳本可以參考《Linux Shell腳本攻略》。

掌握開發工具

掌握 JDK 以外的常用類庫和工具包。JDK 原生 API 在很多場景下使用並不方便。你需要掌握社區貢獻的優秀類庫和工具包,比如 apache commons、google guava 等,具體可以翻閱 服務端技術選型 的Utility 篇。

掌握 Web 開發框架。我們使用 Spring(或Rose) + Ibatis(或Jade) 開發 web 服務,你需要熟練掌握它們。

學習代碼規范。我們大致上遵循 oracle 的 Java 語言編碼規范,你可以先閱讀並熟悉它。Code Formatting 文件在 git@xxx/coding-standard.git,在編寫代碼之前,請把它導入到 IDE 中。另外,確認 IDE 已經安裝 Findbugs 和 CheckStyle 插件。

熟悉開發流程。我們的開發流程大致如下:功能開發->單元測試->功能測試->Code Review->集成測試->發布。確保你熟悉其中的每個環節。

其他。需要熟練使用版本控制工具 Git(閱讀:《Git 權威指南》),以及項目構建工具 Maven(閱讀:《Maven 實戰》)。另外,在這個階段可以嘗試 TDD 開發。

⑼ java工程師需要掌握哪些知識

1、語法:必須比較熟悉,在寫代碼的時候,IDE(Integrated Development Environment,集成開發環境)的編輯器對某一行報錯應該能夠根據報錯信息知道是什麼樣的語法錯誤,並且知道任何修正。

2、命令:必須熟悉JDK(Java Development Kit,Java開發工具箱——JDK 是整個Java的核心,包括了Java運行環境,Java工具和Java基礎的類庫。JDK是學好Java的第一步。)帶的一些常用命令及其常用選項,命令至少需要熟悉:appletviewer、HtmlConverter、jar、 java、javac、javadoc、javap、javaw、native2ascii、serialver,如果這些命令你沒有全部使用過,那麼你對java實際上還很不了解。

3、工具:必須至少熟練使用一種IDE的開發工具,例如Eclipse、Netbeans、JBuilder、Jdeveloper、IDEA、JCreator或者Workshop,包括進行工程管理、常用選項的設置、插件的安裝配置以及進行調試。

4、API(Application Programming Interface,應用程序編程介面):Java的核心API是非常龐大的,但是有一些內容筆者認為是必須熟悉的,否則不可能熟練的運用Java,包括:
◆java.lang包下的80%以上的類的功能的靈活運用。
◆java.util包下的80%以上的類的靈活運用,特別是集合類體系、規則表達式、zip、以及時間、隨機數、屬性、資源和Timer.
◆java.io包下的60%以上的類的使用,理解IO體系的基於管道模型的設計思路以及常用IO類的特性和使用場合。
◆java.math包下的100%的內容。
◆java.net包下的60%以上的內容,對各個類的功能比較熟悉。
◆java.text包下的60%以上的內容,特別是各種格式化類。
◆熟練運用JDBC. 80%、java.security包下40%以上的內容,如果對於安全沒有接觸的話根本就不可能掌握java.
◆AWT的基本內容,包括各種組件事件、監聽器、布局管理器、常用組件、列印。
◆Swing的基本內容,和AWT的要求類似。
◆XML處理,熟悉SAX、DOM以及JDOM的優缺點並且能夠使用其中的一種完成XML的解析及內容處理。

5、測試:Junit測試是程序員測試,即所謂白盒測試。一位合格的Java開發工程師必須熟悉使用junit編寫測試用例完成代碼的自動測試。

6、管理:必須熟悉使用Ant(中文譯為螞蟻,是一種基於Java的build工具。)完成工程管理的常用任務,例如工程編譯、生成javadoc、生成jar、版本控制、自動測試。

7、排錯:應該可以根據異常信息比較快速的定位問題的原因和大致位置。

8、思想:必須掌握OOP(Object Oriented Programming,面向對象編程)的主要要求,這樣使用Java開發的系統才能是真正的Java系統。

9、規范:編寫的代碼必須符合流行的編碼規范,例如類名首字母大寫,成員和方法名首字母小寫,方法名的第一個單詞一般是動詞,包名全部小寫等,這樣程序的可讀性才比較好。

10、博學:掌握J2EE 、Oracle 、WebLogic、Jboss、Spring、Struts、Hibernate 等流行技術,掌握軟體架構設計思想、搜索引擎優化、緩存系統設計、網站負載均衡、系統性能調優等實用技術。

⑽ 如何優雅地為程序中的變數和函數命名

簡言之,根據語意來選擇詞彙,別無它法……然而,有時我們會不知用什麼詞彙更合適。
當你想到某個抽象的東西,你更傾向於最先想到的詞語,除非你故意不這樣,這些詞也會搶著出現,直到模糊或改變你的想法。
當你想到一個具體的對象,你覺得詞窮,然後你想描述的已經看到了,然後你繼續尋找更適合它的詞。
哈哈,命名竟成了編程中最難的事~
Martin Fowler曾經在一篇文章中曾經引用過Phil Karlton的話:
There are only two hard things in Computer Science: cache invalidation
and naming things.
他說這句話在很長的一段時間內都是他最喜歡的話。可見命名對於廣大的程序員來說的確是個大問題。
對於我們中國人來說,問題可能出在兩個方面:
– 自打學編程開始就沒被教育過要重視命名。
這可以在譚浩強的《C語言入門》一書中可見一斑。《C語言入門》可以說是很多程序員在大學時學習的第一門編程語言使用的教材。而本書通篇都是各種
a,b,c,x,y,z 的命名方式。這種poor naming的方式被廣大程序員紛紛效仿,導致如今在很多項目代碼中隨處可見。
– 命名需要一定的英文功底,而國內程序員的英文水平參差不齊。
很多程序員被教育後開始逐漸重視命名,但是受限於英文水平,不知道使用什麼合適的英文詞彙來命名。有的甚至直接把中文直譯為英文的方式命名,或者直接用拼音來命名,反而得不償失。
命名的重要性我想不需要過於強調。如今的軟體開發早已不是求伯君那種單槍匹馬的時代。你寫下的每一行代碼都會在不久的以後被團隊的其他人甚至你自己多次查看。如果是個開源項目,那麼更會被全球各地的人查看源代碼。所以代碼的可讀性就變得尤為重要。如果讀者能夠輕松讀出你的代碼的意圖,那麼就說明你的命名功底相當扎實。
比如在一個管理系統中,你使用這樣的代碼: a = b * c
很容易讓人摸不著頭腦,雖然程序能夠正常運作,但恐怕沒人敢輕易修改這行他們不了解的代碼。而如果修改成為這樣: weeklypay =
hours_worked * pay_rate; 那恐怕極少有人不懂這行代碼的意圖。
糟糕的命名也會導致大量無謂的注釋,這是一個很容易跳進去的陷阱。下一段代碼怕別人不明白你的意圖,那麼就加上注釋。這貌似是一個很精妙的想法,實際上卻南轅北轍。比如以下的注釋:
int d; // elapsed time in days
貌似很容易讓人讀懂,但是問題還是很多。首先注釋不能跟著所有的引用,在定義處了解了d的含義,繼續往下看的話卻很容易忘記;其次代碼更新了,很可能會忘記修改注釋,反而給把讀者帶入歧途。
與其用這樣的注釋,還不如直接重命名: int elapsedTimeInDays; 這樣清晰易懂,還不用維護注釋,何樂而不為?
那麼如何著手來提高的自己的命名技巧那?
首先尋找一份公認的代碼規范,並嚴格按照這樣的標准執行。比如google開源了自己內部使用的語言編碼規范,我們可以直接拿來使用。比如請看Google
Java的style guide,相當詳實。除此之外還有C++等。這里收集了Google對各種語言的編碼規范,非常具有參考價值。
標準的代碼規范中的每一條都是有勝出的理由,值得我們遵從。但某些命名問題不一定只有一種最好的解決方式,這就需要團隊自己建立起約定。比如對於Java單元測試類的命名方式,不同的團隊可能不一樣。比如有的團隊喜歡以should開頭,有的喜歡test開頭,有的喜歡駱駝命名法,有些喜歡下劃線命名法,每種方式有各自的利弊,沒有一種能完全脫穎而出,所以需要團隊自行制定。一旦確定使用某一種,那麼一定要保持一致。
某些命名規范其實是可以進行自動化檢查的,比如在Java應用的構建過程中可以引用checkStyle這款插件,對命名進行一些基本的檢查,比如方法名、變數名是否遵循了一定模式等。這樣在一定程度上可以強制大家遵守某些約定。自己以前曾經寫過一篇文章,請參見這里。
最後要在團隊中建立起code review的機制,通過code
review來相互監督糾正命名問題,並且這樣更容易達成一致的命名約定,方便協作開發。code
review可以採取非正式會議評審的方式。最簡單的方式就是每天找個固定時間大家一起聚在一個顯示器前review每個人的代碼,現場提出問題,當事人記錄下來會後更改。這種方式非常高效。另外有的團隊在嵌入代碼時可能會引入一些代碼評審機制,比如pull
request, cherry pick等。這種review方式比較重量級,反饋周期也較長,好處是可以保證最終遷入的代碼是沒有問題的。
很多語言和框架為了更加可讀,都把命名玩出花來了。比如JavaScript生態圈中重要的單元測試工具Jasmine把測試函數以it命名,這樣可以與參數連接起來成為一種表意的自然語言:
如何優雅地為程序中的變數和函數命名?
- 不同的代碼段採用不同的命名長度。通常來說,循環計數器(loop
counters)採用1位的單字元來命名,循環判斷變數(condition/loop
variables)採用1個單詞來命名,方法採用1-2個單詞命名,類採用2-3個單詞命名,全局變數採用3-4個單詞命名。
- 對變數採用具體的命名(specific names)方式,」value」, 「equals」,
「data」在任何情況下都不是一種有效的命名方式。
- 採用有意義的命名(meaningful names)。變數的名字必須准確反映它的含義和內容。
- 不要用 o_, obj_, m_ 等前綴命名。變數不需要前綴標簽來表示自己是一個變數。
- 遵循公司的變數命名規則,在項目中堅持使用同一種變數命名方式。例如txtUserName, lblUserName,
cmbSchoolType等,否則會對可讀性造成影響,而且會令查找/替換工具(find/replace tools)不可用。
- 遵循當前語言的變數命名規則,不要不統一(inconsistently)地使用大/小寫字母。例如:userName, UserName,
USER_NAME, m_userName, username, …。
以Java為例:
* 類名使用駝峰命名法(Camel Case):VelocityResponseWriter
* 包名使用小寫:com.company.project.ui
* 變數使用首字母小寫的駝峰命名法(Mixed Case):studentName
* 常量使用大寫:MAX_PARAMETER_COUNT = 100
* 枚舉類(enum class)採用駝峰命名法,枚舉值(enum values)採用大寫。
* 除了常量和枚舉值以外,不要使用下劃線』_』
- 在同一個類不同的場景(contexts)中不要復用變數名。例如在方法、初始化方法和類中。這樣做可以提高可讀性和可維護性。
- 不要對不同使用目的的變數使用同一個變數名,而是賦予它們不同的名字。這同樣對保持可讀性和可維護性很重要。
- 變數名不要使用非ASCII字元(non-ASCII chars)。這樣做可能會在跨平台使用時產生問題。
-
不要使用過長的變數名(例如50個字元)。過長的變數名會導致代碼醜陋(ugly)和難以閱讀(hard-to-read),還可能因為字元限制在某些編譯器上存在兼容性問題。
- 僅使用一種自然語言(natural language)來命名變數。例如,同時使用德語和英語來命名變數會導致(理解)不一致和降低可讀性。
- 使用有意義的方法名。方法名必須准確表達該方法的行為,在多數情況下以動詞(verb)開頭。(例如:createPasswordHash)
- 遵循公司的方法命名規則,在項目中堅持使用同一種方法命名方式。例如 getTxtUserName(), getLblUserName(),
isStudentApproved(),否則會對可讀性造成影響,而且會令查找/替換工具不可用。
- 遵循當前語言的變數命名規則,不要不統一地使用大/小寫字母。例如:getUserName, GetUserName, getusername,
…。
以Java為例:
* 方法使用首字母小寫的駝峰命名法:getStudentSchoolType
* 方法參數使用首字母小寫的駝峰命名法:setSchoolName(String schoolName)
- 使用有意義的方法參數命名,這樣做可以在沒有文檔的情況下盡量做到「自解釋(documentate itself)」
總之,命名問題只是整個編碼規范中的一小部分,但是起的作用舉足輕重,它是判斷一個程序員是否專業的必要標准。

閱讀全文

與googlejava編碼規范相關的資料

熱點內容
國二考試調用編譯器運算選擇題 瀏覽:748
同濟大學高等數學pdf 瀏覽:232
延時的宏命令怎麼設置 瀏覽:594
資料庫有哪些加密 瀏覽:207
改之理反編譯注冊教程 瀏覽:389
什麼是編譯程序和翻譯程序 瀏覽:205
python課程心得總結 瀏覽:17
派派中怎麼看對方在哪個伺服器 瀏覽:794
xp配置java環境變數配置 瀏覽:7
python中1到100怎麼算 瀏覽:765
小度我想看程序員 瀏覽:505
bs刷裝備建立後文件夾沒有 瀏覽:79
找漫畫看應該下載什麼app 瀏覽:182
如何在vps上搭建自己的代理伺服器 瀏覽:744
nginxphp埠 瀏覽:403
內臟pdf 瀏覽:152
怎麼看雲伺服器架構 瀏覽:86
我的世界國際服為什麼登不進伺服器 瀏覽:998
微盟程序員老婆 瀏覽:932
intellij創建java 瀏覽:113