日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > java >内容正文

java

编码5分钟,命名2小时?Java开发都需要参考的一份命名规范!

發(fā)布時(shí)間:2025/3/16 java 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 编码5分钟,命名2小时?Java开发都需要参考的一份命名规范! 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

簡潔清爽的代碼風(fēng)格應(yīng)該是大多數(shù)工程師所期待的。在工作中筆者常常因?yàn)槠鹈侄m結(jié),命名已經(jīng)成為我工作中的攔路虎,夸張點(diǎn)可以說是編程5分鐘,命名兩小時(shí)!

每個(gè)公司都有不同的標(biāo)準(zhǔn),目的是為了保持統(tǒng)一,減少溝通成本,提升團(tuán)隊(duì)研發(fā)效能。所以本文中是筆者結(jié)合阿里巴巴開發(fā)規(guī)范,以及工作中的見聞針對Java領(lǐng)域相關(guān)命名進(jìn)行整理和總結(jié),僅供參考。

一,Java中的命名規(guī)范

好的命名能體現(xiàn)出代碼的特征,含義或者是用途,讓閱讀者可以根據(jù)名稱的含義快速厘清程序的脈絡(luò)。不同語言中采用的命名形式大相徑庭,Java中常用到的命名形式共有三種,既首字母大寫的UpperCamelCase,首字母小寫的lowerCamelCase以及全部大寫的并用下劃線分割單詞的UPPERCAMELUNSER_SCORE。通常約定,類一般采用大駝峰命名,方法和局部變量使用小駝峰命名,而大寫下劃線命名通常是常量和枚舉中使用。

類型(名)約束例
項(xiàng)目全部小寫
多個(gè)單詞用中劃線分隔‘-’
spring-cloud
全部小寫com.alibaba.fastjson
單詞首字母大寫Feature,
FieldDeserializer
變量首字母小寫
多個(gè)單詞組成時(shí),
除首個(gè)單詞
其他單詞首字母都要大寫
password,?
userName
常量全部大寫,多個(gè)單詞,用'_'分隔CACHEEXPIREDTIME
方法同變量read(),?
getById(Long id)

二,包命名

包名統(tǒng)一使用小寫點(diǎn)分隔符之間有且僅有一個(gè)自然語義的英文單詞或者多個(gè)單詞自然連接到一塊(如 springframework,deepspace不需要使用任何分割)。包名統(tǒng)一使用單數(shù)形式,如果類命有復(fù)數(shù)含義,則可以使用復(fù)數(shù)形式。

包名的構(gòu)成可以分為以下幾四部分【前綴】 【發(fā)起者名】【項(xiàng)目名】【模塊名】。常見的前綴可以分為以下幾種:

前綴例含義
indi

onem
indi.發(fā)起者名.項(xiàng)目名.模塊名.……個(gè)體項(xiàng)目
個(gè)人發(fā)起,但非自己獨(dú)自完成
可公開或私有項(xiàng)目,
copyright主要屬于發(fā)起者。
perspers.個(gè)人名.項(xiàng)目名.模塊名.……個(gè)人項(xiàng)目
指個(gè)人發(fā)起,獨(dú)自完成,
可分享的項(xiàng)目
copyright主要屬于個(gè)人
privpriv.個(gè)人名.項(xiàng)目名.模塊名.……私有項(xiàng)目,指個(gè)人發(fā)起,獨(dú)自完成
非公開的私人使用的項(xiàng)目,
copyright屬于個(gè)人。
teamteam.團(tuán)隊(duì)名.項(xiàng)目名.模塊名.……團(tuán)隊(duì)項(xiàng)目,指由團(tuán)隊(duì)發(fā)起
并由該團(tuán)隊(duì)開發(fā)的項(xiàng)目
copyright屬于該團(tuán)隊(duì)所有
頂級域名com.公司名.項(xiàng)目名.模塊名.……公司項(xiàng)目
copyright由項(xiàng)目發(fā)起的公司所有

三,類命名

類名使用大駝峰命名形式,類命通常時(shí)名詞或名詞短語,接口名除了用名詞和名詞短語以外,還可以使用形容詞或形容詞短語,如Cloneable,Callable等,表示實(shí)現(xiàn)該接口的類有某種功能或能力。對于測試類則以它要測試的類開頭,以Test結(jié)尾,如HashMapTest。

