日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > java >内容正文

java

java replaceall删除中括号和内容_「技术文章」《阿里巴巴 Java 开发手册》精华摘要...

發(fā)布時(shí)間:2024/2/28 java 48 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java replaceall删除中括号和内容_「技术文章」《阿里巴巴 Java 开发手册》精华摘要... 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一、寫在開(kāi)頭

Java作為一個(gè)編程界最流行的語(yǔ)言之一,有著很強(qiáng)的生命力。代碼的編寫規(guī)范也是不容忽視的,今天,我就把自己閱讀的國(guó)內(nèi)的互聯(lián)網(wǎng)巨頭阿里巴巴的《阿里巴巴 Java 開(kāi)發(fā)手冊(cè)》一些精彩內(nèi)容摘錄如下。以饗讀者。《阿里巴巴Java開(kāi)發(fā)手冊(cè) 終極版v1.3.0.pdf》 下載地址

《阿里巴巴Java開(kāi)發(fā)手冊(cè) 終極版v1.3.0.pdf》

二、精彩摘錄

4.1)【命名風(fēng)格】


【01 強(qiáng)制】抽象類命名使用 Abstract 或 Base 開(kāi)頭;異常類命名使用 Exception 結(jié)尾;測(cè)試類 命名以它要測(cè)試的類的名稱開(kāi)始,以 Test 結(jié)尾。

【02 強(qiáng)制】中括號(hào)是數(shù)組類型的一部分,數(shù)組定義如下:String[] args; 反例:使用 String args[]的方式來(lái)定義。

【03強(qiáng)制】POJO 類中布爾類型的變量,都不要加 is,否則部分框架解析會(huì)引起序列化錯(cuò)誤。

==反例:定義為基本數(shù)據(jù)類型 Boolean isDeleted;的屬性,它的方法也是 isDeleted(), 框架在反向解析的時(shí)候,“以為”對(duì)應(yīng)的屬性名稱是 deleted,導(dǎo)致屬性獲取不到,進(jìn)而拋出異 常。

【04 強(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))

【05 推薦】如果模塊、接口、類、方法使用了設(shè)計(jì)模式,在命名時(shí)體現(xiàn)出具體模式

【06 推薦】接口類中的方法和屬性不要加任何修飾符號(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)。

【不是很理解--todo】接口和實(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。

4.2)【常量定義】


【不是很理解--todo】【強(qiáng)制】不允許任何魔法值(即未經(jīng)定義的常量)直接出現(xiàn)在代碼中。 反例:String key = "Id#taobao_" + tradeId; cache.put(key, value);

4.3)【代碼格式】


【01 強(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)后必須換行。

【02 強(qiáng)制】if/for/while/switch/do 等保留字與括號(hào)之間都必須加空格。

【03 強(qiáng)制】任何二目、三目運(yùn)算符的左右兩邊都需要加一個(gè)空格。 說(shuō)明:運(yùn)算符包括賦值運(yùn)算符=、邏輯運(yùn)算符&&、加減乘除符號(hào)等。

【04 強(qiáng)制】注釋的雙斜線與注釋內(nèi)容之間有且僅有一個(gè)空格。 正例:// 注釋內(nèi)容,注意在//和注釋內(nèi)容之間有一個(gè)空格。

4.4)【OOP規(guī)約】


【01 強(qiáng)制】Object 的 equals 方法容易拋空指針異常,應(yīng)使用常量或確定有值的對(duì)象來(lái)調(diào)用 equals。

==正例:"test".equals(object); 反例:object.equals("test"); 說(shuō)明:推薦使用 java.util.Objects#equals(JDK7 引入的工具類)

【02 強(qiáng)制】所有的相同類型的包裝類對(duì)象之間值的比較,全部使用 equals 方法比較。

說(shuō)明:對(duì)于 Integer var = ? 在-128 至 127 范圍內(nèi)的賦值,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)行判斷。

