static 和final 的区别

Posted ytcxy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了static 和final 的区别相关的知识,希望对你有一定的参考价值。

static 和final 的区别

  • static
    • 修饰变量: 静态变量随着类加载时被完成初始化,内存中只有一个, 且JVM也只会为它分配一次内存,所有类共享静态变量
    • 修饰方法: 在类加载器的时候就存在,不依赖任何实例; static方法必须实现,不能用 abstract修饰
    • 修饰代码块: 在类加载完之后就会执行代码块中的内容
    • 父类静态代码块 -> 子类静态代码块 -> 父类非静态代码块 -> 父类构造方法 -> 子类非静态代码块 -> 子类构造方法
  • Final
    • 修饰变量:
      • 编译器常量: 类加载的过程完成初始化,编译后带入到任何计算式中,只能是基本类型
      • 运行时常量: 基本数据类型或引用数据类型。引用不可变,但引用的对象内容可变。
    • 修饰方法: 不能被继承,不能被子类修改
    • 修饰类: 不能被继承
    • 修饰形参: final 形参不可变

final 的好处

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

static 的方法是否可以被覆盖?

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

以上是关于static 和final 的区别的主要内容,如果未能解决你的问题,请参考以下文章

java final static 和final区别

Java中 final和static修饰的变量有啥区别?

static 和final 的区别

static 和final 的区别

Java基础_final和static区别

final 和 static之间的区别和联系