對于一些特殊特有名詞縮寫也可以使用全大寫命名,比如XMLHttpRequest,不過筆者認(rèn)為縮寫三個(gè)字母以內(nèi)都大寫,超過三個(gè)字母則按照要給單詞算。這個(gè)沒有標(biāo)準(zhǔn)如阿里巴巴中fastjson用JSONObject作為類命,而google則使用JsonObjectRequest命名,對于這種特殊的縮寫,原則是統(tǒng)一就好。

屬性(類)約束例
抽象Abstract?

Base 開頭
BaseUserService
枚舉Enum 作為后綴OSType
工具Utils作為后綴StringUtils
異常Exception結(jié)尾RuntimeException
接口實(shí)現(xiàn)接口名+ ImplUserServiceImpl
領(lǐng)域模型相/DO/DTO/VO/DAO正例:UserDAO
反例:UserDao
設(shè)計(jì)模式相關(guān)Builder,Factory等當(dāng)使用到設(shè)計(jì)模式時(shí)
要使用對應(yīng)的設(shè)計(jì)模式作為后綴
如ThreadFactory
處理特定功能Handler,Predicate
Validator
表示處理器,校驗(yàn)器,斷言
這些類工廠還有配套的方法名
如handle,predicate,validate
測試Test后綴UserServiceTest
表示用來測試UserService類的
MVC分層Controller,Service
ServiceImpl,DAO
后綴
UserManageController
UserManageDAO

四,方法

方法命名采用小駝峰的形式,首字小寫,往后的每個(gè)單詞首字母都要大寫。和類名不同的是,方法命名一般為動詞或動詞短語,與參數(shù)或參數(shù)名共同組成動賓短語,即動詞 + 名詞。一個(gè)好的函數(shù)名一般能通過名字直接獲知該函數(shù)實(shí)現(xiàn)什么樣的功能。

4.1 返回真?zhèn)沃档姆椒?/h3>

注:pre- prefix前綴,suf- suffix后綴,alo-alone 單獨(dú)使用

位置單詞意義例
preis對象是否符合期待的狀態(tài)isValid
precan對象能否執(zhí)行所期待的動作canRemove
preshould調(diào)用方執(zhí)行某個(gè)命令
或方法是好還是不好
應(yīng)不應(yīng)該
或者說推薦還是不推薦
shouldMigrate
prehas對象是否持有
所期待的數(shù)據(jù)和屬性
hasObservers
preneeds調(diào)用方是否需要
執(zhí)行某個(gè)命令或方法
needsMigrate

4.2 用來檢查的方法

單詞意義例
ensure檢查是否為期待的狀態(tài)
不是則拋出異常或返回error code
ensureCapacity
validate檢查是否為正確的狀態(tài)
不是則拋出異常或返回error code
validateInputs

4.3 按需求才執(zhí)行的方法

位置單詞意義例
sufIfNeeded需要的時(shí)候執(zhí)行
不需要則什么都不做
drawIfNeeded
premight同上mightCreate
pretry嘗試執(zhí)行
失敗時(shí)拋出異常
或是返回errorcode
tryCreate
sufOrDefault嘗試執(zhí)行
失敗時(shí)返回默認(rèn)值
getOrDefault
sufOrElse嘗試執(zhí)行
失敗時(shí)返回
實(shí)際參數(shù)中指定的值
getOrElse
preforce強(qiáng)制嘗試執(zhí)行
error拋出異常或是返回值
forceCreate,?
forceStop

4.4 異步相關(guān)方法

位置單詞意義例
preblocking線程阻塞方法blockingGetUser
sufInBackground執(zhí)行在后臺線程doInBackground
sufAsync異步方法sendAsync
sufSync

同步方法

sendSync

pre
/
alo

schedule

Job和Tas
k放入隊(duì)列

schedule,?
scheduleJob

pre
/
alo

post同上postJob

pre
/
alo

execute

執(zhí)行異步

同步方法
execute,
executeTask

pre
/
alo

start同上

star,
tstartJob

pre
/
alo

cancel停止異步方法

cance,
cancelJob

pre
/
alo

stop同上

stop,

stopJob

4.5 回調(diào)方法

位置單詞意義例
preon事件發(fā)生時(shí)執(zhí)行onCompleted
prebefore事件發(fā)生前執(zhí)行beforeUpdate
prepre同上preUpdate
prewill同上willUpdate
preafter事件發(fā)生后執(zhí)行afterUpdate
prepost同上postUpdate
predid同上didUpdate
preshould確認(rèn)事件
是否可以執(zhí)行
shouldUpdate

