static
- 修饰变量:静态变量随着类加载时被完成初始化,内存中只有一个,且JVM也只会为它分配一次内存,所有类共享静态变量
- 修饰方法:在类加载的时候就存在,不依赖任何实例;static方法必须被实现,不能被abstract修饰
- 修饰代码块:在类加载完成之后就会执行代码块中的内容
final
- 修饰变量:
- 编译器常量:类加载的过程完成初始化,编译后带入任何计算式中,只能时基本类型
- 运行时常量:基本数据类型活引用数据类型,引用不可变,但引用的对象内存可变
- 修饰方法:不能被继承,不能被子类修改
- 修饰类:不能被继承
- 修饰参数:final形参不可变
final的好处
- final 关键字提高了性能。JVM 和 Java 应用都会缓存 final 变量。
- final 变量可以安全的在多线程环境下进行共享,而不需要额外的同步开销。
- 使用 final 关键字,JVM 会对方法、变量及类进行优化。
static 方法是否可以覆盖
static 方法不能被覆盖,因为方法覆盖是基于运行时动态绑定的,而 static 方法是编译
时静态绑定的。static 方法跟类的任何实例都不相关,所以概念上不适用。