關(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 類屬性沒(méi)有初值是提醒使用者在需要使用時(shí),必須自己顯式地進(jìn)行賦值,任何 NPE (即空指針異常)問(wèn)題,或者入庫(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)用失敗,異常退出。

參考:Java中基本數(shù)據(jù)類型和包裝類

【03 強(qiáng)制】序列化類新增屬性時(shí),請(qǐng)不要修改 serialVersionUID 字段,避免反序列失敗;如 果完全不兼容升級(jí),避免反序列化混亂,那么請(qǐng)修改 serialVersionUID 值。 說(shuō)明:注意 serialVersionUID 不一致會(huì)拋出序列化運(yùn)行時(shí)異常。

【04 強(qiáng)制】POJO 類必須寫 toString 方法。使用 IDE 的中工具:source> generate toString 時(shí),如果繼承了另一個(gè) POJO 類,注意在前面加一下 super.toString。 說(shuō)明:在方法執(zhí)行拋出異常時(shí),可以直接調(diào)用 POJO 的 toString()方法打印其屬性值,便于排 查問(wèn)題。

【05 推薦】當(dāng)一個(gè)類有多個(gè)構(gòu)造方法,或者多個(gè)同名方法,這些方法應(yīng)該按順序放置在一起, 便于閱讀,

【06 推薦】 類內(nèi)方法定義順序依次是:公有方法或保護(hù)方法 > 私有方法 > getter/setter 方法。

【07 推薦】循環(huán)體內(nèi),字符串的連接方式,使用 StringBuilder 的 append 方法進(jìn)行擴(kuò)展。

==說(shuō)明:反編譯出的字節(jié)碼文件顯示每次循環(huán)都會(huì) new 出一個(gè) StringBuilder 對(duì)象,然后進(jìn)行 append 操作,最后通過(guò) toString 方法返回 String 對(duì)象,造成內(nèi)存資源浪費(fèi)。

==反例: String str = "start"; for (int i = 0; i < 100; i++) { str = str + "hello"; }

【08 推薦】類成員與方法訪問(wèn)控制從嚴(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ì)繼承類公開(kāi),那么限制為 protected。

==說(shuō)明:任何類、方法、參數(shù)、變量,嚴(yán)控訪問(wèn)范圍。過(guò)于寬泛的訪問(wèn)范圍,不利于模塊解耦。 思考:如果是一個(gè) private 的方法,想刪除就刪除,可是一個(gè) public 的 service 方法,或者 一個(gè) public 的成員變量,刪除一下,不得手心冒點(diǎn)汗嗎?變量像自己的小孩,盡量在自己的 視線內(nèi),變量作用域太大,無(wú)限制的到處跑,那么你會(huì)擔(dān)心的。

4.5)【集合處理】


【01 強(qiáng)制】關(guān)于 hashCode 和 equals 的處理,遵循如下規(guī)則:

1) 只要重寫 equals,就必須重寫 hashCode。

2) 因?yàn)?Set 存儲(chǔ)的是不重復(fù)的對(duì)象,依據(jù) hashCode 和 equals 進(jìn)行判斷,所以 Set 存儲(chǔ)的 對(duì)象必須重寫這兩個(gè)方法。

3) 如果自定義對(duì)象做為 Map 的鍵,那么必須重寫 hashCode 和 equals。 說(shuō)明:String 重寫了 hashCode 和 equals 方法,所以我們可以非常愉快地使用 String 對(duì)象 作為 key 來(lái)使用。

【02 強(qiáng)制】ArrayList的subList結(jié)果不可強(qiáng)轉(zhuǎn)成ArrayList,否則會(huì)拋出ClassCastException 異常,即 java.util.RandomAccessSubList cannot be cast to java.util.ArrayList.

==說(shuō)明:subList 返回的是 ArrayList 的內(nèi)部類 SubList,并不是 ArrayList ,而是 ArrayList 的一個(gè)視圖,對(duì)于 SubList 子列表的所有操作最終會(huì)反映到原列表上。

== 例子:https://blog.csdn.net/qq_15118961/article/details/80893780

【03 強(qiáng)制】在 subList 場(chǎng)景中,高度注意對(duì)原集合元素個(gè)數(shù)的修改,會(huì)導(dǎo)致子列表的遍歷、增加、 刪除均會(huì)產(chǎn)生 ConcurrentModificationException 異常。

【04 強(qiáng)制】使用集合轉(zhuǎn)數(shù)組的方法,必須使用集合的 toArray(T[] array),傳入的是類型完全 一樣的數(shù)組,大小就是 list.size()。

【05 強(qiáng)制】使用工具類 Arrays.asList()把數(shù)組轉(zhuǎn)換成集合時(shí),不能使用其修改集合相關(guān)的方 法,它的 add/remove/clear 方法會(huì)拋出 UnsupportedOperationException 異常。

== 說(shuō)明:asList 的返回對(duì)象是一個(gè) Arrays 內(nèi)部類,并沒(méi)有實(shí)現(xiàn)集合的修改方法。Arrays.asList 體現(xiàn)的是適配器模式,只是轉(zhuǎn)換接口,后臺(tái)的數(shù)據(jù)仍是數(shù)組。

==String[] str = new String[] { "you

總結(jié)

以上是生活随笔為你收集整理的java replaceall删除中括号和内容_「技术文章」《阿里巴巴 Java 开发手册》精华摘要...的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。