2017版的阿里java開發(fā)手冊(cè):比較多,只能復(fù)制一部分,你可以去百度具體的
創(chuàng)新互聯(lián)建站網(wǎng)站建設(shè)服務(wù)商,為中小企業(yè)提供網(wǎng)站建設(shè)、成都網(wǎng)站設(shè)計(jì)服務(wù),網(wǎng)站設(shè)計(jì),網(wǎng)站改版維護(hù)等一站式綜合服務(wù)型公司,專業(yè)打造企業(yè)形象網(wǎng)站,讓您在眾多競(jìng)爭(zhēng)對(duì)手中脫穎而出創(chuàng)新互聯(lián)建站。
一、編程規(guī)約??
(一)?命名規(guī)約??
1.?【強(qiáng)制】?代碼中的命名均不能以下劃線或美元符號(hào)開始,也不能以下劃線或美元符號(hào)結(jié)束。?
反例:?_name?/?__name?/?$Object?/?name_?/?name$?/?Object$?
2.?【強(qiáng)制】?代碼中的命名嚴(yán)禁使用拼音與英文混合的方式,更不允許直接使用中文的方式。?
說(shuō)明:正確的英文拼寫和語(yǔ)法可以讓閱讀者易于理解,避免歧義。注意,即使純拼音命名方式
也要避免采用。?
反例:?DaZhePromotion?[打折]?/?getPingfenByName()?[評(píng)分]?/?int?某變量?=?3?
正例:?alibaba?/?taobao?/?youku?/?hangzhou?等國(guó)際通用的名稱,可視同英文。?
3.?【強(qiáng)制】類名使用?UpperCamelCase?風(fēng)格,必須遵從駝峰形式,但以下情形例外:(領(lǐng)域模型
的相關(guān)命名)DO?/?BO?/?DTO?/?VO?等。?
正例:MarcoPolo?/?UserDO?/?XmlService?/?TcpUdpDeal?/?TaPromotion?
反例:macroPolo?/?UserDo?/?XMLService?/?TCPUDPDeal?/?TAPromotion?
4.?【強(qiáng)制】方法名、參數(shù)名、成員變量、局部變量都統(tǒng)一使用?lowerCamelCase?風(fēng)格,必須遵從
駝峰形式。?
正例:?localValue?/?getHttpMessage()?/?inputUserId?
5.?【強(qiáng)制】常量命名全部大寫,單詞間用下劃線隔開,力求語(yǔ)義表達(dá)完整清楚,不要嫌名字長(zhǎng)。??
正例:?MAX_STOCK_COUNT?
反例:?MAX_COUNT?
6.?【強(qiáng)制】抽象類命名使用?Abstract?或?Base?開頭;異常類命名使用?Exception?結(jié)尾;測(cè)試類
命名以它要測(cè)試的類的名稱開始,以?Test?結(jié)尾。?
7.?【強(qiáng)制】中括號(hào)是數(shù)組類型的一部分,數(shù)組定義如下:String[]?args;?
反例:使用?String?args[]的方式來(lái)定義。?
8.?【強(qiáng)制】POJO?類中布爾類型的變量,都不要加?is,否則部分框架解析會(huì)引起序列化錯(cuò)誤。?
反例:定義為基本數(shù)據(jù)類型?Boolean?isSuccess;的屬性,它的方法也是?isSuccess(),RPC
框架在反向解析的時(shí)候,“以為”對(duì)應(yīng)的屬性名稱是?success,導(dǎo)致屬性獲取不到,進(jìn)而拋出異
常。?
9.?【強(qiáng)制】包名統(tǒng)一使用小寫,點(diǎn)分隔符之間有且僅有一個(gè)自然語(yǔ)義的英語(yǔ)單詞。包名統(tǒng)一使用
單數(shù)形式,但是類名如果有復(fù)數(shù)含義,類名可以使用復(fù)數(shù)形式。?
正例:?應(yīng)用工具類包名為?com.alibaba.open.util、類名為?MessageUtils(此規(guī)則參考
spring?的框架結(jié)構(gòu))?
10.?【強(qiáng)制】杜絕完全不規(guī)范的縮寫,避免望文不知義。?
反例:?AbstractClass“縮寫”命名成?AbsClass;condition“縮寫”命名成?condi,此類
隨意縮寫嚴(yán)重降低了代碼的可閱讀性。?
11.?【推薦】如果使用到了設(shè)計(jì)模式,建議在類名中體現(xiàn)出具體模式。?
說(shuō)明:將設(shè)計(jì)模式體現(xiàn)在名字中,有利于閱讀者快速理解架構(gòu)設(shè)計(jì)思想。?
正例:public?class?OrderFactory;?
public?class?LoginProxy;?
public?class?ResourceObserver;?
12.?【推薦】接口類中的方法和屬性不要加任何修飾符號(hào)(public?也不要加),保持代碼的簡(jiǎn)潔
性,并加上有效的?Javadoc?注釋。盡量不要在接口里定義變量,如果一定要定義變量,肯定是
與接口方法相關(guān),并且是整個(gè)應(yīng)用的基礎(chǔ)常量。?
正例:接口方法簽名:void?f();?
接口基礎(chǔ)常量表示:String?COMPANY?=?"alibaba";?
反例:接口方法定義:public?abstract?void?f();?
說(shuō)明:JDK8?中接口允許有默認(rèn)實(shí)現(xiàn),那么這個(gè)?default?方法,是對(duì)所有實(shí)現(xiàn)類都有價(jià)值的默
認(rèn)實(shí)現(xiàn)。?
13.?接口和實(shí)現(xiàn)類的命名有兩套規(guī)則:?
1)【強(qiáng)制】對(duì)于?Service?和?DAO?類,基于?SOA?的理念,暴露出來(lái)的服務(wù)一定是接口,內(nèi)部
的實(shí)現(xiàn)類用?Impl?的后綴與接口區(qū)別。?
正例:CacheServiceImpl?實(shí)現(xiàn)?CacheService?接口。?
2)??【推薦】??如果是形容能力的接口名稱,?取對(duì)應(yīng)的形容詞做接口名?(通常是–able?的形式)?。?
正例:AbstractTranslator?實(shí)現(xiàn)?Translatable。?
14.?【參考】枚舉類名建議帶上?Enum?后綴,枚舉成員名稱需要全大寫,單詞間用下劃線隔開。?
說(shuō)明:枚舉其實(shí)就是特殊的常量類,且構(gòu)造方法被默認(rèn)強(qiáng)制是私有。?
正例:枚舉名字:DealStatusEnum,成員名稱:SUCCESS?/?UNKOWN_REASON。?
15.?【參考】各層命名規(guī)約:??
A)?Service/DAO?層方法命名規(guī)約?
1)?獲取單個(gè)對(duì)象的方法用?get?做前綴。?
2)?獲取多個(gè)對(duì)象的方法用?list?做前綴。?
3)?獲取統(tǒng)計(jì)值的方法用?count?做前綴。?
4)?插入的方法用?save(推薦)或?insert?做前綴。?
5)?刪除的方法用?remove(推薦)或?delete?做前綴。?
6)?修改的方法用?update?做前綴。?
B)?領(lǐng)域模型命名規(guī)約?
1)?數(shù)據(jù)對(duì)象:xxxDO,xxx?即為數(shù)據(jù)表名。?
2)?數(shù)據(jù)傳輸對(duì)象:xxxDTO,xxx?為業(yè)務(wù)領(lǐng)域相關(guān)的名稱。?
3)?展示對(duì)象:xxxVO,xxx?一般為網(wǎng)頁(yè)名稱。?
4)?POJO?是?DO/DTO/BO/VO?的統(tǒng)稱,禁止命名成?xxxPOJO。?
(二)?常量定義??
1.?【強(qiáng)制】不允許出現(xiàn)任何魔法值(即未經(jīng)定義的常量)直接出現(xiàn)在代碼中。?
反例:?String?key?=?"Id#taobao_"+tradeId;?
cache.put(key,?value);?
2.?【強(qiáng)制】long?或者?Long?初始賦值時(shí),必須使用大寫的?L,不能是小寫的?l,小寫容易跟數(shù)字
1?混淆,造成誤解。?
說(shuō)明:Long?a?=?2l;?寫的是數(shù)字的?21,還是?Long?型的?2??
3.?【推薦】不要使用一個(gè)常量類維護(hù)所有常量,應(yīng)該按常量功能進(jìn)行歸類,分開維護(hù)。如:緩存
相關(guān)的常量放在類:CacheConsts?下;系統(tǒng)配置相關(guān)的常量放在類:ConfigConsts?下。?
說(shuō)明:大而全的常量類,非得使用查找功能才能定位到修改的常量,不利于理解和維護(hù)。?
4.?【推薦】常量的復(fù)用層次有五層:跨應(yīng)用共享常量、應(yīng)用內(nèi)共享常量、子工程內(nèi)共享常量、包
內(nèi)共享常量、類內(nèi)共享常量。?
1)?跨應(yīng)用共享常量:放置在二方庫(kù)中,通常是?client.jar?中的?constant?目錄下。?
2)?應(yīng)用內(nèi)共享常量:放置在一方庫(kù)的?modules?中的?constant?目錄下。?
反例:易懂變量也要統(tǒng)一定義成應(yīng)用內(nèi)共享常量,兩位攻城師在兩個(gè)類中分別定義了表示
“是”的變量:?
類?A?中:public?static?final?String?YES?=?"yes";?
類?B?中:public?static?final?String?YES?=?"y";?
A.YES.equals(B.YES),預(yù)期是?true,但實(shí)際返回為?false,導(dǎo)致產(chǎn)生線上問題。?
3)?子工程內(nèi)部共享常量:即在當(dāng)前子工程的?constant?目錄下。?
4)?包內(nèi)共享常量:即在當(dāng)前包下單獨(dú)的?constant?目錄下。?
5)?類內(nèi)共享常量:直接在類內(nèi)部?private?static?final?定義。?
5.?【推薦】如果變量值僅在一個(gè)范圍內(nèi)變化用?Enum?類。如果還帶有名稱之外的延伸屬性,必須
使用?Enum?類,下面正例中的數(shù)字就是延伸信息,表示星期幾。?
正例:public?Enum?{?MONDAY(1),?TUESDAY(2),?WEDNESDAY(3),?THURSDAY(4),?FRIDAY(5),?SATURDAY(6),?
SUNDAY(7);}?
(三)?格式規(guī)約??
1.?【強(qiáng)制】大括號(hào)的使用約定。如果是大括號(hào)內(nèi)為空,則簡(jiǎn)潔地寫成{}即可,不需要換行;如果
是非空代碼塊則:?
1)?左大括號(hào)前不換行。?
2)?左大括號(hào)后換行。?
3)?右大括號(hào)前換行。?
4)?右大括號(hào)后還有?else?等代碼則不換行;表示終止右大括號(hào)后必須換行。?
2.?【強(qiáng)制】?左括號(hào)和后一個(gè)字符之間不出現(xiàn)空格;同樣,右括號(hào)和前一個(gè)字符之間也不出現(xiàn)空
格。詳見第?5?條下方正例提示。?
3.?【強(qiáng)制】if/for/while/switch/do?等保留字與左右括號(hào)之間都必須加空格。?
4.?【強(qiáng)制】任何運(yùn)算符左右必須加一個(gè)空格。?
說(shuō)明:運(yùn)算符包括賦值運(yùn)算符=、邏輯運(yùn)算符、加減乘除符號(hào)、三目運(yùn)算符等。?
5.?【強(qiáng)制】縮進(jìn)采用?4?個(gè)空格,禁止使用?tab?字符。?
說(shuō)明:如果使用?tab?縮進(jìn),必須設(shè)置?1?個(gè)?tab?為?4?個(gè)空格。IDEA?設(shè)置?tab?為?4?個(gè)空格時(shí),
請(qǐng)勿勾選?Use?tab?character;而在?eclipse?中,必須勾選?insert?spaces?for?tabs。?
正例:?(涉及?1-5?點(diǎn))?
public?static?void?main(String[]?args)?{??????
//?縮進(jìn)?4?個(gè)空格??????
String?say?=?"hello";??????
//?運(yùn)算符的左右必須有一個(gè)空格??????
int?flag?=?0;?????
//?關(guān)鍵詞?if?與括號(hào)之間必須有一個(gè)空格,括號(hào)內(nèi)的?f?與左括號(hào),0?與右括號(hào)不需要空格??????
if?(flag?==?0)?{??????????
System.out.println(say);??????
}??????
//?左大括號(hào)前加空格且不換行;左大括號(hào)后換行??????
if?(flag?==?1)?{??????????
System.out.println("world");??????
//?右大括號(hào)前換行,右大括號(hào)后有?else,不用換行??????
阿里巴巴?Java?開發(fā)手冊(cè)?
——禁止用于商業(yè)用途,違者必究——?????????????????????????6?/?37?
}?else?{????????????
System.out.println("ok");??????
//?在右大括號(hào)后直接結(jié)束,則必須換行??????
}??
}??
6.?【強(qiáng)制】單行字符數(shù)限制不超過(guò)?120?個(gè),超出需要換行,換行時(shí)遵循如下原則:?
1)?第二行相對(duì)第一行縮進(jìn)?4?個(gè)空格,從第三行開始,不再繼續(xù)縮進(jìn),參考示例。?
2)?運(yùn)算符與下文一起換行。?
3)?方法調(diào)用的點(diǎn)符號(hào)與下文一起換行。?
4)?在多個(gè)參數(shù)超長(zhǎng),逗號(hào)后進(jìn)行換行。?
5)?在括號(hào)前不要換行,見反例。?
正例:?
StringBuffer?sb?=?new?StringBuffer();??
//超過(guò)?120?個(gè)字符的情況下,換行縮進(jìn)?4?個(gè)空格,并且方法前的點(diǎn)符號(hào)一起換行??
sb.append("zi").append("xin")...????
.append("huang")...??
.append("huang")...??
.append("huang");??
反例:?
StringBuffer?sb?=?new?StringBuffer();??
//超過(guò)?120?個(gè)字符的情況下,不要在括號(hào)前換行??
sb.append("zi").append("xin")...append??????
("huang");???
//參數(shù)很多的方法調(diào)用可能超過(guò)?120?個(gè)字符,不要在逗號(hào)前換行?
method(args1,?args2,?args3,?...??????
,?argsX);??
7.?【強(qiáng)制】方法參數(shù)在定義和傳入時(shí),多個(gè)參數(shù)逗號(hào)后邊必須加空格。?
正例:下例中實(shí)參的"a",后邊必須要有一個(gè)空格。?
method("a",?"b",?"c");??
8.?【強(qiáng)制】IDE?的?text?file?encoding?設(shè)置為?UTF-8;?IDE?中文件的換行符使用?Unix?格式,
不要使用?windows?格式。?
9.?【推薦】沒有必要增加若干空格來(lái)使某一行的字符與上一行的相應(yīng)字符對(duì)齊。?
正例:?
int?a?=?3;??
long?b?=?4L;??
float?c?=?5F;??
StringBuffer?sb?=?new?StringBuffer();??
說(shuō)明:增加?sb?這個(gè)變量,如果需要對(duì)齊,則給?a、b、c?都要增加幾個(gè)空格,在變量比較多的
情況下,是一種累贅的事情。?
阿里巴巴?Java?開發(fā)手冊(cè)?
——禁止用于商業(yè)用途,違者必究——?????????????????????????7?/?37?
10.?【推薦】方法體內(nèi)的執(zhí)行語(yǔ)句組、變量的定義語(yǔ)句組、不同的業(yè)務(wù)邏輯之間或者不同的語(yǔ)義
之間插入一個(gè)空行。相同業(yè)務(wù)邏輯和語(yǔ)義之間不需要插入空行。?
說(shuō)明:沒有必要插入多行空格進(jìn)行隔開。?
(四)?OOP?規(guī)約??
1.?【強(qiáng)制】避免通過(guò)一個(gè)類的對(duì)象引用訪問此類的靜態(tài)變量或靜態(tài)方法,無(wú)謂增加編譯器解析成
本,直接用類名來(lái)訪問即可。?
2.?【強(qiáng)制】所有的覆寫方法,必須加@Override?注解。?
反例:getObject()與?get0bject()的問題。一個(gè)是字母的?O,一個(gè)是數(shù)字的?0,加@Override
可以準(zhǔn)確判斷是否覆蓋成功。另外,如果在抽象類中對(duì)方法簽名進(jìn)行修改,其實(shí)現(xiàn)類會(huì)馬上編
譯報(bào)錯(cuò)。?
3.?【強(qiáng)制】相同參數(shù)類型,相同業(yè)務(wù)含義,才可以使用?Java?的可變參數(shù),避免使用?Object。?
說(shuō)明:可變參數(shù)必須放置在參數(shù)列表的最后。(提倡同學(xué)們盡量不用可變參數(shù)編程)?
正例:public?User?getUsers(String?type,?Integer...?ids)?
4.?【強(qiáng)制】外部正在調(diào)用或者二方庫(kù)依賴的接口,不允許修改方法簽名,避免對(duì)接口調(diào)用方產(chǎn)生
影響。接口過(guò)時(shí)必須加@Deprecated?注解,并清晰地說(shuō)明采用的新接口或者新服務(wù)是什么。?
5.?【強(qiáng)制】不能使用過(guò)時(shí)的類或方法。?
說(shuō)明:java點(diǎn)虐 .URLDecoder?中的方法?decode(String?encodeStr)?這個(gè)方法已經(jīng)過(guò)時(shí),應(yīng)
該使用雙參數(shù)?decode(String?source,?String?encode)。接口提供方既然明確是過(guò)時(shí)接口,
那么有義務(wù)同時(shí)提供新的接口;作為調(diào)用方來(lái)說(shuō),有義務(wù)去考證過(guò)時(shí)方法的新實(shí)現(xiàn)是什么。?
6.?【強(qiáng)制】Object?的?equals?方法容易拋空指針異常,應(yīng)使用常量或確定有值的對(duì)象來(lái)調(diào)用
equals。?
正例:?"test".equals(object);?
反例:?object.equals("test");?
說(shuō)明:推薦使用?java.util.Objects#equals?(JDK7?引入的工具類)?
7.?【強(qiáng)制】所有的相同類型的包裝類對(duì)象之間值的比較,全部使用?equals?方法比較。?
說(shuō)明:對(duì)于?Integer?var?=??在-128?至?127?之間的賦值,Integer?對(duì)象是在
IntegerCache.cache?產(chǎn)生,?會(huì)復(fù)用已有對(duì)象,?這個(gè)區(qū)間內(nèi)的?Integer?值可以直接使用==進(jìn)行
判斷,?但是這個(gè)區(qū)間之外的所有數(shù)據(jù),?都會(huì)在堆上產(chǎn)生,?并不會(huì)復(fù)用已有對(duì)象,?這是一個(gè)大坑,
推薦使用?equals?方法進(jìn)行判斷。
8.?關(guān)于基本數(shù)據(jù)類型與包裝數(shù)據(jù)類型的使用標(biāo)準(zhǔn)如下:?
1)?【強(qiáng)制】所有的?POJO?類屬性必須使用包裝數(shù)據(jù)類型。?
2)?【強(qiáng)制】RPC?方法的返回值和參數(shù)必須使用包裝數(shù)據(jù)類型。?
3)?【推薦】所有的局部變量使用基本數(shù)據(jù)類型。?
說(shuō)明:POJO?類屬性沒有初值是提醒使用者在需要使用時(shí),必須自己顯式地進(jìn)行賦值,任何
NPE?問題,或者入庫(kù)檢查,都由使用者來(lái)保證。?
正例:數(shù)據(jù)庫(kù)的查詢結(jié)果可能是?null,因?yàn)樽詣?dòng)拆箱,用基本數(shù)據(jù)類型接收有?NPE?風(fēng)險(xiǎn)。?
反例:比如顯示成交總額漲跌情況,即正負(fù)?x%,x?為基本數(shù)據(jù)類型,調(diào)用的?RPC?服務(wù),調(diào)用
不成功時(shí),返回的是默認(rèn)值,頁(yè)面顯示:0%,這是不合理的,應(yīng)該顯示成中劃線-。所以包裝
數(shù)據(jù)類型的?null?值,能夠表示額外的信息,如:遠(yuǎn)程調(diào)用失敗,異常退出。?
9.?【強(qiáng)制】定義?DO/DTO/VO?等?POJO?類時(shí),不要設(shè)定任何屬性默認(rèn)值。?
反例:POJO?類的?gmtCreate?默認(rèn)值為?new?Date();但是這個(gè)屬性在數(shù)據(jù)提取時(shí)并沒有置入具
體值,在更新其它字段時(shí)又附帶更新了此字段,導(dǎo)致創(chuàng)建時(shí)間被修改成當(dāng)前時(shí)間。?
10.?【強(qiáng)制】序列化類新增屬性時(shí),請(qǐng)不要修改?serialVersionUID?字段,避免反序列失?。蝗?/p>
果完全不兼容升級(jí),避免反序列化混亂,那么請(qǐng)修改?serialVersionUID?值。?
說(shuō)明:注意?serialVersionUID?不一致會(huì)拋出序列化運(yùn)行時(shí)異常。?
11.?【強(qiáng)制】構(gòu)造方法里面禁止加入任何業(yè)務(wù)邏輯,如果有初始化邏輯,請(qǐng)放在?init?方法中。?
12.?【強(qiáng)制】POJO?類必須寫?toString?方法。使用?IDE?的中工具:source?generate?toString
時(shí),如果繼承了另一個(gè)?POJO?類,注意在前面加一下?super.toString。?
說(shuō)明:在方法執(zhí)行拋出異常時(shí),可以直接調(diào)用?POJO?的?toString()方法打印其屬性值,便于排
查問題。?
13.?【推薦】使用索引訪問用?String?的?split?方法得到的數(shù)組時(shí),需做最后一個(gè)分隔符后有無(wú)
內(nèi)容的檢查,否則會(huì)有拋?IndexOutOfBoundsException?的風(fēng)險(xiǎn)。?
說(shuō)明:?
String?str?=?"a,b,c,,";??
String[]?ary?=?str.split(",");??
//預(yù)期大于?3,結(jié)果是?3?
System.out.println(ary.length);??
14.?【推薦】當(dāng)一個(gè)類有多個(gè)構(gòu)造方法,或者多個(gè)同名方法,這些方法應(yīng)該按順序放置在一起,
便于閱讀。?
15.?【推薦】?類內(nèi)方法定義順序依次是:公有方法或保護(hù)方法??私有方法??getter/setter
方法。?
說(shuō)明:公有方法是類的調(diào)用者和維護(hù)者最關(guān)心的方法,首屏展示最好;保護(hù)方法雖然只是子類
關(guān)心,也可能是“模板設(shè)計(jì)模式”下的核心方法;而私有方法外部一般不需要特別關(guān)心,是一個(gè)
黑盒實(shí)現(xiàn);因?yàn)榉椒ㄐ畔r(jià)值較低,所有?Service?和?DAO?的?getter/setter?方法放在類體最
后。?
16.?【推薦】setter?方法中,參數(shù)名稱與類成員變量名稱一致,this.成員名?=?參數(shù)名。在
getter/setter?方法中,盡量不要增加業(yè)務(wù)邏輯,增加排查問題的難度。?
反例:?
public?Integer?getData()?{??????
if?(true)?{??
return?data?+?100;??
}?else?{?
return?data?-?100;?
}??
}??
17.?【推薦】循環(huán)體內(nèi),字符串的連接方式,使用?StringBuilder?的?append?方法進(jìn)行擴(kuò)展。?
反例:?
String?str?=?"start";??????
for?(int?I?=?0;?I??100;?i++)?{??????????
str?=?str?+?"hello";??????
}??
說(shuō)明:反編譯出的字節(jié)碼文件顯示每次循環(huán)都會(huì)?new?出一個(gè)?StringBuilder?對(duì)象,然后進(jìn)行
append?操作,最后通過(guò)?toString?方法返回?String?對(duì)象,造成內(nèi)存資源浪費(fèi)。?
18.?【推薦】下列情況,聲明成?final?會(huì)更有提示性:?
1)?不需要重新賦值的變量,包括類屬性、局部變量。?
2)?對(duì)象參數(shù)前加?final,表示不允許修改引用的指向。?
3)?類方法確定不允許被重寫。?
19.?【推薦】慎用?Object?的?clone?方法來(lái)拷貝對(duì)象。?
說(shuō)明:對(duì)象的?clone?方法默認(rèn)是淺拷貝,若想實(shí)現(xiàn)深拷貝需要重寫?clone?方法實(shí)現(xiàn)屬性對(duì)象
的拷貝。?
20.?【推薦】類成員與方法訪問控制從嚴(yán):?
1)?如果不允許外部直接通過(guò)?new?來(lái)創(chuàng)建對(duì)象,那么構(gòu)造方法必須是?private。?
2)?工具類不允許有?public?或?default?構(gòu)造方法。?
3)?類非?static?成員變量并且與子類共享,必須是?protected。??
4)?類非?static?成員變量并且僅在本類使用,必須是?private。?
5)?類?static?成員變量如果僅在本類使用,必須是?private。?
6)?若是?static?成員變量,必須考慮是否為?final。?
7)?類成員方法只供類內(nèi)部調(diào)用,必須是?private。??
8)?類成員方法只對(duì)繼承類公開,那么限制為?protected。?
說(shuō)明:任何類、方法、參數(shù)、變量,嚴(yán)控訪問范圍。過(guò)寬泛的訪問范圍,不利于模塊解耦。思
考:如果是一個(gè)?private?的方法,想刪除就刪除,可是一個(gè)?public?的?Service?方法,或者一
個(gè)?public?的成員變量,刪除一下,不得手心冒點(diǎn)汗嗎?變量像自己的小孩,盡量在自己的視
線內(nèi),變量作用域太大,如果無(wú)限制的到處跑,那么你會(huì)擔(dān)心的。
如果是idea的化,你安裝好插件之后,上面有兩個(gè)按鈕,你點(diǎn)那個(gè)綠色的,就會(huì)彈出下面的彈層,彈層里,會(huì)顯示你那些不符合代碼規(guī)范的代碼,然后你照著改就行了。Eclipse 應(yīng)該也差不多。還有一個(gè)小建議,
阿里巴巴java開發(fā)規(guī)約 出插件,這應(yīng)該是不久之前的事,你github上,搜到對(duì)應(yīng)的插件,上面自然有相關(guān)的教程。
點(diǎn)擊設(shè)置面板(Ctrl+alt+S),選擇“Paths”,在classpath標(biāo)簽項(xiàng)中將你在global libraries中創(chuàng)建的項(xiàng)選中就可以啦。在Global Libraries創(chuàng)建的項(xiàng)如果不被選擇,是不會(huì)添加到項(xiàng)目中的。
以卸載ADT插件為例:方法如下:
1、選擇 Help Install New Software;
2、在"Details" 面板中, 點(diǎn)擊"What is already installed?" 鏈接;
3、在Eclipse Installation Details 對(duì)話框中,選擇"Android DDMS"和"Android Development Tools" ,然后點(diǎn)擊Uninstall;
4、在下一個(gè)窗口中,確認(rèn)要?jiǎng)h除的ADT,然后點(diǎn)擊Finish進(jìn)行刪除;
5、重啟Eclipse.