天天看点

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 修饰,静态变量都不能被序列化

继续阅读