4.6 操作對象生命周期的方法

單詞意義例
initialize初始化或延遲初始化使用initialize
pause暫停onPause , pause
stop停止onStop, stop
abandon銷毀的替代abandon
destroy同上destroy
dispose同上dispose

4.7 與集合操作相關(guān)的方法

單詞意義例
contains是包含指定對象相同的對象contains
add添加addJob
append添加appendJob
insert插入到下標(biāo)ninsertJob
put添加與key對應(yīng)的元素putJob
remove移除元素removeJob
enqueue添加到隊(duì)列的最末位enqueueJob
dequeue從隊(duì)列中頭部取出并移除dequeueJob
push添加到棧頭pushJob
pop從棧頭取出并移除popJob
peek從棧頭取出但不移除peekJob
find尋找符合條件的某物findById

4.8 與數(shù)據(jù)相關(guān)的方法

單詞意義例
create新創(chuàng)建createAccount
new新創(chuàng)建newAccount
from從既有的某物新建
或是從其他的數(shù)據(jù)新建
fromConfig
to轉(zhuǎn)換toString
update更新既有某物updateAccount
load讀取loadAccount
fetch遠(yuǎn)程讀取fetchAccount
delete刪除deleteAccount
remove刪除removeAccount
save保存saveAccount
store保存storeAccount
commit保存commitChange
apply保存或應(yīng)用applyChange
clear清除或是恢復(fù)到初始狀態(tài)clearAll
reset清除或是恢復(fù)到初始狀態(tài)resetAll

4.9 成對出現(xiàn)的動詞

單詞意義
get獲取set 設(shè)置
add 增加remove 刪除
create 創(chuàng)建destory 移除
start 啟動stop 停止
open 打開close 關(guān)閉
read 讀取write 寫入
load 載入save 保存
create 創(chuàng)建destroy 銷毀
begin 開始end 結(jié)束
backup 備份restore 恢復(fù)
import 導(dǎo)入export 導(dǎo)出
split 分割merge 合并
inject 注入extract 提取
attach 附著detach 脫離
bind 綁定separate 分離
view 查看browse 瀏覽
edit 編輯modify 修改
select 選取mark 標(biāo)記
copy 復(fù)制paste 粘貼
undo 撤銷redo 重做
insert 插入delete 移除
add 加入append 添加
clean 清理clear 清除
index 索引sort 排序
find 查找search 搜索
increase 增加decrease 減少
play 播放pause 暫停
launch 啟動run 運(yùn)行
compile 編譯execute 執(zhí)行
debug 調(diào)試trace 跟蹤
observe 觀察listen 監(jiān)聽
build 構(gòu)建publish 發(fā)布
input 輸入output 輸出
encode 編碼decode 解碼
encrypt 加密decrypt 解密
compress 壓縮decompress 解壓縮
pack 打包unpack 解包
parse 解析emit 生成
connect 連接disconnect 斷開
send 發(fā)送receive 接收
download 下載upload 上傳
refresh 刷新synchronize 同步
update 更新revert 復(fù)原
lock 鎖定unlock 解鎖
check out 簽出check in 簽入
submit 提交commit 交付
push 推pull 拉
expand 展開collapse 折疊
begin 起始end 結(jié)束
start 開始finish 完成
enter 進(jìn)入exit 退出
abort 放棄quit 離開
obsolete 廢棄depreciate 廢舊
collect 收集aggregate 聚集

五,變量&常量命名

5.1 變量命名

變量是指在程序運(yùn)行中可以改變其值的量,包括成員變量和局部變量。變量名由多單詞組成時(shí),第一個(gè)單詞的首字母小寫,其后單詞的首字母大寫,俗稱駱駝式命名法(也稱駝峰命名法),如 computedValues,index、變量命名時(shí),盡量簡短且能清楚的表達(dá)變量的作用,命名體現(xiàn)具體的業(yè)務(wù)含義即可。

變量名不應(yīng)以下劃線或美元符號開頭,盡管這在語法上是允許的。變量名應(yīng)簡短且富于描述。變量名的選用應(yīng)該易于記憶,即,能夠指出其用途。盡量避免單個(gè)字符的變量名,除非是一次性的臨時(shí)變量。pojo中的布爾變量,都不要加is(數(shù)據(jù)庫中的布爾字段全都要加 is_ 前綴)。

