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用于声明属性,方法和类,分别表示属性不可变,方法不可覆盖,类不可继承。