static
1. java中的static与C/C++中的static不同,不会影响到变量或者方法的作用域。
Java中能够影响到访问权限的只有private、public、protected(包括包访问权限)这几个关键字
2. “static方法就是没有this的方法。在static方法内部不能调用非静态方法,反过来是可以的。而且可以在没有创建任何对象的前提下,仅仅通过类本身来调用static方法。这实际上正是static方法的主要用途。”即方便在没有创建对象的情况下来进行调用(方法/变量)。
3. 在C/C++中static是可以作用域局部变量的,但是在Java中切记:static是不允许用来修饰局部变量
final
被 final 修饰的实例变量必须显式指定初始值。final 修饰符通常和 static 修饰符一起使用来创建类常量。
final方法可以被子类继承,不可被子类修改
final类不能被继承
abstract
一个类不能同时被final和abstract修饰
抽象方法没有任何实现,具体由子类实现的一种方法
不能被声明成final和static
任何继承抽象类的子类必须实现父类的所有抽象方法,除非该子类也是抽象类。
如果一个类包含若干个抽象方法,那么该类必须声明为抽象类。抽象类可以不包含抽象方法。
抽象方法的声明以分号结尾,例如:public abstract sample();
volatile
volatile 修饰的成员变量在每次被线程访问时,都强制从共享内存中重新读取该成员变量的值。而且,当成员变量发生变化时,会强制线程将变化值回写到共享内存。这样在任何时刻,两个不同的线程总是看到某个成员变量的同一个值。
一个 volatile 对象引用可能是 null。
例子:
public class MyRunnable implements Runnable{ private volatile boolean active;
public void run() {
active = true;
while (active) // 第一行 {
// 代码
}
}
public void stop() {
active = false; // 第二行
}
}
通常情况下,在一个线程调用 run() 方法(在 Runnable 开启的线程),在另一个线程调用 stop() 方法。 如果第一行中缓冲区的 active 值被使用,那么在第二行的 active 值为 false 时循环不会停止。
但是以上代码中我们使用了 volatile 修饰 active,所以该循环会停止
网友评论