成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專(zhuān)欄INFORMATION COLUMN

自己整理的java編程規(guī)范

yedf / 1635人閱讀

摘要:努力避免硬編碼。一個(gè)類(lèi)的總體行數(shù)盡量控制在行左右不超過(guò)一千行。函數(shù)注釋函數(shù)注釋采用,在每個(gè)函數(shù)或者過(guò)程的前面要有必要的注釋信息,包括函數(shù)或過(guò)程名稱(chēng)功能描述輸入輸出及返回值說(shuō)明調(diào)用關(guān)系及被調(diào)用關(guān)系說(shuō)明等。

前言

推薦Google的Java編碼規(guī)范英文版:

http://google-styleguide.googlecode.com/svn/trunk/javaguide.html

雖然這篇文章的英文很簡(jiǎn)單,但是最近發(fā)現(xiàn)有人翻譯了這篇文章,所以專(zhuān)門(mén)推薦一下:

http://hawstein.com/posts/google-java-style.html

正文

一、命名規(guī)范

已經(jīng)被使用的常量,不要重新定義

約定俗成的常量含義,不要重新定義。

努力避免硬編碼。

每個(gè)模塊,建議有獨(dú)立的常量類(lèi)。

方法名都以lowerCamelCase風(fēng)格編寫(xiě)

類(lèi)名都以UpperCamelCase風(fēng)格編寫(xiě)

參數(shù)名以lowerCamelCase風(fēng)格編寫(xiě)

局部變量名以lowerCamelCase風(fēng)格編寫(xiě),比起其它類(lèi)型的名稱(chēng),局部變量名可以有更為寬松的縮寫(xiě)。

雖然縮寫(xiě)更寬松,但還是要避免用單字符進(jìn)行命名,除了臨時(shí)變量和循環(huán)變量。

即使局部變量是final和不可改變的,也不應(yīng)該把它示為常量,自然也不能用常量的規(guī)則去命名它。

二、函數(shù)/方法

public 函數(shù)(方法),對(duì)象參數(shù) 必須要處理參數(shù)為null的情況,

private 函數(shù),對(duì)象參數(shù) 可以不用處理參數(shù)為null的情況(依情況而定)

方法名都以lowerCamelCase 開(kāi)頭單詞小寫(xiě)后面駝峰風(fēng)格編寫(xiě)

方法長(zhǎng)度不超過(guò)50行

三、嵌套層級(jí)不要超過(guò)3層。

for,while,if ,switch 等。

方法中條件不成立直接return,不再向下執(zhí)行

 如:

    public int xxx (String userId, String password, String email){

       if(StringUtils.isEmpty(userId) || StringUtils.isEmpty(email)

                ||StringUtils.isEmpty(password)){

            return null;

        }

        UserEntity ue = EntityProxy.OBJ.get(userId, UserEntity.class);

        if(ue == null){

            return null;

        }

     ……...

  }

避免前套層次過(guò)深,建議不超過(guò)三層

四、代碼結(jié)構(gòu)

1垂直

以下情況需要使用一個(gè)空行:

類(lèi)內(nèi)連續(xù)的成員之間:字段,構(gòu)造函數(shù),方法,嵌套類(lèi),靜態(tài)初始化塊,實(shí)例初始化塊。
例外:兩個(gè)連續(xù)字段之間的空行是可選的,用于字段的空行主要用來(lái)對(duì)字段進(jìn)行邏輯分組。
在函數(shù)體內(nèi),語(yǔ)句的邏輯分組間使用空行。
類(lèi)內(nèi)的第一個(gè)成員前或最后一個(gè)成員后的空行是可選的(既不鼓勵(lì)也不反對(duì)這樣做,視個(gè)人喜好而定)。
要滿(mǎn)足本文檔中其他節(jié)的空行要求。
多個(gè)連續(xù)的空行是允許的,但沒(méi)有必要這樣做(我們也不鼓勵(lì)這樣做)。
一個(gè)類(lèi)的總體行數(shù)盡量控制在400行左右(不超過(guò)一千行)。

五、資源處理

EntityTransaction tranx = null;

    try {

      // 獲取數(shù)據(jù)庫(kù)事務(wù)

      tranx = em.getTransaction();

      // 開(kāi)始事務(wù)過(guò)程

      if(!tranx.isActive()){

        tranx.begin();

      }

      // 保存實(shí)體

      Query query = em.createNamedQuery(jpqlName);

      if(params!=null && !params.isEmpty()){

        params.forEach((k,v)->{

          query.setParameter(k, v);

        });

      }

      query.executeUpdate();

      // 提交事務(wù)

      tranx.commit();

    } catch (Exception ex) {

      // 記錄錯(cuò)誤日志

      DaoLog.LOG.error("刪除對(duì)象異常");

      DaoLog.LOG.error(ex.getMessage(), ex);

      if(tranx != null){

        tranx.rollback();

      }

      return false;

    }finally{

      if(tranx !=null && tranx.isActive()){

        tranx.commit();

      }
      em.close();//注意 用完一定要釋放

    }

