Java修饰符static、final、abstract、tra

2018-10-26  本文已影响0人  john_leventon

                                     

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修饰的方法,任意时刻只有一个线程能够访问)

上一篇下一篇

猜你喜欢

热点阅读