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