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。

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 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/IEEE 754)算術規范
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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM