static和final的区别
当修饰变量的时候
static修饰变量:静态变量随着类加载时完成初始化,内存中只有一个,且JVM只会为它分配一次内存,所有对象共享静态变量。
final修饰变量:如果修饰的是基本类型的变量,那么在编译之前就必须要为这个变量赋值,以后这个变量就相当于是一个常量,它的值就不能更改了;
如果修饰的是对象类型,那么这个对象的引用地址不能变,但是对象在堆内存中的内容可以变
当修饰方法的时候:
在类加载的时候就存在,不依赖任何实例,所有对象共用一个静态方法
final修饰方法不能被修改。
static和final为什么不能修饰抽象方法?
简单说 抽象方法是没有具体方法内容的,不能实例化的,存在的意义就是为了被继承然后重写所有方法后提供使用。但是 static和final都是只加载一次,
不能改变方法内容,修饰了之后这个方法就变成毫无用处的空方法了。