1. 程式人生 > 其它 >Java基礎(4)-Java識別符號和關鍵字

Java基礎(4)-Java識別符號和關鍵字

任何一種計算機語言都離不開識別符號和關鍵字,今天我們來介紹下Java 的識別符號、關鍵字和保留字。

一、識別符號

在Java語言中,類、物件、方法、變數、介面和自定義資料型別等都有自己的名字,我們把這些名字統稱為識別符號。

1.1 識別符號的命名規則

  • 識別符號由數字(0~9)和字母(A~Z 和 a~z)、美元符號($)、下劃線(_)
  • 識別符號的第一個符號為字母、下劃線和美元符號,不能以數字開頭,後面可以是任何字母、數字、美元符號或下劃線
  • Java嚴格區分大小寫
  • 識別符號中不能出現空格
  • 識別符號的長度可以是任意的(在java虛擬機器規範中,識別符號是有長度限制的)
  • 關鍵字不能作為識別符號
  • 識別符號不能和**Java中預定義的字面常量(true、false、null)**名稱相同

1.2 識別符號的命名規範

阿里《Java開發手冊-泰山版》

下載地址
連結:https://pan.baidu.com/s/1b4cOdXWA3wF1KMRZP2ZYmg 
提取碼:iigm
1. 【強制】程式碼中的命名均不能以下劃線或美元符號開始,也不能以下劃線或美元符號結束。
反例:_name / __name / $name / name_ / name$ / name__
2. 【強制】所有程式設計相關的命名嚴禁使用拼音與英文混合的方式,更不允許直接使用中文的方式。
說明:正確的英文拼寫和語法可以讓閱讀者易於理解,避免歧義。注意,純拼音命名方式更要避免採用。
正例:ali / alibaba / taobao / cainiao/ aliyun/ youku / hangzhou 等國際通用的名稱,可視同英文。
反例:DaZhePromotion [打折] / getPingfenByName() [評分] / int 某變數 = 3
3. 【強制】類名使用 UpperCamelCase 風格,但以下情形例外:DO / BO / DTO / VO / AO / 
PO / UID 等。
正例:ForceCode / UserDO / HtmlDTO / XmlService / TcpUdpDeal / TaPromotion
反例:forcecode / UserDo / HTMLDto / XMLService / TCPUDPDeal / TAPromotion
4. 【強制】方法名、引數名、成員變數、區域性變數都統一使用 lowerCamelCase 風格。
正例: localValue / getHttpMessage() / inputUserId
5. 【強制】常量命名全部大寫,單詞間用下劃線隔開,力求語義表達完整清楚,不要嫌名字長。
正例:MAX_STOCK_COUNT / CACHE_EXPIRED_TIME
反例:MAX_COUNT / EXPIRED_TIME
6. 【強制】抽象類命名使用 Abstract 或 Base 開頭;異常類命名使用 Exception 結尾;測試類
命名以它要測試的類的名稱開始,以 Test 結尾。
7. 【強制】型別與中括號緊挨相連來表示陣列。
正例:定義整形陣列 int[] arrayDemo;
反例:在 main 引數中,使用 String args[]來定義。
8. 【強制】POJO 類中的任何布林型別的變數,都不要加 is 字首,否則部分框架解析會引起序列
化錯誤。
說明:在本文 MySQL 規約中的建表約定第一條,表達是與否的值採用 is_xxx 的命名方式,所以,需要在
<resultMap>設定從 is_xxx 到 xxx 的對映關係。
反例:定義為基本資料型別 Boolean isDeleted 的屬性,它的方法也是 isDeleted(),框架在反向解析的時
候,“誤以為”對應的屬性名稱是 deleted,導致屬性獲取不到,進而丟擲異常。
9. 【強制】包名統一使用小寫,點分隔符之間有且僅有一個自然語義的英語單詞。包名統一使用
單數形式,但是類名如果有複數含義,類名可以使用複數形式。
正例:應用工具類包名為 com.alibaba.ei.kunlun.aap.util、類名為 MessageUtils(此規則參考 spring 的
框架結構
10.【強制】避免在子父類的成員變數之間、或者不同程式碼塊的區域性變數之間採用完全相同的命名,
使可讀性降低。
說明:子類、父類成員變數名相同,即使是 public 型別的變數也是能夠通過編譯,而區域性變數在同一方法
內的不同程式碼塊中同名也是合法的,但是要避免使用。對於非 setter/getter 的引數名稱也要避免與成員變
量名稱相同。

反例:
public class ConfusingName {
 public int stock;
 // 非 setter/getter 的引數名稱,不允許與本類成員變數同名
 public void get(String alibaba) {
 if (condition) {
 final int money = 666;
 // ...
 }
 for (int i = 0; i < 10; i++) {
 // 在同一方法體中,不允許與其它程式碼塊中的 money 命名相同
 final int money = 15978;
 // ...
 }
 }
}
class Son extends ConfusingName {
 // 不允許與父類的成員變數名稱相同
 public int stock;
}
11.【強制】杜絕完全不規範的縮寫,避免望文不知義。
反例:AbstractClass“縮寫”命名成 AbsClass;condition“縮寫”命名成 condi,此類隨意縮寫嚴重降
低了程式碼的可閱讀性。
12.【推薦】為了達到程式碼自解釋的目標,任何自定義程式設計元素在命名時,使用盡量完整的單片語
合來表達。
正例:在 JDK 中,對某個物件引用的 volatile 欄位進行原子更新的類名為:AtomicReferenceFieldUpdater。
反例:常見的方法內變數為 int a;的定義方式。
13.【推薦】在常量與變數的命名時,表示型別的名詞放在詞尾,以提升辨識度。
正例:startTime / workQueue / nameList / TERMINATED_THREAD_COUNT
反例:startedAt / QueueOfWork / listName / COUNT_TERMINATED_THREAD
14.【推薦】如果模組、介面、類、方法使用了設計模式,在命名時需體現出具體模式。
說明:將設計模式體現在名字中,有利於閱讀者快速理解架構設計理念。
正例: public class OrderFactory;
 public class LoginProxy;
 public class ResourceObserver;
15.【推薦】介面類中的方法和屬性不要加任何修飾符號(public 也不要加),保持程式碼的簡潔
性,並加上有效的 Javadoc 註釋。儘量不要在接口裡定義變數,如果一定要定義變數,確定
與介面方法相關,並且是整個應用的基礎常量。
正例:介面方法簽名 void commit();
 介面基礎常量 String COMPANY = "alibaba";
反例:介面方法定義 public abstract void f();
說明:JDK8 中介面允許有預設實現,那麼這個 default 方法,是對所有實現類都有價值的預設實現。
16.介面和實現類的命名有兩套規則:
1)【強制】對於 Service 和 DAO 類,基於 SOA 的理念,暴露出來的服務一定是介面,內部的實現類用
Impl 的字尾與介面區別。
正例:CacheServiceImpl 實現 CacheService 介面。
2)【推薦】如果是形容能力的介面名稱,取對應的形容詞為介面名(通常是–able 的形容詞)。
正例:AbstractTranslator 實現 Translatable 介面。
17.【參考】列舉類名帶上 Enum 字尾,列舉成員名稱需要全大寫,單詞間用下劃線隔開。
說明:列舉其實就是特殊的常量類,且構造方法被預設強制是私有。
正例:列舉名字為 ProcessStatusEnum 的成員名稱:SUCCESS / UNKNOWN_REASON。
18.【參考】各層命名規約:
A) Service/DAO 層方法命名規約
1) 獲取單個物件的方法用 get 做字首。
2) 獲取多個物件的方法用 list 做字首,複數結尾,如:listObjects。
3) 獲取統計值的方法用 count 做字首。
4) 插入的方法用 save/insert 做字首。
5) 刪除的方法用 remove/delete 做字首。
6) 修改的方法用 update 做字首。