六、異常處理

比較底層的處理單元,建議拋出異常。

業(yè)務(wù)處理模塊,處理異常的同時(shí),異常必須要加日志!最好有finally處理。

方法返回結(jié)果,不要使用異常方式。

七、相同的代碼快,不要到處出現(xiàn)或者重復(fù)出現(xiàn)!

相同代碼提取處理,讓代碼可重用。

八、注釋

1、源文件注釋

源文件注釋采用 /* …… /,在每個(gè)源文件的頭部要有必要的注釋信息,包括:文件名;文件編號(hào);版本號(hào);作者;創(chuàng)建時(shí)間;文件描述包括本文件歷史修改記錄等。中文注釋模版:

/**

文 件 名 :

CopyRright (c) 2015-xxxx:

文件編號(hào):

創(chuàng) 建 人:

日 期:

修 改 人:

日 期:

描 述:

版 本 號(hào):

*/

2、類(lèi)(模塊)注釋?zhuān)?/p>

類(lèi)(模塊)注釋采用 /* …… /,在每個(gè)類(lèi)(模塊)的頭部要有必要的注釋信息,包括:工程名;類(lèi)(模塊)編號(hào);命名空間;類(lèi)可以運(yùn)行的JDK版本;版本號(hào);

作者;創(chuàng)建時(shí)間;類(lèi)(模塊)功能描述(如功能、主要算法、內(nèi)部各部分之間的關(guān)系、該類(lèi)與其類(lèi)的關(guān)系等,必要時(shí)還要有一些如特別的軟硬件要求等說(shuō)明);

主要函數(shù)或過(guò)程清單及本類(lèi)(模塊)歷史修改記錄等。

3、接口注釋?zhuān)?/p>

接口注釋采用 /* …… /,在滿(mǎn)足類(lèi)注釋的基礎(chǔ)之上,接口注釋?xiě)?yīng)該包含描述接口的目的、它應(yīng)如何被使用以及如何不被使用,塊標(biāo)記部分必須注明作者和版本。

在接口注釋清楚的前提下對(duì)應(yīng)的實(shí)現(xiàn)類(lèi)可以不加注釋。

4、構(gòu)造函數(shù)注釋?zhuān)?/p>

構(gòu)造函數(shù)注釋采用 /* …… /,描述部分注明構(gòu)造函數(shù)的作用,不一定有塊標(biāo)記部分。

5、函數(shù)注釋?zhuān)?/p>

函數(shù)注釋采用 /* ……/,在每個(gè)函數(shù)或者過(guò)程的前面要有必要的注釋信息,包括:函數(shù)或過(guò)程名稱(chēng);功能描述;

輸入、輸出及返回值說(shuō)明;調(diào)用關(guān)系及被調(diào)用關(guān)系說(shuō)明等。函數(shù)注釋里面可以不出現(xiàn)版本號(hào)(@version)。

6、方法注釋?zhuān)?/p>

方法注釋采用 /* …… /,普通成員方法要求說(shuō)明完成什么功能,參數(shù)含義是什么且返回值什么;另外方法的創(chuàng)建時(shí)間必須注釋清楚,為將來(lái)的維護(hù)和閱讀提供寶貴線(xiàn)索。

7、方法內(nèi)部注釋?zhuān)?/p>

控制結(jié)構(gòu),代碼做了些什么以及為什么這樣做,處理順序等,特別是復(fù)雜的邏輯處理部分,要盡可能的給出詳細(xì)的注釋。

8、全局變量注釋?zhuān)?/p>

要有較詳細(xì)的注釋?zhuān)▽?duì)其功能、取值范圍、哪些函數(shù)或者過(guò)程存取以及存取時(shí)注意事項(xiàng)等的說(shuō)明。

9、局部(中間)變量注釋?zhuān)?/p>

主要變量必須有注釋?zhuān)瑹o(wú)特別意義的情況下可以不加注釋。

10、實(shí)參/參數(shù)注釋?zhuān)?/p>

參數(shù)含義、及其它任何約束或前提條件。

十、if else 條件含義要明確

如:

if (isOk) { //isOK 如何

  return Response.status(200).entity(resp.getData()).build();

} else {

  return Response.status(200).entity(resp.getErrorInfo()).build();

}

十一、邏輯控制,不要瀑布流!

盡量把條件不滿(mǎn)足的情況寫(xiě)在某個(gè)邏輯塊的前面(比如方法的最前面),讓不滿(mǎn)足條件的情況快速失敗,讓代碼整理結(jié)構(gòu)清晰,可讀。

十二、巧用構(gòu)造函數(shù)構(gòu)造者builder模式:

構(gòu)造方法:UserDetailInfo userinfo = new UserDetailInfo(user);

builder方式:
Map oparams = ImmutableMap. builder()
            .put("appid", ConfigUtil.APPID)// 服務(wù)號(hào)的應(yīng)用號(hào)
            .put("body", WeixinConstant.PRODUCT_BODY)// 商品描述
            .put("mch_id", ConfigUtil.MCH_ID)// 商戶(hù)號(hào) ?
            .put("nonce_str", PayCommonUtil.CreateNoncestr())// 16隨機(jī)字符串(大小寫(xiě)字母加數(shù)字)
            .put("out_trade_no", orderId)// 商品訂單號(hào)
            .put("total_fee", "1")// 銀行幣種
            .put("spbill_create_ip", ip)// IP地址
            .put("notify_url", ConfigUtil.NOTIFY_URL) // 微信回調(diào)地址
            .put("trade_type", "APP")// 支付類(lèi)型 app
            .build();   

十三、數(shù)據(jù)結(jié)構(gòu)與業(yè)務(wù)處理(算法)分開(kāi)

 如: MVC MVVM 都可以參考

十四、關(guān)鍵業(yè)務(wù)添加日志記錄

 LoggerUtils.loginLogger.info(String.format("xx用戶(hù)[%s] at %s 登陸xxx app", sb.toString(),DateUtils.getDateTime()));

最后啰嗦一句 :寫(xiě)代碼一個(gè)類(lèi)寫(xiě)完了 去掉無(wú)效的引用,也就是import的時(shí)候。

補(bǔ)充:養(yǎng)成好習(xí)慣,祝大家寫(xiě)好代碼,迎娶白富美,走上人生巔峰!

thx

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/64788.html

相關(guān)文章

  • 如何去學(xué)習(xí)編程

    摘要:我們學(xué)習(xí)程序語(yǔ)言一定不要被束縛到語(yǔ)言細(xì)節(jié)和規(guī)范上面,而要從計(jì)算機(jī)邏輯執(zhí)行層面思考。多核的出現(xiàn)人們自然想到使多個(gè)線(xiàn)程同時(shí)執(zhí)行垃圾回收的工作,減少垃圾回收時(shí)間如,為了將啊垃圾回收對(duì)程序的影響降到最低,人們又發(fā)明了并發(fā)回收器,仍需要。 我們學(xué)習(xí)程序語(yǔ)言一定不要被束縛到語(yǔ)言細(xì)節(jié)和規(guī)范上面,而要從計(jì)算機(jī)邏輯執(zhí)行層面思考。細(xì)節(jié)和規(guī)范都是人為設(shè)定的,是大牛抽象計(jì)算機(jī)邏輯后的加工品。對(duì)于技術(shù)問(wèn)題我們要...

    dongfangyiyu 評(píng)論0 收藏0
  • 程序員寫(xiě)簡(jiǎn)歷時(shí)技術(shù)詞匯拼寫(xiě)規(guī)范備忘錄!

    摘要:寫(xiě)在前面每年這個(gè)時(shí)候又到了求職的旺季。求職前,我們都會(huì)花很多的時(shí)間在自己的技術(shù)水平提升筆面試的準(zhǔn)備之上,但往往卻忽略了找工作第一步所需要的一個(gè)嚴(yán)謹(jǐn)且靠譜的簡(jiǎn)歷。而程序員寫(xiě)簡(jiǎn)歷,第一步就是需要注意嚴(yán)謹(jǐn)而規(guī)范地使用各種技術(shù)詞匯。 ...

    h9911 評(píng)論0 收藏0
  • 國(guó)外程序員整理Java資源大全

    摘要:日期和時(shí)間處理日期和時(shí)間的函數(shù)庫(kù)。使用中可觀察序列,創(chuàng)建異步基于事件應(yīng)用程序的函數(shù)庫(kù)。為分布式系統(tǒng)提供延遲和容錯(cuò)處理。發(fā)布使用本機(jī)格式分發(fā)應(yīng)用程序的工具。將程序資源和打包成和的本機(jī)文件。圖像處理用來(lái)幫助創(chuàng)建評(píng)估或操作圖形的函數(shù)庫(kù)。 好資源要分享原文 譯者 唐尤華 翻譯自 github akullpp 構(gòu)建 這里搜集了用來(lái)構(gòu)建應(yīng)用程序的工具。 Apache Maven:Mave...

    chengtao1633 評(píng)論0 收藏0
  • 做IT這幾年,我整理了這些干貨想要送給你!

    摘要:資源獲取方式根據(jù)下面的索引,大家可以選擇自己需要的資源,然后在松哥公眾號(hào)牧碼小子后臺(tái)回復(fù)對(duì)應(yīng)的口令,就可以獲取到資源的百度云盤(pán)下載地址。公眾號(hào)二維碼如下另外本文會(huì)定期更新,松哥有新資源的時(shí)候會(huì)及時(shí)分享給大家,歡迎各位小伙伴保持關(guān)注。 沒(méi)有一條路是容易的,特別是轉(zhuǎn)行計(jì)算機(jī)這條路。 松哥接觸過(guò)很多轉(zhuǎn)行做開(kāi)發(fā)的小伙伴,我了解到很多轉(zhuǎn)行人的不容易,記得松哥大二時(shí)剛剛決定轉(zhuǎn)行計(jì)算機(jī),完全不知道這...

    王晗 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<