Java編程風格學習(三)

在上一篇的java編程風格學習(二)中咱們學習了一些在Java編碼過程當中的格式規範,遵循這些規範毋庸置疑是咱們的書寫高質量代碼的前提與基礎。今天咱們更進一步,一塊兒來學習Java編程的命名規範,向着編寫高質量代碼的終極目標進發。java

(一)編程語言的通用規範

在詳細介紹Java元素的命名規範以前咱們首先來看一下全部語言通用的一些編碼規則。編程

1.名稱應該有實際意義

當咱們爲變量、方法、類或者常量命名的時候應該使用對閱讀者來講是具備實際意義的名稱,避免使用單個字母或者通用名。 segmentfault

咱們首先來看下面這一段代碼:服務器

if (a < 65) {
  y = 65 - a;
}
else {
  y = 0;
}

在上面這段代碼中,雖然咱們能理清代碼的執行過程,可是卻不能判斷出變量a和常數65的意義,這毫無疑問讓咱們很難理解這段代碼的實際意義。
若是咱們使用具備實際意義的名稱來替換代碼中的字母變量和常量,這段代碼將十分容易理解。編程語言

if (age < RETIREMNT_AGE) {
  yearsToRetirement = RETIREMNT_AGE - age;
}
else {
  yearsToRetirement = 0;
}

這種命名規則有一個例外狀況,就是臨時變量的命名。函數

for (int i = 0; i < numberOfStudents; i++) {
  enrollStudent(i);
}

臨時變量的意義經過上下文的充足信息咱們就能夠判斷出來,無需爲其單獨命名。學習

2.使用人們熟悉的名稱

使用閱讀者所熟悉的領域中的術語。若是閱讀者習慣使用「customer」這個詞,就不要使用「client」。當領域或者目標行業已經存在通用術語時,開發人員就不該該再採用非通用術語或者本身造新詞。this

3.謹慎使用過長的名稱

若是類、接口、變量和方法的名稱過長,那就說明這個實體的定義十分複雜。在給一個實體命名時,咱們首先要考慮的是它的設計和用途,經過創建更具備針對性的類、接口、方法和變量來構成這些實體,而且給它們更簡單有意義的名稱。編碼

4.不要使用只依賴大小寫來區分的名字

雖然Java編譯器能夠區分那些大小寫不一樣的名字,可是人在閱讀時是很難注意到差異的,這就很容易對讀者形成誤導。
好比,變量theSQLInputStream和變量theSqlInputStream是不該該出如今同一個做用域的。設計

(二)Java語言編程規範

1.常量命名

常量的每一個單詞均大寫,單詞之間使用下劃線鏈接。用大寫字母命名常量能夠和其餘非final型變量相區分開。

class Byte {
  public static final byte MAX_VALUE = 255;
  public static final byte MIN_VALUE = 0;
}

2.變量命名

(1)使用名詞來命名變量,變量名中的第一個單詞小寫,其後的每個單詞的第一個字母大寫。

變量就是一個對象、事物,咱們使用名稱表示。大寫能區分名詞中的每個單詞,首字母小寫則能夠區分變量名和類名。

(2)集合引用名要使用複數形式

對象集合的字段和變量的名字要使用集合裏包含的對象類型的複數形式,這便於區分多值變量和單值變量。

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)爲不重要的臨時變量創建一套標準名稱

大多數變量的名字要使用完整的表述,可是也有不少常常出現的變量使用簡寫形式。
下面是幾個比較經常使用的例子:

  • 字符--------c,d,e

  • 座標--------x,y,z

  • 異常--------e

  • 圖形--------g

  • 對象--------o

  • 流 ----------in,out

  • 字符串-----s

(4)字段、參數命名

咱們在使用構造方法或者set方法給字段賦值時,應該爲參數名和字段使用相同名稱,在方法內部使用this關鍵字來區分局部變量和字段變量。

class Student {
  private String name;
  
  public Student(String name) {
    this.name = name;
  }
  
  public void setName(String name) {
    this.name = name;
  }
}

3.方法命名

(1)使用動詞命名方法,方法名中的第一個單詞小寫,其後的每一個單詞的第一個字母大寫。

方法表示動做,採用動詞命名。大寫能夠把名字裏的各個單詞很明確的區分開,首字母小寫則能夠將方法調用和構造方法區分開。

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中屬性訪問函數的方法的命名規範

JavaBeans規範爲方法創建了一套命名規範,用來訪問JavaBeans實現的屬性。在任何類中定義方法都應該使用這些規範,不管是否實現了Bean。
JavaBean用is開頭的方法公開boolean屬性:

boolean isValid() {
  return this.isValid;
}

JavaBean用get開頭的方法對其餘屬性進行訪問:

string getName() {
  return this.name;
}

JavaBean用set開頭的方法對屬性進行寫入操做:

void setName() {
  this.name = name;
}

4.類命名

採用名詞命名類,類名中的每一個單詞的第一個字母大寫。

類用來定義對象或者事物,應該採用名詞形式。大寫能夠明顯地區分名字中各個單詞,首字母大寫則能夠區分變量名以及類名或者接口名。

class CustomerAccount {
  ···
}

5.接口命名

採用名詞或者形容詞命名接口,接口中的每一個單詞的第一個字母大寫。

接口描述一個對象的能力或者使聲明對象可以提供的服務。

a.使用名詞給做爲服務聲明的接口命名:

public interface ActionListener {
  public void actionPerformed(ActionEvent e);
}

b.使用形容詞來爲描述某種能力的接口命名:

public interface Runnable {
  public void run();
}

大多數的接口命名都是採用形容詞,這些形容詞由動詞加上able或者ible後綴得來。更能表示接口是表示一種能力的本質含義。

6.包命名

(1)使用單獨的小寫動詞做爲每一個包的根名

包名裏必須包含一個單獨的小寫詞,可以清晰體現包的用途。包名也能夠包含一個有實際意義的縮寫,例如Java標準包的java.io

(2)用你所在組織的域名的倒序小寫的形式做爲包名字的根限定詞

例如,一個公司的域名爲 weikanwave.com,該公司發佈了一款名爲server的服務器應用程序,那麼該公司將該包命名爲com.weikanwave.server。 以上內容就是本篇文章的所有內容,若是有補充或者不妥之處還請各位不吝賜教,下一篇咱們將學習Java的文檔規範。

相關文章
相關標籤/搜索