Java关键字之native,strictfp,transient,volatile

转载 2007年10月04日 20:48:00

Java关键字(keywords)

  • abstract default if private this
    boolean do implements protected throw
    break double import public throws
    byte else instanceof return transient
    case extends int short try
    catch final interface static void
    char finally long strictfp volatile
    class float native super while
    const for new switch
    continue goto package synchronized

 

以上是java specifications中定义的keywords,一共48个,其中常见的三个看似是关键字的true, false, null,都不是关键字,而是作为一个单独标识类型。
其中,不常用到的关键字有:const,goto,native,strictfp,transient,volatile。
constgoto为java中的保留字。
1. native
native是方法修饰符。Native方法是由另外一种语言(如c/c++,FORTRAN,汇编)实现的本地方法。因为在外部实现了方法,所以在java代码中,就不需要声明了,有点类似于借口方法。Native可以和其他一些修饰符连用,但是abstract方法和Interface方法不能用native来修饰。
Example:

代码
  1. public interface TestInterface {   
  2.      void doMethod();   
  3. }   
  4. public class Test implements TestInterface {   
  5.     public native void doMethod();   
  6.     private native int doMethodB();   
  7.   public native synchronized String doMethodC();   
  8.   static native void doMethodD();   
  9. }  

为什么需要使用native method?请参考:
http://www.javaeye.com/topic/72543 java Native Method初涉
2. strictfp
修饰类和方法,意思是FP-strict,精确浮点,符合IEEE-754规范的。当一个class或interface用strictfp声明,内部所有的float和double表达式都会成为strictfp的。Interface method不能被声明为strictfp的,class的可以。
Example:
代码
  1. strictfp interface FPTest {   
  2.      void methodA();   
  3. }   
  4. class FPClass implements FPTest {   
  5.     public void methodA() {   
  6.     }   
  7.     public void methodB() {   
  8.   }   
  9.   public strictfp void methodC() {   
  10.   }   
  11. }   
  12. class FPClassB {   
  13.     strictfp void methodA() {   
  14.     }   
  15. }  

3.transient
变量修饰符。标记为transient的变量,在对象存储时,这些变量状态不会被持久化。当对象序列化的保存在存储器上时,不希望有些字段数据被保存,为了保证安全性,可以把这些字段声明为transient。
4. volatile
volatile修饰变量。在每次被线程访问时,都强迫从共享内存中重读该成员变量的值。而且,当成员变量发生变化时,强迫线程将变化值回写到共享内存。这样在任何时刻,两个不同的线程总是看到某个成员变量的同一个值。
看看Java Language Specification中的例子。
条件:一个线程不停的调用方法one(),一个线程不停的调用方法two()。我测试过多次,这种情况好像一直没有出现。
代码
  1. class Test {   
  2.     static int i = 0, j = 0;   
  3.     static void one() { i++; j++; }   
  4.     static void two() {   
  5.         System.out.println("i=" + i + " j=" + j);   
  6.     }   
  7. }  

结果偶尔会出现j大于i的情况,因为方法没有同步,所以会出现i和j可能不是一次更新。一种防止这种情况发生的办法就是声明两个方法为synchronized 的。
代码
  1. class Test {   
  2.     static int i = 0, j = 0;   
  3.     static synchronized void one() { i++; j++; }   
  4.     static synchronized void two() {   
  5.         System.out.println("i=" + i + " j=" + j);   
  6.     }   
  7. }  

这样可以防止两个方法同时被执行,还可以保证j和i被同时更新,这样一来i和j的值一直是一样的。
另外一种途径就是把i和j声明为volatile。
代码
  1. class Test {   
  2.     static volatile int i = 0, j = 0;   
  3.     static void one() { i++; j++; }   
  4.     static void two() {   
  5.         System.out.println("i=" + i + " j=" + j);   
  6.     }   
  7. }   

Java关键字之native,strictfp,transient ,volatile

  • lihui6636
  • lihui6636
  • 2014年05月28日 08:42
  • 723

Java关键字之native,strictfp,transient,volatile

Java关键字(keywords) abstract          default            if                        private            ...
  • kdnuggets
  • kdnuggets
  • 2007年12月08日 16:52
  • 699

Java关键字之native,strictfp,transient,volatile

转载: http://www.iteye.com/topic/82640   Java关键字(keywords) abstract    default    if            pri...
  • WenBin_Zhou
  • WenBin_Zhou
  • 2013年10月03日 01:04
  • 582

native, volatile, transient, strictfp

1.native一. 什么是Native Method   简单地讲,一个Native Method就是一个java调用非java代码的接口。一个Native Method是这样一个java的方法:该...
  • lsjjenny
  • lsjjenny
  • 2010年08月19日 11:02
  • 150

java中 static,final,transient,volatile关键字的作用

static 和final   static  静态修饰关键字,可以修饰 变量,程序块,类的方法;  当你定义一个static的变量的时候jvm会将将其分配在内存堆上,所有程序对它的引用都会指向这...
  • i0048egi
  • i0048egi
  • 2017年02月12日 21:27
  • 1338

java中的Volatile,transient,native关键字

   1.volatile   Volatile修饰的成员变量在每次被线程访问时,都强迫从共享内存中重读该成员变量的值(而不从缓存直接读取)。而且,当成员变量发生变化时,强迫线程将变化值回写到共享内存...
  • a379039233
  • a379039233
  • 2011年01月20日 15:23
  • 1623

java 关键字: volatile、strictfp、transient

1. volatile 入门 (1). java中volatile关键字的含义 (2). 初学Java多线程:慎重使用volatile关键字 进阶 (1). Java 理...
  • AndroidBluetooth
  • AndroidBluetooth
  • 2012年11月13日 17:59
  • 1626

Java关键字之native,strictfp,transient,volatile (SCJP)

Java关键字之native,strictfp,transient,volatile (SCJP)
  • dingxy
  • dingxy
  • 2011年01月28日 09:33
  • 360

Java语言中关键字strictfp的用途

自Java2以来,Java语言增加了一个关键字strictfp,虽然这个关键字在大多数场合比较少用,但是还是有必要了解一下。strictfp的意思是FP-strict,也就是说精确浮点的意思。在Jav...
  • redv
  • redv
  • 2005年03月22日 12:02
  • 7643

transient,volatile和strictfp关键字

Java中的transient,volatile和strictfp关键字      如果用transient声明一个实例变量,当对象存储时,它的值不需要维持。例如:  Java代码   ...
  • qeqeqe236
  • qeqeqe236
  • 2012年09月03日 11:03
  • 500
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Java关键字之native,strictfp,transient,volatile
举报原因:
原因补充:

(最多只允许输入30个字)