Java中一些不常见的关键字整理

来源:互联网 发布:单片机实验方案 编辑:程序博客网 时间:2024/05/17 22:41

1. abstract
    定义一个抽象类,该类不能被实例化
2. implement
    实现一个接口用implement,后面跟父接口的名字  可以implement多个接口 
3. extend 
    继承一个类用extends,后面跟父类的名字
4. instanceof 
    Java的一个二元操作符,它的作用是测试它左边的对象是否是它右边的类的实例,返回boolean类型的数据
    例:
  String s = "I AM an Object!";
  boolean isObject = s instanceof Object;
5. throws
    写在定义一个方法名的后面,表示若该方法出现异常时将异常抛给调用它的父类,而本方法不进行处理;
    例:
     void get() throws MyException
6. throw
    写在具体的方法中,用来抛出异常进而可以被try...catch()语句捕获,也就是在本方法中队异常进行处理。
7. transient
    用来表示一个域不是该对象串行化的一部分。当一个对象被串行化的时候,transient型变量的值不包括
    在串行化的表示中,然而非transient型的变量是被包括进去的。
8. native
    native是方法修饰符,native是由另外一种语言实现的本地方法,
9. strictfp
    意思是FP-strict,也就是说精确浮点
    可以将一个类、接口以及方法声明为strictfp,但是不允许对接口中的方法以及构造函数声明strictfp关键字
    合法的使用关键字strictfp
    strictfp interface A {}
    public strictfp class FpDemo1 {
     strictfp void f() {}
     }
    错误的使用方法
    interface A {
    strictfp void f();
     }

    一旦使用了关键字strictfp来声明某个类、接口或者方法时,那么在这个关键字所声明的范围内所有浮点运
    算都是精确的,符合IEEE-754规范的。
10.super
     super关键和this作用类似,是被屏蔽的成员变量或者成员方法或变为可见,或者说用来引用被屏蔽的
     成员变量和成员成员方法。不过super是用在子类中,目的是访问直接父类中被屏蔽的成员,注意是
     直接父类(就是类之上最近的超类)
    作用:
    第一、在子类构造方法中要调用父类的构造方法,用“super(参数列表)”的方式调用,参数不是
    必须的。同时还要注意的一点是:“super(参数列表)”这条语句只能用在子类构造方法体中的第一行。
    第二、当子类方法中的局部变量或者子类的成员变量与父类成员变量同名时,也就是子类局部变量覆盖
    父类成员变量时,用“super.成员变量名”来引用父类成员变量。当然,如果父类的成员变量没有被覆盖,
    也可以用“super.成员变量名”来引用父类成员变量,不过这是不必要的。
    第三、当子类的成员方法覆盖了父类的成员方法时,也就是子类和父类有完全相同的方法定义(但方法体
     可以不同),此时,用“super.方法名(参数列表)”的方式访问父类的方法。
11. volatile
     volatile修饰的成员变量在每次被线程访问时,都强迫从共享内存中重读该成员变量的值。而且,当成员
     变量发生变化时,强迫线程将变化值回写到共享内存。这样在任何时刻,两个不同的线程总是看到某个成
     员变量的同一个值。
12.synchronized
    它包括两种用法:synchronized 方法和 synchronized 块。
    1) synchronized 方法:通过在方法声明中加入 synchronized关键字来声明 synchronized 方法。
    如:
    public synchronized void accessVal(int newVal);
    synchronized 方法控制对类成员变量的访问:每个类实例对应一把锁,每个 synchronized 方法都必
    须获得调用该方法的类实例的锁方能执行,否则所属线程阻塞,方法一旦执行,就独占该锁,直到从该方
    法返回时才将锁释放,此后被阻塞的线程方能获得该锁,重新进入可执行状态。这种机制确保了同一时刻对于
    每一个类实例,其所有声明为 synchronized 的成员函数中至多只有一个处于可执行状态(因为至多只有一
    个能够获得该类实例对应的锁),从而有效避免了类成员变量的访问冲突(只要所有可能访问类成员变量的
    方法均被声明为 synchronized)。
    2) synchronized 块:通过 synchronized关键字来声明synchronized 块。语法如下:
        synchronized(syncObject) {
             //允许访问控制的代码
       }
      synchronized 块是这样一个代码块,其中的代码必须获得对象 syncObject (如前所述,可以是类实例
      或类)的锁方能执行,具体机制同前所述。由于可以针对任意代码块,且可任意指定上锁的对象,故灵活性
     较高。
   3) 对synchronized(this)的一些理解(很细致,感谢作者!)
   a.当两个并发线程访问同一个对象object中的这个synchronized(this)同步代码块时,一个时间内只能有一
      个线程得到执行。另一个线程必须等待当前线程执行完这个代码块以后才能执行该代码块。
   b. 然而,当一个线程访问object的一个synchronized(this)同步代码块时,另一个线程仍然可以访问该   
       object中的非synchronized(this)同步代码块。
   c.尤其关键的是,当一个线程访问object的一个synchronized(this)同步代码块时,其他线程对object中所
      有其它synchronized(this)同步代码块的访问将被阻塞。
   d.第三个例子同样适用其它同步代码块。也就是说,当一个线程访问object的一个synchronized(this)同步
     代码块时,它就获得了这个object的对象锁。结果,其它线程对该object对象所有同步代码部分的访问都
     被暂时阻塞。

原创粉丝点击