5.2 常量命名

常量命名CONSTANT_CASE,一般采用全部大寫(作為方法參數(shù)時(shí)除外),單詞間用下劃線分割。那么什么是常量呢?

常量是在作用域內(nèi)保持不變的值,一般使用final進(jìn)行修飾。一般分為三種,全局常量(public static final修飾),類內(nèi)常量(private static final 修飾)以及局部常量(方法內(nèi),或者參數(shù)中的常量),局部常量比較特殊,通常采用小駝峰命名即可。

/*** 一個(gè)demo** @author Jann Lee* @date 2019-12-07 00:25**/ public class HelloWorld {/*** 局部常量(正例)*/public static final long USER_MESSAGE_CACHE_EXPIRE_TIME = 3600;/*** 局部常量(反例,命名不清晰)*/public static final long MESSAGE_CACHE_TIME = 3600;/*** 全局常量*/private static final String ERROR_MESSAGE = " error message";/*** 成員變量*/private int currentUserId;/*** 控制臺打印 {@code message} 信息** @param message 消息體,局部常量*/public void sayHello(final String message){System.out.println("Hello world!");} }

常量一般都有自己的業(yè)務(wù)含義,不要害怕長度過長而進(jìn)行省略或者縮寫。如,用戶消息緩存過期時(shí)間的表示,那種方式更佳清晰,交給你來評判。

