Java中的final和static

1.final修饰类
用final修饰类,表示这个类不能被继承

2.final修饰方法

即父类的final方法是不可以被子类继承重写的。
如果父类中的final方法是public修饰的,子类可以继承到此方法,子类会重写此方法,将会导致编译出错
如果父类中的final方法是private修饰的,子类继承不到此方法,这时子类可以定义一个和父类中的final方法相同的方法,因为这个方法是属于子类重新定义的,所以编译不会出错

3.final修饰变量
final成员变量表示常量,一但被赋值,值不可以再被改变
当final修饰一个基本数据类型时,该基本数据类型的值在初始化之后便不能再改变。
当final修饰一个引用类型时,在初始化之后不能再让其指向其他对象,但是对象的内容是可以改变的。

4.static关键字作用:在没有创建对象的情况下来调用方法/变量
static修饰的方法或变量不需要依赖对象进行访问,只要类被加载了就可以
1.static修饰的方法,即类.方法

2.static变量
即静态变量,静态变量可以被所有对象共享。
对于静态变量在内存中只有一个拷贝(节省内存),JVM只为静态分配一次内存,在加载类的过程中完成静态变量的内存分配,可用类名直接访问(方便),当然也可以通过对象来访问(但是这是不推荐的)。
对于实例变量,每创建一个实例,就会为实例变量分配一次内存,实例变量可以在内存中有多个拷贝,互不影响(灵活)。
static成员变量的初始化顺序按照定义的顺序进行初始化。static不可以修饰局部变量;
所以一般在需要实现以下两个功能时使用静态变量:
    • 在对象之间共享值时
    • 方便访问变量时
3)static代码块
static关键字还有一个比较关键的作用就是 用来形成静态代码块以优化程序性能。static块可以置于类中的任何地方,类中可以有多个static块。在类初次被加载的时候,会按照static块的顺序来执行每个static块,并且只会执行一次。
为什么说static块可以用来优化程序性能,是因为它的特性:只会在类加载的时候执行一次。

原文地址:https://www.cnblogs.com/de-ming/p/12849860.html