`

Java关键字之native,strict fp,transient,volatile

    博客分类:
  • JAVA
阅读更多
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。
const和goto为java中的保留字。
1. native
native是方法修饰符。Native方法是由另外一种语言(如c/c++,FORTRAN,汇编)实现的本地方法。因为在外部实现了方法,所以在java代码中,就不需要声明了,有点类似于借口方法。Native可以和其他一些修饰符连用,但是abstract方法和Interface方法不能用native来修饰。
Example:
Java代码
public interface TestInterface {  
     void doMethod();  
}  
public class Test implements TestInterface {  
    public native void doMethod();  
    private native int doMethodB();  
  public native synchronized String doMethodC();  
  static native void doMethodD();  
}  


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


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


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


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

相关推荐

    java关键字和java命名规范.pdf

    36. strictfp: 用于FP-strict模式,意味着浮点运算遵循IEEE-754标准。 37. super: 表示父类的引用。 38. switch: 用于多路分支选择结构。 39. synchronized: 表示同步的,用于在多线程环境中控制对共享资源的访问。 ...

    最完整的java关键字解释.doc

    ### 最完整的Java关键字解释 #### 1. Abstract - **定义**:`abstract`关键字用于修饰类或方法,表示该类或方法具有抽象属性。 - **用途**: - `abstract`类可以被继承,但是不能被实例化。 - `abstract`方法不...

    java学习_java语法基础

    浮点数计算的精度问题可以通过使用strictfp关键字来控制,它确保浮点计算遵循FP-strict规则,保证跨平台的数值一致性。另一方面,transient关键字用于标记一个成员变量,表示该变量不应被序列化,即不会被保存在持久...

    Java笔记Java笔记Java笔记

    修饰符:public、protected、private、final、void、static、strict、abstract、transient、synchronized、volatile、native 是 Java 语言中的修饰符关键字。这些关键字用于修饰类、方法和变量的访问权限和行为。 ...

    计算机Java核心编程笔记

    Java修饰符包括public、protected、private、final、void、static、strict、abstract、transient、synchronized、volatile、native等。 七、Java流程控制 Java流程控制语句包括package、import、throw、throws、...

    计算机核心java编程笔记

    Java 语言是当前最流行的编程语言之一,它具有灵活、强大、跨平台等特点。Java 语言可以应用于桌面应用程序、Web 应用程序、移动应用程序等多种领域。为了更好地学习和掌握 Java 语言,本笔记将对 Java 语言的基础...

    计算机科学与计算java核心编程笔记

    * 修饰符:public、protected、private、final、void、static、strict、abstract、transient、synchronized、volatile、native。 四、动作和保留字 * 动作:package、import、throw、throws、extends、implements...

    ( xhtml1-strict.dtd

    ( xhtml1-strict.dtd ( xhtml1-strict.dtd ( xhtml1-strict.dtd ( xhtml1-strict.dtd ( xhtml1-strict.dtd ( xhtml1-strict.dtd ( xhtml1-strict.dtd ( xhtml1-strict.dtd ( xhtml1-strict.dtd ( xhtml1-strict.dtd ...

    计算机Java核心编程

    比如访问修饰符(`public`、`protected`、`private`)、`final`(不可变)、`void`(无返回值)、`static`(类级别)、`strict`、`abstract`(抽象)、`transient`(序列化)、`synchronized`(同步)、`volatile`...

    python解析url中关键字资料

    ### Python解析URL中关键字资料 #### 知识点概述 在Web开发与数据抓取过程中,经常需要对URL进行解析,以获取其中的关键字参数。本篇内容将围绕一段用于测试目的的URL集合,深入探讨如何使用Python语言来解析这些...

    计算机Java编程笔记

    根据提供的信息,我们可以详细展开关于Java编程的基础知识点,特别是关于标识符、关键字、数据类型、流程控制、修饰符等内容。 ### Java编程基础知识 #### 1. 标识符与关键字 - **标识符**:在Java中,标识符用于...

    JavaScript的strict模式与with关键字介绍

    其中之一便是“严格模式”(strict mode),这使得JavaScript的语法变得更加严格,旨在消除JavaScript中一些不合理的、不便于维护的特性。严格模式下,原先一些常见的导致错误的代码将不再被允许执行,其中包括强制...

    前端开源库-strict-mode

    对于压缩包中的"strict-mode-master"目录,我们可以推测这是一个专门研究或实现严格模式的开源项目,可能包含了如何在不同场景下启用严格模式的示例,以及一些与之相关的工具和最佳实践。 总之,严格模式是前端开发...

    OOXML Strict Converter for Office 2010

    OOXML Strict Converter for Office 2010 allows you to open ISO strict documents that are created using Office 2013 in Office 2010. It will preserve the fidelity of the document. If you make any changes...

    Javascript 严格模式use strict详解

    在js文件的最前面添加 “use strict” 2.局部 在函数内部添加 “use strict”,如下 function fn() { use strict; //some code } 二、严格模式和非严格模式的对比 1.严格模式下,无法删除(delete)变量(delete是...

    js this关键字_面向对象编程.pdf

    JavaScript 并没有像其他面向对象语言(如 Java 或 C++)那样的 `class` 关键字,但它提供了基于函数的面向对象实现。类的概念可以通过构造函数和原型链来模拟。 - **构造函数**:构造函数是一个普通的函数,用于...

Global site tag (gtag.js) - Google Analytics