Static和Final关键字
# Static和Final关键字
> author:licoba
>create date:202/04/06
## 一、Static关键字
> 作用:可以在没有创建任何对象的前提下,仅仅通过类本身来调用static方法
包括`static方法`、`static变量`、`static代码块`
### Static方法
也就是静态方法。在静态方法中是不能访问非静态成员变量和非静态成员方法的,但是反过来可以。
### Static变量
也就是静态变量。静态变量和非静态变量之间的区别:静态变量被所有的对象所共享,在内存中只有一个副本,它当且仅当类被加载的时候会被初始化。
而非静态成员变量是对象所拥有的,在对象创建的时候被初始化,如果创建了多个对象,那么在内存中也就有多个副本,各个非静态变量之间相互独立,互不影响。
**静态成员变量也是可以通过object或者this的点方法来调用的**,这点与普通的成员变量并没有什么不一样。
### Static代码块
在类中定义一个方法`static{……}`,这个就叫static代码块。在类被初次加载的时候,会按照static代码块在类冲定义的顺序来加载,每个代码块都只会被加载一次。
static代码块可以优化程序的性能,因为只用加载一次,所以很多时候会将一些只需要进行一次的初始化操作都放在static代码块中进行。
## 二、Final关键字
> final用于声明属性,方法和类,分别表示**属性不可变**,**方法不可覆盖**,**类不可继承**。
- final类不能被继承,但是final方法可以被继承,只是不能覆盖
- final定义的成员变量等于常量,只能被赋值一次,赋值之后不能再改变
- final不能修饰构造方法
## Q&A
- 为什么要用static关键字?
可以在没有创建对象的情况下来进行调用(方法/变量)。
- new一个对象方法执行顺序?
static代码块>main方法>父类的static方法->父类的成员变量->父类的构造方法->子类的成员变量->子类的构造方法
- final的作用?
final用于声明属性,方法和类,分别表示属性不可变,方法不可覆盖,类不可继承。