JAV A 常见面试题及解答(精华) 1)transient 和 v olatile 是 jav a 关键字吗?(瞬联) 如果用 transient 声明一个实例变量,当对象存储时,它的值不需要维持。例如: class T { transient int a; //不需要维持 int b; //需要维持 } 这里,如果 T 类的一个对象写入一个持久的存储区域,a 的内容不被保存,但 b的将被保存。 v olatile 修饰符告诉编译器被 v olatile 修饰的变量可以被程序的其他部分改变。在多线程程序中,有时两个或更多的线程共享一个相同的实例变量。考虑效率问题,每个线程可以自己保存该共享变量的私有拷贝。实际的变量副本在不同的时候更新,如当进入 synchronized 方法时。 用 strictfp 修饰类或方法,可以确保浮点运算(以及所有切断)正如早期的 Java 版本那样准确。切断只影响某些操作的指数。当一个类被 strictfp 修饰,所有的方法自动被 strictfp 修饰。 strictfp 的意思是 FP-strict,也就是说精确浮点的意思。在 Java 虚拟机进行浮点运算时,如果没有指定 strictfp 关键字时,Java 的编译器以及运行环境在对浮点运算 的 表 达 式 是 采 取 一 种 近 似 于 我 行 我 素 的 行 为 来 完 成 这 些 操 作 ,以 致 于 得 到 的 结果 往 往 无 法 令 你 满 意 。 而 一 旦 使 用 了 strictfp 来 声 明 一 个 类 、接口或者方法 时,那么所声 明 的 范围内 Java 的 编译器以 及运行 环境会完 全依照浮点规范 IEEE-754来 执行 。 因此如果 你 想让你 的 浮点运算 更加精确, 而 且不会因为 不同的 硬件平台所执行 的 结 果 不一 致 的 话, 那就请用 关键字 strictfp。 你 可以 将一 个 类 、接口以 及方法 声 明 为 strictfp, 但是 不允许对接口中的 方法 以 及构造函数声 明 strictfp 关键字, 例如下面的 代码: strictfp interface A {} public strictfp class FpDemo1 { strictfp void f() {} } 2. 错误的 使 用 方法 interface A { strictfp void f(); } public class FpDemo2 { strictfp FpDemo2() {} } 一 旦 使 用 了 关键字 strictfp 来 声 明 某个 类 、接口或者方法 时, 那么在这 个 关键字所声 明 的 范围内所有浮点运算 都是 精确的 , 符合 IEEE-754 规范 的 。...