assert

1、定义

assert(断言)是为了方便调试程序,并不是发布程序的组成部分。编写代码时,总是会做出一些假设,断言就是用于在代码中捕捉这些假设。

默认情况下,JVM 是关闭断言的。因此如果想使用断言调试程序,需要手动打开断言功能。在命令行模式下运行 Java 程序时可增加参数 -enableassertions 或者 -ea 打开断言。可通过 -disableassertions 或者 -da 关闭断言(默认情况,可有可无)。

2、使用

断言是通过关键字 assert 来定义的,一般有两种形式:

  1. assert ; 举个🌰:
boolean isStudent = false; 
assert isStudent;
  1. assert : ; 举个🌰:
boolean isSafe = false;  assert isSafe : "Not Safe at all";

更好的替代品:JUnit。

native

1、定义

native 关键字说明其修饰的方法是一个原生态方法,方法对应的实现不是在当前文件,而是再用其他语言(如 C 和 C++)实现的文件中。

Java 语言本身不能对操作系统底层进行访问和操作,但是可以通过 JNI 接口调用其他语言来实现对底层的访问。

2、JNI

JNI(Java Native Interface)允许 Java 代码和其他语言写的代码进行交互。通过 JNI,我们就可以通过 Java 程序(代码)调用到操作系统相关的技术实现的库函数,从而与其他技术和系统交互,使用其他技术实现的系统的功能;同时其他技术和系统也可以通过 JNI 提供的相应原生接口开调用 Java 应用系统内部实现的功能。

java super关键字的作用 java关键字assert_java


JNI 的缺点:

  1. 程序不再跨平台。要想跨平台,必须在不同的系统环境下重新编译本地语言部分。
  2. 程序不再是绝对安全的,本地代码的不当使用可能导致整个程序崩溃。一个通用规则是,应该让本地方法集中在少数几个类当中。这样就降低了 Java 和 C 之间的耦合性。

strictfp

strictfp, 即 strict float point(精确浮点),用于确保浮点数运算的准确性。可应用于类、接口或方法。一旦使用了 strictfp 来声明一个类、接口或者方法,那么在所声明的范围内,Java 编译器以及运行环境会完全依照 IEEE 二进制浮点数算术标准来执行,在这个关键字声明的范围内所有浮点数的计算都是精确的。

需要注意的是,当一个类被 strictfp 修饰时,所有方法都会自动被 strictfp 修饰。

因此,strictfp 可以保证浮点数运算的精确性,而且在不同的硬件平台会有一致的运行结果。

transient

将不需要序列化的属性前添加关键字 transient,序列化对象(一个对象只要实现了 Serilizable 接口,这个对象就可以被序列化)的时候,这个属性就不会被序列化。

  1. 一旦变量被 transient 修饰,变量将不再是对象持久化的一部分,该变量内容在序列化后无法获得访问。
  2. transient 关键字只能修饰变量,而不能修饰方法和类。注意,本地变量是不能被 transient 关键字修饰的。变量如果是用户自定义类变量,则该类需要实现 Serializable 接口。
  3. 被 transient 关键字修饰的变量不再能被序列化,一个静态变量不管是否被 transient 修饰,均不能被序列化。