關鍵字
- instanceof
- strictfp
-
- strictfp
- transient
instanceof
instanceof 嚴格來說是Java中的一個雙目運算符,用來測試一個對象是否為一個類的執行個體,用法為:
boolean result = obj instanceof Class
文法:對象 A instanceof 類 B,instanceof 判斷是否為類或該類子類的執行個體對象。
- 若對象為null,傳回false。
- obj必須是引用類型,不能是基本類型,也就是說隻能用作對象的判斷
- obj是Class類的執行個體對象,傳回true
- obj是Class接口的實作類,傳回true
- obj是Class類的直接或間接子類,傳回ture
其原理可以用這一段僞代碼來描述
boolean result;
if (obj == null) {
result = false;
} else {
try {
T temp = (T) obj; // checkcast
result = true;
} catch (ClassCastException e) {
result = false;
}
}
strictfp
strictfp
strict float point (精确浮點)
- 可以用來修飾類、接口或者方法
- 修飾方法時:該方法中所有的float和double表達式都嚴格遵守FP-strict的限制,符合IEEE-754規範
- 修飾類或者接口時:該類中的所有代碼,包括嵌套類型中的初始設定值和代碼,都将嚴格地進行計算
- 嚴格限制意味着所有表達式的結果都必須是 IEEE 754 算法對操作數預期的結果,以單精度和雙精度格式表示
- 如果想讓浮點運算更加精确,而且不會因為不同的硬體平台所執行的結果不一緻的話,可以用關鍵字strictfp.
transient
變量修飾符,如果用transient聲明一個執行個體變量,當對象存儲時,它的值不需要維持
也就是說:Java的serialization提供了一種持久化對象執行個體的機制。當持久化對象時,可能有一個特殊的對象資料 成員,我們不想用serialization機制來儲存它。為了在一個特定對象的一個域上關閉serialization,可以在這個域前加上關鍵字 transient。當一個對象被序列化的時候,transient型變量的值不包括在序列化的表示中,然而非transient型的變量是被包括進去的
要注意的是:
- transient隻作用于實作 Serializable 接口
- transient隻能用來修飾普通成員變量字段
- 不管有沒有 transient 修飾,靜态變量都不能被序列化