標籤:命名法 [] port 大小寫 表示 hash 結合 依次 span
一、常見命名規則(1)匈牙利命名法
比 較著名的命名規則是匈牙利命名法,但這種命名法對於跨平台移植簡直是災難。這種命名方法是由Microsoft程式員查爾斯·西蒙尼(Charles Simonyi) 提出的。其主要思想是“在變數和函數名中加入首碼以增進人們對程式的理解”。匈牙利命名法關鍵是:標識符的名字以一個或者多個小寫字母開頭作為首碼;首碼 之後的是首字母大寫的一個單詞或多個單片語合,該單詞要指明變數的用途。例如:lpszStr, 表示指向一個以‘\0‘結尾的字串(sz)的長指標(lp)變數。
(2)駱駝命名法
駱駝(Camel)命名法近年來越來越流行,在許多新的函數庫和 Java這樣的平台下使用得當相多。駱駝命名法,正如它的名稱所表示的那樣,指的是混合使用大小寫字母來構成標識符的名字。其中第一個單詞首字母小寫,餘 下的單字首大寫。例如:printEmployeePaychecks(),函數名中每一個邏輯斷點都有一個大寫字母來標記。
(3)帕斯卡命名法
帕斯卡(Pascal)命名法與駱駝命名法類似。只不過駱駝命名法是第一個單詞首字母小寫,而帕斯卡命名法則是第一個單字首大寫。例如:DisplayInfo()和UserName都是採用了帕斯卡命名法。
在C#中,以帕斯卡命名法和駱駝命名法居多。事實上,很多程式設計者在實際命名時會將駱駝命名法和帕斯卡結合使用,例如變數名採用駱駝命名法,而函數採用帕斯卡命名法。
(4)底線命名法
底線法是隨著C語言的出現流行起來的,在UNIX/LIUNX這樣的環境,以及GNU代碼中使用非常普遍。
對於以上的幾種命名規則,我們認為比較對變數或函數進行描述的是駱駝命名法和底線命名法,因此,我們推薦使用這兩種命名方面。
二、java命名風格(1)包命名
包名按照網域名稱的範圍從大到小逐步列出,恰好和Internet上的網域名稱命名規則相反。
由一組以“.”串連的標識符構成,通常第一個標識符為符合網路網域名稱的兩個或者三個英文小寫字母。
package cn.edu.scau.mk.testdemo;
(2)類、介面命名(帕斯卡命名法)
類的名字必須由大寫字母開頭而單詞中的其他字母均為小寫;如果類名稱由多個單片語成,則每個單詞的首字母均應為大寫例如TestDemo;如果類名稱中包含單詞縮寫,則這個所寫詞的每個字母均應大寫,如:XMLManager,還有一點命名技巧就是由於類是設計用來代表對象的,所以在命名類時應盡量選擇名詞。
public class TestDemo {}
(3)方法名(駝峰命名法)
方法的名字的第一個單詞應以小寫字母作為開頭,後面的單詞則用大寫字母開頭。可以為動詞或動詞+名片語合。
1、設定/擷取某個值的Method,應該遵循setV/getV規範(V是變數名)
2、返回數組長度的Method,應該命名為length
3、返回集合長度的Method,應該命名為size
4、測試某個布爾值的Method,應該命名為isV
5、將對象轉換為某個特定類型的Mehod應該命名為toT(T是類型名)
package cn.edu.scau.mk.testdemo;import java.util.ArrayList;import java.util.List;/** * * @author MK */public class TestDemo { private int key=0; private boolean finish=false; private int[] scores=new int[2]; private List<String> names=new ArrayList<>(); /** * @return the key */ public int getKey() { return key; } /** * @param key the key to set */ public void setKey(int key) { this.key = key; } /** * @return the finish */ public boolean isFinish() { return finish; } /** * @param finish the finish to set */ public void setFinish(boolean finish) { this.finish = finish; } public int length() { return scores.length; } public int size() { return names.size(); }}
(4)變數名(駝峰命名法)
普通變數命名應該採用首字母小寫,其他字母首字母大寫的方式。
public class TestDemo { private String personName; }
(5)靜態常量
final static變數的名字應該都大寫,並且指出完整含義。如果一個常量名稱由多個單片語成,則應該用底線來分割這些單詞如。
public class TestDemo { static final String PERSON_NAME="Jack"; }
(6)邏輯變數
避免用flag來命名狀態變數,用is來命名邏輯變數。
public class TestDemo { private boolean isFinish; }
(7)數組
總是使用以下方式定義數組:
int[] arr = new int[10];
禁止使用C語言的是形式:
int arr[] = new int[2];
(8)泛型參數
Container中的Element應該用E表示;Map裡的key用K表示,value用V;Type用T表示;異常用X表示
如果需要接收多個Type類型的參數,應該用鄰接T的大寫字母——例如S——來依次表示,當然也可以用T1, T2這樣的方式
如果在範型方法存在於範型類中,應當盡量避免使用同樣的Type Variable Names,以免混淆
publicclass HashSet<E> extends AbstractSet<E> {
}publicclass HashMap<K, V> extends AbstractMap<K, V> {
}publicclass ThreadLocal<T> {
}publicinterface Functor<T, X extends Throwable> { T val() throws X;}
(9)推薦的命名
1.當要區別介面和實作類別的時候,可以在類的後面加上“Impl”。
interface Container{}class ContainerImpl implements Container{}
2.Exception類最好能用“Exception”做為類命名的結尾
class DataNotFoundException extends Exception{}class InvalidArgumentException extends Exception{}
3..抽象類別最好能用“Abstract”做為類命名的開頭
abstract class AbstractBeanDefinition{}abstract class AbstractBeanFactory{}
4. Test類最好能用“Test”做為類命名的結尾
class PersonTest {}
5.簡稱與縮寫(不推薦使用)
cp代表colorPointbuf代表bufferoff代表offsetlen代表length
除非是在迴圈中,否則一般不推薦使用單個字母作為變數名,不過也有例外,即約定俗成的單個字母
b代表bytec代表chard代表doublee代表Exceptionf代表floati, j, k代表整數l代表longo代表Objects代表Stringv代表某些類型的特定值
Java編程規範