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 的区别的主要内容,如果未能解决你的问题,请参考以下文章