通用命名規(guī)則

  • 盡量不要使用拼音;杜絕拼音和英文混用。對于一些通用的表示或者難以用英文描述的可以采用拼音,一旦采用拼音就堅(jiān)決不能和英文混用。正例:BeiJing, HangZhou 反例:validateCanShu

  • 命名過程中盡量不要出現(xiàn)特殊的字符,常量除外。

  • 盡量不要和jdk或者框架中已存在的類重名,也不能使用java中的關(guān)鍵字命名。

  • 妙用介詞,如for(可以用同音的4代替), to(可用同音的2代替), from, with,of等。如類名采用User4RedisDO,方法名getUserInfoFromRedis,convertJson2Map等。

  • 六,代碼注解

    6.1 注解的原則

    好的命名增加代碼閱讀性,代碼的命名往往有嚴(yán)格的限制。而注解不同,程序員往往可以自由發(fā)揮,單并不意味著可以為所欲為之胡作非為。優(yōu)雅的注解通常要滿足三要素。

  • Nothing is strange 沒有注解的代碼對于閱讀者非常不友好,哪怕代碼寫的在清除,閱讀者至少從心理上會有抵觸,更何況代碼中往往有許多復(fù)雜的邏輯,所以一定要寫注解,不僅要記錄代碼的邏輯,還有說清楚修改的邏輯。

  • Less is more 從代碼維護(hù)角度來講,代碼中的注解一定是精華中的精華。合理清晰的命名能讓代碼易于理解,對于邏輯簡單且命名規(guī)范,能夠清楚表達(dá)代碼功能的代碼不需要注解。濫用注解會增加額外的負(fù)擔(dān),更何況大部分都是廢話。

  • // 根據(jù)id獲取信息【廢話注解】 getMessageById(id)
  • Advance with the time 注解應(yīng)該隨著代碼的變動而改變,注解表達(dá)的信息要與代碼中完全一致。通常情況下修改代碼后一定要修改注解。

  • 6.2 注解格式

    注解大體上可以分為兩種,一種是javadoc注解,另一種是簡單注解。javadoc注解可以生成JavaAPI為外部用戶提供有效的支持javadoc注解通常在使用IDEA,或者Eclipse等開發(fā)工具時(shí)都可以自動生成,也支持自定義的注解模板,僅需要對對應(yīng)的字段進(jìn)行解釋。參與同一項(xiàng)目開發(fā)的同學(xué),盡量設(shè)置成相同的注解模板。

    a. 包注解

    包注解在工作中往往比較特殊,通過包注解可以快速知悉當(dāng)前包下代碼是用來實(shí)現(xiàn)哪些功能,強(qiáng)烈建議工作中加上,尤其是對于一些比較復(fù)雜的包,包注解一般在包的根目錄下,名稱統(tǒng)一為package-info.java。

    /*** 落地也質(zhì)量檢測* 1. 用來解決什么問題* 對廣告主投放的廣告落地頁進(jìn)行性能檢測,模擬不同的系統(tǒng),如Android,IOS等; 模擬不同的網(wǎng)絡(luò):2G,3G,4G,wifi等** 2. 如何實(shí)現(xiàn)* 基于chrome瀏覽器,用chromedriver驅(qū)動瀏覽器,設(shè)置對應(yīng)的網(wǎng)絡(luò),OS參數(shù),獲取到瀏覽器返回結(jié)果。** 注意:網(wǎng)絡(luò)環(huán)境配置信息{@link cn.mycookies.landingpagecheck.meta.NetWorkSpeedEnum}目前使用是常規(guī)速度,可以根據(jù)實(shí)際情況進(jìn)行調(diào)整** @author cruder* @time 2019/12/7 20:3 下午*/ package cn.mycookies.landingpagecheck;

    b. 類注接

    javadoc注解中,每個(gè)類都必須有注解。

    /** * Copyright (C), 2019-2020, Jann balabala... * * 類的介紹:這是一個(gè)用來做什么事情的類,有哪些功能,用到的技術(shù)..... * * @author 類創(chuàng)建者姓名 保持對齊 * @date 創(chuàng)建日期 保持對齊 * @version 版本號 保持對齊 */

    c. 屬性注解

    在每個(gè)屬性前面必須加上屬性注釋,通常有一下兩種形式,至于怎么選擇,你高興就好,不過一個(gè)項(xiàng)目中要保持統(tǒng)一。

    /** 提示信息 */ private String userName; /*** 密碼*/ private String password;

    d. 方法注釋

    在每個(gè)方法前面必須加上方法注釋,對于方法中的每個(gè)參數(shù),以及返回值都要有說明。

    /*** 方法的詳細(xì)說明,能干嘛,怎么實(shí)現(xiàn)的,注意事項(xiàng)...** @param xxx 參數(shù)1的使用說明, 能否為null* @return 返回結(jié)果的說明, 不同情況下會返回怎樣的結(jié)果* @throws 異常類型 注明從此類方法中拋出異常的說明*/

    e. 構(gòu)造方法注釋

    在每個(gè)構(gòu)造方法前面必須加上注釋,注釋模板如下:

    /*** 構(gòu)造方法的詳細(xì)說明** @param xxx 參數(shù)1的使用說明, 能否為null* @throws 異常類型 注明從此類方法中拋出異常的說明*/

    而簡單注解往往是需要工程師字節(jié)定義,在使用注解時(shí)應(yīng)該注意一下幾點(diǎn):

  • 枚舉類的各個(gè)屬性值都要使用注解,枚舉可以理解為是常量,通常不會發(fā)生改變,通常會被在多個(gè)地方引用,對枚舉的修改和添加屬性通常會帶來很大的影響。

  • 保持排版整潔,不要使用行尾注釋;雙斜杠和星號之后要用1個(gè)空格分隔。

  • int id = 1;// 反例:不要使用行尾注釋 //反例:換行符與注釋之間沒有縮進(jìn) int age = 18; // 正例:姓名 String name; /*** 1. 多行注釋** 2. 對于不同的邏輯說明,可以用空行分隔*/

    總結(jié)

    無論是命名和注解,他們的目的都是為了讓代碼和工程師進(jìn)行對話,增強(qiáng)代碼的可讀性,可維護(hù)性。優(yōu)秀的代碼往往能夠見名知意,注解往往是對命名的補(bǔ)充和完善。命名太南了!

    參考文獻(xiàn):《碼出高效》
    https://www.cnblogs.com/wangcp-2014/p/10215620.html
    https://qiita.com/KeithYokoma/items/2193cf79ba76563e3db6
    https://google.github.io/styleguide/javaguide.html#s2.1-file-name

    - MORE | 更多精彩文章 -

    • B站沒有天敵

    • 一文講透Dubbo負(fù)載均衡之最小活躍數(shù)算法

    • 不扯概念,用例子演示什么是臟讀,不可重復(fù)讀,幻讀?

    • 面試必問:用 Java 寫一個(gè)內(nèi)存泄漏程序

    如果你喜歡本文,

    請長按二維碼,關(guān)注?Hollis.

    轉(zhuǎn)發(fā)至朋友圈,是對我最大的支持。

    好文章,我在看??

    總結(jié)

    以上是生活随笔為你收集整理的编码5分钟,命名2小时?Java开发都需要参考的一份命名规范!的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。