B) 領域模型命名規約
1) 資料物件:xxxDO,xxx 即為資料表名。
2) 資料傳輸物件:xxxDTO,xxx 為業務領域相關的名稱。
3) 展示物件:xxxVO,xxx 一般為網頁名稱。
4) POJO 是 DO/DTO/BO/VO 的統稱,禁止命名成 xxxPOJO。

識別符號用來命名常量、變數、類和類的物件等。因此,一個良好的程式設計習慣要求命名識別符號時,應賦予它一個有意義或有用途的名字。

二、關鍵字

在Java語言中有些識別符號是有著特殊含義的,而我們把這些有著特殊含義的識別符號稱為關鍵字,有時也叫保留字。關鍵字(或者保留字)是對編譯器有特殊意義的固定單詞,一般用於表示一種資料型別,或者表示程式的結構,不能在程式中做其他目的使用。關鍵字具有專門的意義和用途,和自定義的識別符號不同,不能當作一般的識別符號來使用。

**特點:**關鍵字中所有字母都為小寫。

2.1 系統預留關鍵字有哪些

Java 語言目前定義了 48個關鍵字 ,2個保留字,3個預定義常量。這些關鍵字不能作為變數名、類名和方法名來使用。

48個關鍵字:abstract、assert、boolean、break、byte、case、catch、char、class、continue、default、do、double、else、enum、extends、final、finally、float、for、if、implements、import、int、interface、instanceof、long、native、new、package、private、protected、public、return、short、static、strictfp、super、switch、synchronized、this、throw、throws、transient、try、void、volatile、while。 2)2個保留字(現在沒用以後可能用到作為關鍵字):goto、const。 3)3個預定義常量:true、false、null。

