final 关键字
final 修饰 类
final 修饰 类 的时候,表示类不能被继承。所以 final 不能修饰抽象类。
final 修饰 方法
final 修饰 方法 的时候,表示方法不能被重写。子类继承父类的方法,不能重写 final 修饰的方法。
private 修饰的方法,会被隐式指定为final。
final 修饰 变量
final 修饰 变量 的时候,表示变量不能被改变。修饰基本数据类型的时候,值不能改变。修饰引用类型的变量的时候,表示引用指向的对象不能改变,但是对象的值可以改变。
final 修饰成员变量时,需要在定义时或构造器中进行初始化赋值。
static 关键字
static 修饰 类
static 可以修饰类,这个类只能作为一个类的内部类使用。普通类不能用 static 修饰。
static 修饰 方法
static 方法也成为 静态方法,可以不依赖于对象直接访问。
静态方法不能够调用非静态方法。
static 修饰变量
static 只能修饰成员变量,不能修饰普通变量,成为静态变量。
静态变量在内存中只有一个,为所有的对象共享,只有在类初始加载的时候才会初始化。非静态变量属于对象,不同对象的非静态变量不影响。
【注】静态变量虽然独立于对象,但是可以通过对象去访问。
static 修饰代码块
class Person {
static {
System.out.println("person static");
}
}
public Person() {System.out.println("product person");}
静态代码块随着类的加载而执行,并且只执行一次。
上述代码的结果是
person static
product person
public protected private
修饰符 | 同一个类 | 同一个包 | 子类 | 所有类 |
---|---|---|---|---|
private | * | |||
default | * | * | ||
protected | * | * | * | |
public | * | * | * | * |