`

java关键字,native,strictfp,transient,volatile (转自http://blog.csdn.net/sodino)

阅读更多
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。
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();  
    } 

[java] view plaincopy

    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.javaeye.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() {  
        }  
    } 

[java] view plaincopy

    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);  
        }  
    } 

[java] view plaincopy

    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);  
        }  
    } 

[java] view plaincopy

    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] view plaincopy

    class Test { 
        static volatile int i = 0, j = 0; 
        static void one() { i++; j++; } 
        static void two() { 
            System.out.println("i=" + i + " j=" + j); 
        } 
    } 
分享到:
评论

相关推荐

    2015中兴笔试B卷

    - **不能是关键字和保留字**:例如Java、C++等编程语言中的关键字和保留词。 #### 三、Java关键字列表 以下是Java中的一些关键字: - **implements**: 表示类实现接口。 - **extends**: 表示类继承另一个类。 - *...

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

    Java关键字和命名规范是Java编程语言中的基础概念,它们对于编写清晰、规范的代码至关重要。Java关键字是Java语言内置的、具有特殊用途的保留字,而命名规范则是关于如何给类、方法、变量等命名的约定。 ### Java...

    java关键字............

    ### Java关键字详解 #### 概述 Java是一种广泛使用的面向对象编程语言,它以其平台无关性、健壮性和安全性而闻名。Java中的关键字是预定义的保留字,具有特殊的意义和用途,不能用作标识符(如变量名、类名等)。在...

    java关键字、保留字

    ### Java关键字详解 #### 概述 Java是一种广泛使用的面向对象编程语言,它拥有丰富的关键字集,用于控制程序的行为和结构。Java关键字是由Java语言预定义的标识符,具有特殊的含义,不能用作变量名、方法名或类名等...

    java关键字

    ### Java关键字详解 #### 前言 Java作为一种广泛使用的编程语言,在软件开发领域占据了重要的地位。Java的关键字,即保留字,是Java语言中具有特殊意义的标识符,它们预定义并保留用于语言本身的语法结构。理解这些...

    JAVA关键字

    Java关键字是编程的基础,它们是Java语言预定义的、具有特殊含义的标识符,不能作为变量名、方法名或类名。以下是对50个Java关键字的详细解释: 1. **abstract**:用于声明抽象类或抽象方法,不包含具体实现。 2. ...

    Java关键字

    Java关键字是编程的基础,它们是Java语言预定义的标识符,具有特殊含义并被Java编译器识别。在Java中,一共有51个关键字(包括保留字),但描述中提到的是48个,可能是因为某些关键字在特定上下文不常用或者被归类到...

    java保留字、关键字

    在Java编程语言中,保留字(Reserved Words)和关键字(Keywords)是两个非常重要的概念,它们构成了Java语法的基础。保留字是Java语言已经预定义并赋予特定含义的词汇,而关键字则是Java语法结构中不可或缺的部分。...

    Java关键字的用法

    ### Java关键字的用法 Java作为一种广泛使用的编程语言,拥有丰富的关键字来支持其核心功能与特性。本文将详细介绍部分重要的Java关键字及其用法。 #### 1. `abstract` `abstract`关键字用于定义抽象类或抽象方法...

    java 关键字查询文档

    Java 共有 50 多个关键字,它们包括但不限于 `abstract`、`assert`、`boolean`、`break`、`byte`、`case`、`catch`、`char`、`class`、`const`(虽然未使用)、`continue`、`default`、`do`、`double`、`else`、`...

    java关键字整理

    ### Java关键字整理 #### 概述 在Java编程语言中,关键字是一组具有特殊含义的预定义标识符,它们在程序中扮演着重要的角色。掌握这些关键字对于理解Java语法至关重要,同时也是成为一名合格Java开发者的基石之一。...

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

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

    源码关键字统计.rar

    在Java编程语言中,关键字是预定义的、具有特殊含义的词汇,它们是构成程序语法结构的基础元素。这篇关于“源码关键字统计”的主题旨在分析Java源代码文件,并计算其中出现的关键字数量。这个任务涉及到文件读取、...

    java关键字总结

    Java是一种广泛使用的面向对象的编程语言,其设计目标是具有高度的可移植性、健壮性和安全性。在Java中,关键字是被语言保留的特定标识符,它们有特殊的含义,不能用作变量名、方法名或者类名。下面是对Java关键字的...

    java中的关键字大全

    ### Java中的关键字大全 在Java编程语言中,关键字是一组预定义的词汇,它们具有特殊的含义和用途。理解和掌握这些关键字对于编写有效的Java程序至关重要。本文将详细介绍Java中的一些核心关键字,并提供相应的解释...

    java关键字.pdf

    Java是一种面向对象的编程语言,它的关键字在编程中扮演着至关重要的角色,因为它们具有特殊的含义,被编译器识别并执行特定的功能。以下是对Java关键字的详细解释: 1. **访问控制修饰符**: - `private`:用于...

    java学习笔记 适合自学java的朋友

    - 关键字均为小写,随JDK版本更新而增加新的关键字,例如`strictfp`、`assert`和`enum`等。 通过以上内容的学习,初学者可以逐步掌握Java编程的基础知识和技术要点,为进一步深入学习打下坚实的基础。

    java基础语法讲解上集,适合初级人员入门学习

    - `native`、`strictfp`、`transient`、`volatile`、`assert`:这些关键字用于特定场景下的高级功能。 #### 2. 标识符(Identifiers) 标识符是在程序中用于命名变量、类、方法等元素的名称。在Java中,标识符必须...

    Java的关键字与保留字

    在深入探讨Java的关键字与保留字之前,我们首先需明确两个概念:关键字和保留字。在编程语言中,关键字是预定义的具有特殊含义的标识符,它们在编译时被解析器识别并执行特定的功能;而保留字则是语言设计者为未来...

Global site tag (gtag.js) - Google Analytics