abstractassertbooleanbreakbyte
case catch char class continue
default do double else enum
extends final finally float for
if implements import int interface
instanceof long native new package
private protected public return short
static strictfp super switch synchronized
this throw throws transient try
void volatile while goto const
true false null

2.2 關鍵字的含義

關鍵字含義
abstract 表明類或者成員方法具有抽象屬性
assert 斷言,用來進行程式除錯
boolean 基本資料型別之一,宣告布林型別的關鍵字
break 提前跳出一個塊
byte 基本資料型別之一,位元組型別
case 用在switch語句之中,表示其中的一個分支
catch 用在異常處理中,用來捕捉異常
char 基本資料型別之一,字元型別
class 宣告一個類
const 保留關鍵字,沒有具體含義
continue 回到一個塊的開始處
default 預設,例如,用在switch語句中,表明一個預設的分支。Java8 中也作用於宣告介面函式的預設實現
do 用在do-while迴圈結構中
double 基本資料型別之一,雙精度浮點數型別
else 用在條件語句中,表明當條件不成立時的分支
enum 列舉
extends 表明一個型別是另一個型別的子型別。對於類,可以是另一個類或者抽象類;對於介面,可以是另一個介面
final 用來說明最終屬性,表明一個類不能派生出子類,或者成員方法不能被覆蓋,或者成員域的值不能被改變,用來定義常量
finally 用於處理異常情況,用來宣告一個基本肯定會被執行到的語句塊
float 基本資料型別之一,單精度浮點數型別
for 一種迴圈結構的引導詞
goto 保留關鍵字,沒有具體含義
if 條件語句的引導詞
implements 表明一個類實現了給定的介面
import 表明要訪問指定的類或包
instanceof 用來測試一個物件是否是指定型別的例項物件
int 基本資料型別之一,整數型別
interface 介面
long 基本資料型別之一,長整數型別
native 用來宣告一個方法是由與計算機相關的語言(如C/C++/FORTRAN語言)實現的
new 用來建立新例項物件
package
private 一種訪問控制方式:私用模式
protected 一種訪問控制方式:保護模式
public 一種訪問控制方式:共用模式
return 從成員方法中返回資料
short 基本資料型別之一,短整數型別
static 表明具有靜態屬性
strictfp 用來宣告FP_strict(單精度或雙精度浮點數)表示式遵循[IEEE 754](https://baike.baidu.com/item/IEEE754)算術規範
super 表明當前物件的父型別的引用或者父型別的構造方法
switch 分支語句結構的引導詞
synchronized 表明一段程式碼需要同步執行
this 指向當前例項物件的引用
throw 丟擲一個異常
throws 宣告在當前定義的成員方法中所有需要丟擲的異常
transient 宣告不用序列化的成員域
try 嘗試一個可能丟擲異常的程式塊
void 聲明當前成員方法沒有返回值
volatile 表明兩個或者多個變數必須同步地發生變化
while 用在迴圈結構中
goto 指定跳轉到標籤,找到標籤後,程式將處理從下一行開始的命令
const 用於修改欄位或區域性變數的宣告。它指定欄位或區域性變數的值是常數,不能被修改
true 布林值真
false 布林值假
null

2.3 關鍵字按用途分組

資料型別(8):byte、short、int、long、boolean、float、double、char 流程控制(10):if、else、do、while、for、switch、case、default、break、continue 修飾符(12):public、protected、private、final、void、static、strict、abstract、transient、synchronized、volatile、native

方法、類、介面、包、異常等(17):enum、class、interface、package、import、extends、implements、this、supper、instanceof、new、throw、throws、try、catch、finally、return 其他(6):assert、true、false、null、goto、const