美文网首页
Java修饰符static、final、abstract、tra

Java修饰符static、final、abstract、tra

作者: john_leventon | 来源:发表于2018-10-26 21:23 被阅读0次

                                         

    1、static

    static可修饰:类、成员变量、方法、代码块(static修饰的代码块成为静态代码块,类一加载就执行)

    static不能修饰局部变量。

    2、final

    final可修饰:类(被final修饰的类不能被继承)、方法(被final修饰的方法可以被子类继承但不能被子类重写)、成员变量(被final修饰的成员变量可以被子类继承、必须被初始化)、局部变量(被final修饰的局部变量可以不被初始化)。

    3、abstract

    abstract可修饰:类(被abstract修饰的类叫做抽象类,抽象类只能被继承不能被实例化)、方法(被 abstract修饰的方法叫做抽象方法,没有方法体)。

    4、transient

    transient可修饰:成员变量(当一个成员变量被transient修饰,在序列化时便不会被序列化,反序列时其值为对应类型默认值如int类型默认值为0,引用类型默认值为null)

    5、volatile

    可修饰:变量(被volatile修饰的变量具有可见性,即一个线程对volatile修饰的变量的修改会立即被其它线程可见。)

    当对非 volatile 变量进行读写的时候,每个线程先从内存拷贝变量到CPU缓存中。如果计算机有多个CPU,每个线程可能在不同的CPU上被处理,这意味着每个线程可以拷贝到不同的 CPU cache 中。

    而声明变量是 volatile 的,JVM 保证了每次读变量都从内存中读,跳过 CPU cache 这一步。

    所以volatile是一种比synchronized更轻量级的同步机制

    需要注意的是volatitle并不能保证线程安全,因为它并不会通过加锁阻塞其它线程来保证线程安全,对于非原子操作比如 volatile int i = 0; i++;是非线程安全的。

    6、synchronized

    可修饰:方法(被synchronized修饰的方法,任意时刻只有一个线程能够访问)

    相关文章

      网友评论

          本文标题:Java修饰符static、final、abstract、tra

          本文链接:https://www.haomeiwen.com/subject/sbgltqtx.html