`
lc52520
  • 浏览: 369248 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

java关键字【Z】

    博客分类:
  • java
阅读更多

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:

Java代码
  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. }  
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代码
  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. }  
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代码
  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. }  
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代码
  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. }  
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代码
  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. }  
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关键字、标识符、注释详解 #### 关键字(Keywords) 在Java语言中,关键字是具有特殊意义的保留字,它们不能用作变量名、方法名或类名等标识符。Java的关键字用于定义程序结构的重要组成部分,如控制语句、...

    java关键字整理

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

    Java标识符、关键字和保留字

    Java关键字是小写形式,这是因为它对大小写敏感,即关键字的每个字母都需要严格地小写。Java语言中的关键字数量有限,共有50个,包括用于定义类的关键字`class`、控制流程的关键字如`if`、`else`、`for`、`while`等...

    2-Java标识符号、关键字、类型

    在Java编程语言中,标识符号、关键字和类型是构建程序的基础元素。理解并熟练掌握这些概念对于编写高质量的Java代码至关重要。以下是对这些主题的详细解释: **标识符号(Identifiers)** 在Java中,标识符是程序员...

    java 变量 关键字

    Java 变量关键字详解 Java 变量关键字是 Java 编译器中具有特殊含义的词语,它们用于表示一种数据类型或者表示程序的结构等。关键字不能用作变量名、方法名、类名、包名。 一、关键字概述 ---------------- Java ...

    50个Java面试题

    - **Object 类中的 equals() 方法**:`equals()` 是 Java 中 `Object` 类的一个方法,用于判断对象是否相等,默认情况下它只检查两个对象是否是同一个对象。 - **equals() 的重写**:Java 推荐重写 `equals()` 方法...

    a-z列表快速查找+搜索关键字高亮demo

    在IT行业中,快速查找和搜索...通过分析和运行这些示例,你将更好地掌握a-z快速查找的实现方法以及如何在文本中实现关键字高亮。同时,这也是一种很好的实践机会,有助于提升你的编程技能和对用户体验设计的理解。

    JAVA 多线程.7z

    Java多线程是Java编程中的核心概念,它允许程序同时执行多个任务,从而提升软件的效率和响应性。在Java中,多线程是通过实现Runnable接口或继承Thread类来创建的。理解并掌握Java多线程对于开发高效、并发的系统至关...

    Java本地调用接口 JNative.7z

    1. 定义本地方法签名:在Java类中声明native关键字修饰的方法,并使用`{native void methodName(int arg);}`这样的形式定义其签名。 2. 编译头文件:使用`javah`工具,根据Java类中声明的native方法生成对应的C/C++...

    java面试1000题

    - goto并非Java关键字,尽管在C/C++中是合法的关键字,但在Java中它被保留未使用。 - Java中关键字包括if、private等,用于定义语句和结构。 - 正确的变量声明示例:`int number = 5;`,注意Java是强类型语言,类型...

    java Java合法标识符

    4. **关键字不能用作标识符**:Java的关键字如`int`、`if`、`for`等不能用作标识符,除非通过转义字符(如`int1`),但这样并不建议,因为可能会降低代码的可读性。 5. **推荐命名规范**:为了提高代码的可读性,...

    java11_64_bin.zip jdk11免费下载

    2. **本地变量类型推断**:通过关键字`var`,Java 11允许局部变量声明时省略类型,编译器会根据初始化表达式推断出类型。 3. **字符串串联工厂方法**:在`java.lang.String`类中增加了`of()`静态方法,可以更高效地...

    ocjp认证之1Z0-808笔记

    以上便是OCJP认证之1Z0-808考试中重要的知识点,涵盖了Java异常机制、类与对象、日期处理、循环结构、访问修饰符、运算符、构造方法、封装和错误处理等多个方面。掌握这些知识点对于通过1Z0-808考试,获得OCJP认证至...

    华科Java实验报告.7z

    【标签】: 同样标记为"华科Java实验报告.7z",这表明该文件的内容专注于华科的Java实验学习,可能包括实验目的、实验环境、实验内容、实验过程、遇到的问题及解决方案、实验结果分析等。 【压缩包子文件的文件名称...

    ddz.rar_ddz_java ddz

    Java的synchronized关键字和Lock接口可以帮助我们实现线程安全,避免并发冲突。此外,为了优化性能,还可以使用线程池来管理并发任务。 4. **用户界面**:游戏的用户体验很大程度上取决于用户界面。在Java中,我们...

    java11 windows64位

    5. **改进的垃圾收集器**:Java 11引入了ZGC(Z Garbage Collector),这是一个低延迟的垃圾收集器,适用于大内存应用,减少了应用程序暂停时间。 安装JDK 11.0.15.1 for Windows 64位时,用户通常需要解压提供的`...

    final类的适应实例

    Java中final类的简单使用,并对Java关键字的使用做出了总结

    魔乐java培训课堂笔记.7z

    理解线程同步和通信机制,如synchronized关键字、wait()和notify()方法,能编写出高效的并发程序。 9. **网络编程**:Java的Socket编程用于实现客户端和服务端的通信,理解TCP和UDP协议的区别,以及ServerSocket和...

Global site tag (gtag.js) - Google Analytics