摘要:在上一篇的編程風(fēng)格學(xué)習(xí)二中我們學(xué)習(xí)了一些在編碼過程中的格式規(guī)范,遵循這些規(guī)范毋庸置疑是我們的書寫高質(zhì)量代碼的前提與基礎(chǔ)。二語言編程規(guī)范常量命名常量的每個(gè)單詞均大寫,單詞之間使用下劃線連接。方法表示動(dòng)作,采用動(dòng)詞命名。
在上一篇的java編程風(fēng)格學(xué)習(xí)(二)中我們學(xué)習(xí)了一些在Java編碼過程中的格式規(guī)范,遵循這些規(guī)范毋庸置疑是我們的書寫高質(zhì)量代碼的前提與基礎(chǔ)。今天我們更進(jìn)一步,一起來學(xué)習(xí)Java編程的命名規(guī)范,向著編寫高質(zhì)量代碼的終極目標(biāo)進(jìn)發(fā)。
(一)編程語言的通用規(guī)范在詳細(xì)介紹Java元素的命名規(guī)范之前我們首先來看一下所有語言通用的一些編碼規(guī)則。
1.名稱應(yīng)該有實(shí)際意義當(dāng)我們?yōu)樽兞?、方法、類或者常量命名的時(shí)候應(yīng)該使用對(duì)閱讀者來說是具有實(shí)際意義的名稱,避免使用單個(gè)字母或者通用名。
我們首先來看下面這一段代碼:
if (a < 65) { y = 65 - a; } else { y = 0; }
在上面這段代碼中,雖然我們能理清代碼的執(zhí)行過程,但是卻不能判斷出變量a和常數(shù)65的意義,這毫無疑問讓我們很難理解這段代碼的實(shí)際意義。
如果我們使用具有實(shí)際意義的名稱來替換代碼中的字母變量和常量,這段代碼將十分容易理解。
if (age < RETIREMNT_AGE) { yearsToRetirement = RETIREMNT_AGE - age; } else { yearsToRetirement = 0; }
這種命名規(guī)則有一個(gè)例外情況,就是臨時(shí)變量的命名。
for (int i = 0; i < numberOfStudents; i++) { enrollStudent(i); }
臨時(shí)變量的意義通過上下文的充足信息我們就可以判斷出來,無需為其多帶帶命名。
2.使用人們熟悉的名稱使用閱讀者所熟悉的領(lǐng)域中的術(shù)語。如果閱讀者習(xí)慣使用“customer”這個(gè)詞,就不要使用“client”。當(dāng)領(lǐng)域或者目標(biāo)行業(yè)已經(jīng)存在通用術(shù)語時(shí),開發(fā)人員就不應(yīng)該再采用非通用術(shù)語或者自己造新詞。
3.謹(jǐn)慎使用過長(zhǎng)的名稱如果類、接口、變量和方法的名稱過長(zhǎng),那就說明這個(gè)實(shí)體的定義十分復(fù)雜。在給一個(gè)實(shí)體命名時(shí),我們首先要考慮的是它的設(shè)計(jì)和用途,通過建立更具有針對(duì)性的類、接口、方法和變量來構(gòu)成這些實(shí)體,并且給它們更簡(jiǎn)單有意義的名稱。
4.不要使用只依賴大小寫來區(qū)分的名字雖然Java編譯器可以區(qū)分那些大小寫不同的名字,但是人在閱讀時(shí)是很難注意到差別的,這就很容易對(duì)讀者造成誤導(dǎo)。
比如,變量theSQLInputStream和變量theSqlInputStream是不應(yīng)該出現(xiàn)在同一個(gè)作用域的。
常量的每個(gè)單詞均大寫,單詞之間使用下劃線連接。用大寫字母命名常量可以和其他非final型變量相區(qū)分開。
class Byte { public static final byte MAX_VALUE = 255; public static final byte MIN_VALUE = 0; }2.變量命名 (1)使用名詞來命名變量,變量名中的第一個(gè)單詞小寫,其后的每一個(gè)單詞的第一個(gè)字母大寫。
變量就是一個(gè)對(duì)象、事物,我們使用名稱表示。大寫能區(qū)分名詞中的每一個(gè)單詞,首字母小寫則可以區(qū)分變量名和類名。
(2)集合引用名要使用復(fù)數(shù)形式對(duì)象集合的字段和變量的名字要使用集合里包含的對(duì)象類型的復(fù)數(shù)形式,這便于區(qū)分多值變量和單值變量。
Customer[] customers = new Customer[MAX_CUSTOMERS]; void addCustomer(int index,Customer customer) { this.customer[index] = customer; } Vector orderItems = new Vector(); void addOrderItems(OrdetItem orderItem) { this.orderItems.addElement(orderItem); }(3)為不重要的臨時(shí)變量建立一套標(biāo)準(zhǔn)名稱
大多數(shù)變量的名字要使用完整的表述,但是也有很多經(jīng)常出現(xiàn)的變量使用簡(jiǎn)寫形式。
下面是幾個(gè)比較常用的例子:
字符--------c,d,e
坐標(biāo)--------x,y,z
異常--------e
圖形--------g
對(duì)象--------o
流 ----------in,out
字符串-----s
(4)字段、參數(shù)命名我們?cè)谑褂脴?gòu)造方法或者set方法給字段賦值時(shí),應(yīng)該為參數(shù)名和字段使用相同名稱,在方法內(nèi)部使用this關(guān)鍵字來區(qū)分局部變量和字段變量。
class Student { private String name; public Student(String name) { this.name = name; } public void setName(String name) { this.name = name; } }3.方法命名 (1)使用動(dòng)詞命名方法,方法名中的第一個(gè)單詞小寫,其后的每個(gè)單詞的第一個(gè)字母大寫。
方法表示動(dòng)作,采用動(dòng)詞命名。大寫可以把名字里的各個(gè)單詞很明確的區(qū)分開,首字母小寫則可以將方法調(diào)用和構(gòu)造方法區(qū)分開。
class Account { private int balance; public Account(int balance) { this.balance = balance; } public void withdraw(int amount) { deposit(-1 * amount); } public void deposit(int amount) { this.balance += amount; } }(2)遵循JavaBeans中屬性訪問函數(shù)的方法的命名規(guī)范
JavaBeans規(guī)范為方法建立了一套命名規(guī)范,用來訪問JavaBeans實(shí)現(xiàn)的屬性。在任何類中定義方法都應(yīng)該使用這些規(guī)范,無論是否實(shí)現(xiàn)了Bean。
JavaBean用is開頭的方法公開boolean屬性:
boolean isValid() { return this.isValid; }
JavaBean用get開頭的方法對(duì)其他屬性進(jìn)行訪問:
string getName() { return this.name; }
JavaBean用set開頭的方法對(duì)屬性進(jìn)行寫入操作:
void setName() { this.name = name; }4.類命名 采用名詞命名類,類名中的每個(gè)單詞的第一個(gè)字母大寫。
類用來定義對(duì)象或者事物,應(yīng)該采用名詞形式。大寫可以明顯地區(qū)分名字中各個(gè)單詞,首字母大寫則可以區(qū)分變量名以及類名或者接口名。
class CustomerAccount { ··· }5.接口命名 采用名詞或者形容詞命名接口,接口中的每個(gè)單詞的第一個(gè)字母大寫。
接口描述一個(gè)對(duì)象的能力或者使聲明對(duì)象能夠提供的服務(wù)。
a.使用名詞給作為服務(wù)聲明的接口命名:
public interface ActionListener { public void actionPerformed(ActionEvent e); }
b.使用形容詞來為描述某種能力的接口命名:
public interface Runnable { public void run(); }
大多數(shù)的接口命名都是采用形容詞,這些形容詞由動(dòng)詞加上able或者ible后綴得來。更能表示接口是表示一種能力的本質(zhì)含義。
6.包命名 (1)使用多帶帶的小寫動(dòng)詞作為每個(gè)包的根名包名里必須包含一個(gè)多帶帶的小寫詞,能夠清晰體現(xiàn)包的用途。包名也可以包含一個(gè)有實(shí)際意義的縮寫,例如Java標(biāo)準(zhǔn)包的java.io。
(2)用你所在組織的域名的倒序小寫的形式作為包名字的根限定詞例如,一個(gè)公司的域名為 weikanwave.com,該公司發(fā)布了一款名為server的服務(wù)器應(yīng)用程序,那么該公司將該包命名為com.weikanwave.server。
以上內(nèi)容就是本篇文章的全部?jī)?nèi)容,如果有補(bǔ)充或者不妥之處還請(qǐng)各位不吝賜教,下一篇我們將學(xué)習(xí)Java的文檔規(guī)范。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/66724.html
摘要:最近在看一本有關(guān)編程規(guī)范的書,書中精煉闡述了使用語言時(shí)應(yīng)該遵循的一些原則。所以擁有良好一致的編程規(guī)范對(duì)于一個(gè)團(tuán)隊(duì)至關(guān)重要。二堅(jiān)持最小驚奇原則在編碼過程中盡量避免可能讓軟件用戶感到意外的做法。 最近在看一本有關(guān)Java編程規(guī)范的書,書中精煉闡述了使用java語言時(shí)應(yīng)該遵循的一些原則。接下來的一段時(shí)間我將在這里總結(jié)我的學(xué)習(xí)內(nèi)容,也希望這一系列文章能夠?qū)τ行枰娜擞兴鶐椭?不考慮任何編碼規(guī)...
摘要:不管是還是,表之間的連接查詢,被映射為實(shí)體類之間的關(guān)聯(lián)關(guān)系,這樣,如果兩個(gè)實(shí)體類之間沒有實(shí)現(xiàn)關(guān)聯(lián)關(guān)系,你就不能把兩個(gè)實(shí)體或者表起來查詢。 因?yàn)轫?xiàng)目需要選擇數(shù)據(jù)持久化框架,看了一下主要幾個(gè)流行的和不流行的框架,對(duì)于復(fù)雜業(yè)務(wù)系統(tǒng),最終的結(jié)論是,JOOQ是總體上最好的,可惜不是完全免費(fèi),最終選擇JDBC Template。 Hibernate和Mybatis是使用最多的兩個(gè)主流框架,而JOO...
摘要:相對(duì)于電子書,我更喜歡紙質(zhì)版的書籍。過去的年一共閱讀過本技術(shù)書,下面對(duì)這些書做一個(gè)小結(jié)。源碼深度解析這本書是年購買的,年是第四次閱讀。必知必會(huì)數(shù)據(jù)庫的復(fù)習(xí)書籍,內(nèi)容淺顯易懂。 相對(duì)于電子書,我更喜歡紙質(zhì)版的書籍。我喜歡在拿到新書時(shí)記錄購買時(shí)間、地點(diǎn)、開始閱讀的時(shí)間、第一次看完的時(shí)間,算是一種學(xué)習(xí)的記錄。過去的2016年一共閱讀過15本技術(shù)書,下面對(duì)這些書做一個(gè)小結(jié)。 《深入理解Java...
摘要:三進(jìn)階階段這個(gè)階段主要是靠我們自己學(xué)習(xí)總結(jié),可以通過前輩們的博客或者自己研究源碼,這些非常有利于我們快速的成長(zhǎng)。讓自己保持永遠(yuǎn)學(xué)習(xí)的精神。五零基礎(chǔ)學(xué)習(xí)資料最后給大家準(zhǔn)備了一份不錯(cuò)的學(xué)習(xí)資源,里面有很多學(xué)習(xí)視頻和資料,后臺(tái)回復(fù)資源,即可獲取。 showImg(https://segmentfault.com/img/bVbauV8?w=1212&h=816); 前兩次給大家分享了關(guān)于 j...
閱讀 617·2021-11-15 11:38
閱讀 1253·2021-10-11 10:59
閱讀 3524·2021-09-07 09:58
閱讀 516·2019-08-30 15:44
閱讀 3545·2019-08-28 18:14
閱讀 2629·2019-08-26 13:32
閱讀 3539·2019-08-26 12:23
閱讀 2442·2019-08-26 10:59