static

  1. 修饰变量:静态变量随着类加载时被完成初始化,内存中只有一个,且JVM也只会为它分配一次内存,所有类共享静态变量
  2. 修饰方法:在类加载的时候就存在,不依赖任何实例;static方法必须被实现,不能被abstract修饰
  3. 修饰代码块:在类加载完成之后就会执行代码块中的内容

final

  1. 修饰变量:
  • 编译器常量:类加载的过程完成初始化,编译后带入任何计算式中,只能时基本类型
  • 运行时常量:基本数据类型活引用数据类型,引用不可变,但引用的对象内存可变
  1. 修饰方法:不能被继承,不能被子类修改
  2. 修饰类:不能被继承
  3. 修饰参数:final形参不可变

final的好处

  1. final 关键字提高了性能。JVM 和 Java 应用都会缓存 final 变量。
  2. final 变量可以安全的在多线程环境下进行共享,而不需要额外的同步开销。
  3. 使用 final 关键字,JVM 会对方法、变量及类进行优化。

static 方法是否可以覆盖

static 方法不能被覆盖,因为方法覆盖是基于运行时动态绑定的,而 static 方法是编译
时静态绑定的。static 方法跟类的任何实例都不相关,所以概念上不适用。