日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

Java開發(fā)之規(guī)范

 IT小白在線 2021-11-19

1.顯示聲明UID

所有可序列化類都顯示聲明serialVersionUID值,若不顯示聲明,系統(tǒng)會默認生成一個UID,這樣在這個對象進行序列化與反序列的時候,如果對java培訓(xùn)象添加一個屬性或者刪除一個屬性,那么默認的UID也會發(fā)生改變,也就會導(dǎo)致反序列化時候就會出現(xiàn): java.io.InvalidClassException

案例分析

創(chuàng)建一個Person類,定義兩個屬性name,age。通過redis進行緩存對象序列化后的byte[]。然后在修改Person類屬性,增加或刪除一個屬性,比如增加一個address屬性。再反序列之前存儲在redis緩存的byte[]。會出現(xiàn)反序列化失?。╬s:這邊只是演示效果)

public class UIDTest {

public static void main(String[] args) {

try {

//第一步存儲序列化后的對象

Person person = new Person("jack2", 21);

RedisUtils.stringSetBit("jack2", serializeObj(person));

//第二步,增加修改Person類屬性,進行反序列化

Person p1 = (Person) deserialize(RedisUtils.byteGet("jack2"));

System.out.println(p1);

} catch (Exception ex) {

ex.printStackTrace();

}

}

public static byte[] serializeObj(Object obj) {

try (ByteArrayOutputStream os = new ByteArrayOutputStream(); ObjectOutputStream ot = new ObjectOutputStream(os)) {

ot.writeObject(obj);

return os.toByteArray();

} catch (IOException ex) {

ex.printStackTrace();

}

return null;

}

public static Object deserialize(byte[] bytes) {

try (ByteArrayInputStream inputStream = new ByteArrayInputStream(bytes); ObjectInputStream objectInputStream = new ObjectInputStream

(inputStream)) {

return objectInputStream.readObject();

} catch (Exception ex) {

ex.printStackTrace();

}

return null;

}

}

  • idea創(chuàng)建設(shè)置,開啟缺少UID提示

2.校驗包裝類型是否為null

Java引入包裝類型是為了解決基本類型無法實例化的問題,便于讓一個基本類型也能參加到面向?qū)ο蟮木幊淌澜缰?。由于包裝類型的默認值是null,所以為了防止萬惡的java.lang.NullPointerException錯誤,所以在使用包裝類型時候,必須要校驗包裝類型是否為null

提示

  • 【強制】所有的POJO類屬性必須使用包裝數(shù)據(jù)類型

  • 【強制】RPC方法的返回值和參數(shù)必須使用包裝數(shù)據(jù)類型

  • 【推薦】所有的局部變量使用基本數(shù)據(jù)類型

3.用BigDecimal表示金額

java.math.BigDecimal是專門為了彌補浮點型無法精確計算的缺憾而設(shè)計的類,并且它本身也提供了加減乘除的常用數(shù)學(xué)算法。特別是與數(shù)據(jù)庫Decimal類型的字段映射的。而如果是財務(wù)運算,更加應(yīng)該使用BigDecimal類型來表示金額。并且盡量使用String類型的構(gòu)造函數(shù)。

4.POJO類覆寫toString()

覆寫POJO類的toString(),因為Java提供的默認的toString方法不友好,打印出來看不懂。尤其在實際開發(fā)過程中,當(dāng)方法拋出異常的時候,調(diào)用下POJO的toString()方法打印出屬性值。便于問題排查。推薦使用:apache的commons工具包中ToStringBuilder類

5.工具類不可實例化

實際項目中,避不可免,要寫一些Utils類。但是在寫這些工具類的時候,要讓工具類不可實例化。因為這些工具類只是提供了一些通用的非業(yè)務(wù)領(lǐng)域的公用方法,沒有額外的屬性,我們僅僅調(diào)用定義的方法。所以沒有必須讓其實例化。

  • 優(yōu)秀代碼欣賞

6.優(yōu)先使用StringBuilder

在頻繁進行字符串的運算(如拼接、替換、刪除等),優(yōu)先考慮StringBuilder,如SQL語句的拼裝、Json的封裝等等。

7.指定集合的初始化大小

我們在使用ArrayList、HashMap等集合的時候,一般都是直接: ArrayListstrs = new ArrayList<>();然后進行add、remove等方法進行操作,因為在它的特性就是動態(tài)管理長度的。所以我們無須擔(dān)心超出長度的問題。但是為了寫出高效的代碼,必須明確指出集合初始化大小。

  • 源碼查看

8.資源對象、流對象及時回收

對于數(shù)據(jù)庫資源、文件操作、流操作需要及時進行close。Java7以上,可以使用語法:try-with-resources可以實現(xiàn)自動關(guān)閉資源對象。

9.用ThreadPoolExecutor創(chuàng)建線程池

在實際開發(fā)中,在處理多任務(wù)的情況下,通常想到為了節(jié)約處理時間,需要使用多線程技術(shù)來縮短時間。那么在編寫高質(zhì)量Java代碼,需要使用ThreadPoolExecutor來顯示創(chuàng)建線程池。

10.讓注釋正確、清晰、簡潔

  • 1.類、屬性、方法的注釋必須使用Javadoc規(guī)范,使用/*xxx/格式

  • 2.所有抽象方法(包括接口方法)除了返回值、參數(shù)、異常還需要要指出該方法做什么事情,實現(xiàn)什么功能

  • 3.所有的類必須添加創(chuàng)建者和創(chuàng)建日期

  • 4.方法內(nèi)的注釋必須在被注釋語句的上方,不能跟在注釋語句后面

  • 5.所有枚舉類型必須要有注釋,說明每個數(shù)據(jù)項的用途

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多