天天看點

java學習之關鍵字instanceofstrictfptransient

關鍵字

  • 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 修飾,靜态變量都不能被序列化

繼續閱讀