Java中的transient,volatile和strictfp关键字
Java中的transient,volatile和strictfp关键字
如果用transient声明一个实例变量,当对象存储时,它的值不需要维持。例如:
Java代码
class T {
transient int a; //不需要维持
int b; //需要维持
}
class T {
transient int a; //不需要维持
int b; //需要维持
}
这里,如果T类的一个对象写入一个持久的存储区域,a的内容不被保存,但b的将被保存。
volatile修饰符告诉编译器被volatile修饰的变量可以被程序的其他部分改变。在多线程程序中,有时两个或更多的线程共享一个相同的实例变量。考虑效率问题,每个线程可以自己保存该共享变量的私有拷贝。实际的变量副本在不同的时候更新,如当进入synchronized方法时。
用strictfp修饰类或方法,可以确保浮点运算(以及所有切断)正如早期的Java版本那样准确。切断只影响某些操作的指数。当一个类被strictfp修饰,所有的方法自动被strictfp修饰。
strictfp的意思是FP-strict,也就是说精确浮点的意思。在Java虚拟机进行浮点运算时,如果没有指定strictfp关键字时,Java的编译器以及运行环境在对浮点运算的表达式是采取一种近似于我行我素的行为来完成这些操作,以致于得到的结果往往无法令你满意。而一旦使用了strictfp来声明一个类、接口或者方法时,那么所声明的范围内Java的编译器以及运行环境会完全依照浮点规范IEEE-754来执行。因此如果你想让你的浮点运算更加精确,而且不会因为不同的硬件平台所执行的结果不一致的话,那就请用关键字strictfp。
你可以将一个类、接口以及方法声明为strictfp,但是不允许对接口中的方法以及构造函数声明strictfp关键字,例如下面的代码:
1. 合法的使用关键字strictfp
Java代码
strictfp interface A {}
public strictfp class FpDemo1 {
strictfp void f() {}
}
strictfp interface A {}
public strictfp class FpDemo1 {
strictfp void f() {}
}
2. 错误的使用方法
Java代码
interface A {
相关文档:
List的用法
List包括List接口以及List接口的所有实现类。因为List接口实现了Collection接口,所以List接口拥有Collection接口提供的所有常用方法,又因为List是列表类型,所以List接口还提供了一些适合于自身的常用方法,如表1所示。
表1 List接口定义的常用方法及功能
从表1可以看出,List接口提供的适合于自身的 ......
在成功实现Java调用C++之后,接下来想到能否通过JNA实现Java调用Fortran,今天试验了一下,还是比较容易的。
网上有一个Java调用F95的例子,但是我考虑不仅要实现F95的调用,还要实现F77的调用,所以费了一些周折。
问题的关键在于F77为过程名自动添加了一个尾部的下划线,所以sub1这个过程,到Java一端,就变成了sub1_, ......
创建一个JFrame
下面用简单的实例演示了Java Swing创建一个能输入内容的窗口
public class frameTest(){
public static void Main(String args[]){
//创建JFrame对象,JFrame用来在屏幕上显示一个Windows窗口。
JFrame frame = new JFrame("第一个JFrame"); &nbs ......
目标:有安装程序包像安装qq一样简单一直下一步即可 ,可卸载,要求程序自动启动,不需要单独安装JRE,就在写这套解决方案的时候,我真是百般痛恨微软.哎无奈啊.幸好最终还是被我想出来了,分享下吧。
第一步
jre减肥,删除jre\lib\rt.jar中不使用的类,删除charsets.jar中不使用的字符集编码.MyWork开源项目(http://mywor ......
Javah生成JNI头文件
假设工程目录下有bin文件夹,bin存放编译好的class文件;
在bin目录下,
......\koalaTest\bin>javah -classpath . -jni com.jni.vikitest
然后在.....\koalaTest\bin 即可找到一个com_jni_Calculator.h头文件,生成成功! ......