java "非"常用关键字
这里的非常用并不是说不重要,而是这些关键字只在特殊场景需要时使用。
-
transient
类型:java语言的关键字,变量修饰符。
作用:决定类实例变量在序列化存储时是否存储。如果用transient声明一个实例变量,当对象存储时,它的值不需要维持。 Java的serialization提供了一种持久化对象实例的机制。当持久化对象时,可能有一个特殊的对象数据成员,我们不想用serialization机制来保存它。为了在一个特定对象的一个域上关闭serialization,可以在这个域前加上关键字transient。当一个对象被串行化的时候,transient型变量的值不包括在串行化的表示中,然而非transient型的变量是被包括进去的。
使用场景: 对象需要被序列化,如本地保存,或远程传输。
例子:
class T { transient int a; //不需要维持 int b; //需要维持 }
2. strictfp
类型:java关键字,类,接口,或方法修饰符。
作用: 决定类或方法中的浮动运算是否精确。strictfp的意思是FP-strict,也就是说精确浮点的意思。在Java虚拟机进 行浮点运算时,如果没有指定strictfp关键字时,Java的编译器以及运行环境在对浮点运算的表达式是采取一种近似于我行我素的行为来完成这些操 作,以致于得到的结果往往无法令你满意。而一旦使用了strictfp来声明一个类、接口或者方法时,那么所声明的范围内Java的编译器以及运行环境会 完全依照浮点规范IEEE-754来执行。但是不允许对接口中的方法以及构造函数声明strictfp关键字
使用场景:对浮点运算要求较高要求的需求。如想让你的浮点运算更加精确,而且不会因为不同的硬件平台所执行的结果不一致时,可以用关键字strictfp.
例子:
strictfp interface A {} public strictfp class FpDemo1 { strictfp void f() {} }
3. volatile
类型: volatile修饰变量,并且是类变量,不能修饰局部变量。
作用:阻止jvm 对变量操作语句进行优化。在每次被线程访问时,都强迫从共享内存中重读该成员变量的值。而且,当成员变量发生变化时,强迫线程将变化值回写到共享内存。这样在任何时刻,两个不同的线程总是看到某个成员变量的同一个值。
使用场景:变量可能会被意外改变的情况。如多线程,或被native 代码改变。
例子: 参考 何时可用volatile
4.native
类型:方法修饰符。
作用:声明由另外一种语言(如c/c++,FORTRAN,汇编)实现的本地方法。因为在外部实现了方法,所以在java代码中,就不需要编写方法代码了,有点类似于借口方法。Native可以和其他一些修饰符连用,但是abstract方法和Interface方法不能用native来修饰。
使用场景:需要调用对计算机底层进行某些操作,或实现与操作系统有关的功能