final 和 static 的区别
final修饰的变量有三种:静态变量、实例变量和局部变量,分别表示三种类型的常量。
static表示“全局”或者“静态”的意思,用来修饰成员变量和成员方法,也可以形成静态static代码块,但是Java语言中没有全局变量的概念
一、final 和 staic 区别
成员变量 (能否修改值)
final
final成员变量表示常量,只能被赋值一次,赋值后不能再被改变
staic
被static修饰的成员变量独立于该类的任何对象, static 修饰的变量可以被赋值多次
类 (类是否可以不用初始化就访问)
final
final类不能被继承,没有子类,final类中的方法默认是 final 的
static
static 类也不能被继承,可以不用初始化而访问
方法
final
final 方法不能被子类的方法重写,但可以被继承
final 不能用于修饰构造方法
* :private 不能被子类方法覆盖,private类型的方法默认是final类型的
static
static 方法可以被继承,但是不能重写
被static修饰的成员方法独立于该类的任何对象, 不依赖类特定的实例,被类的所有实例共享。
只要这个类被加载,Java虚拟机就能根据类名在运行时数据区的方法区内定找到他们。因此,static对象可以在它的任何对象创建之前访问,无需引用任何对象。
static方法是不在对象上执行的方法,不需要类的实例化,可以直接通过类调用。
二、final 和 static 一起用
修饰成员变量
static final用在变量上相当于一个”全局变量“,一旦初始化后就不能被修改,并且可以通过类名调用,整个类共享一个
修饰类
表明方法不能被子类修改(可以被继承被调用),并且可以通过类名调用
*: static final 与 final static相同
[1] https://www.cnblogs.com/ggzhangxiaochao/p/10640905.html
[2] https://blog.csdn.net/azwhjp/article/details/107506156
静态属性、静态方法和非静态的属性都可以被继承和隐藏而不能被重写