static修饰的成员方法和成员变量我们称为静态的成员方法和成员变量,那么静态的成员变量和普通的成员变量有什么区别呢?静态的成员变量不属于对象,所以不需要通过对象的引用来访问,直接可以通过类名就可以访问。我们通过一个例子来感受一下:小红小明都是学生,并且都是一年级二班的同学,所以我们定义小红和小明时每次都要定义年级,但这样太麻烦每次实例化对象都要初始化年级这个成员变量,这时我们使用static关键字修饰年级这个成员变量,将他变为静态的成员变量,这样年级只需要初始化化一次就可以了。

甚至我们不需要实例化对象都可以调用静态的成员变量。

总结一下静态成员变量:
1、静态成员变量不属于具体的对象,是类的属性,所有的对象共享,但不存储在某个对象的空间中。
2、静态成员变量即可以通过对象访问,也可以通过类访问,我们推荐使用类名去访问静态成员变量
3、静态成员变量是存储在方法区的
4、静态成员变量的生命周期伴随类的一生。
被static修饰的成员方法我们称为静态的成员方法,是类的方法, 不是某个对象的方法。静态成员一般都是通过静态方法来访问的。

像这样用private修饰的成员变量我们如何在类外赋值与调用呢?我们通过get\set方法去赋值和调用,对于静态的成员变量来说我们需要使用静态的方法。


总结一下静态成员方法:
1、静态成员方法不属于某个具体的对象,是类方法
2、可以通过对象调用,也是通过类名.静态方法名(…)方式调用,更推荐后者。
3、不能再静态方法中访问任何非静态成员变量
4、静态方法中不能调用任何非静态方法,因为非静态方法有this参数,再静态方法中调用时候无法传递this引用。
1、直接赋值

类似于这样的初始化我们就称为直接赋值
2、默认初始化
3、通过get和set方法来进行初始化

4、可以在构造对象的时候进行赋值,不推荐这样写,因为静态成员变量不属于某个对象。
5、可以通过代码块进行赋值,什么是代码块呢?下面我们就来讲一讲。
我们说使用{}定义的一段代码就称为代码块,我们根据代码块的定义的位置以及关键字,可以分为以下四种代码块。
普通代码块:定义在方法中的代码块

构造块:定义在类里的代码块,也叫:实例代码块。构造代码块一般用于初始化成员变量。

使用static定义的代码块称为静态代码块,一般用于初始化静态成员变量。在实例化对象之前准备一些数据。


我们实例化一个对象,看一看代码执行的顺序是什么

通过执行的结果我们发现静态代码块优先执行,之后是普通代码块,最后是构造代码块。但是当我们第二次实例化对象时,静态代码块并没有执行。

所以我们可以说,静态代码块只被执行了一次。
我们来看看在继承中代码块的顺序:

我们通过运行可以总结出来,继承关系中的代码块执行顺序为:
1、父类静态代码块优先于子类静态代码块,且最早执行。
2、父类普通代码块和构造代码块执行。
3、子类普通代码块和构造代码块最后执行。
4、同样的静态代码块只被执行一次。
简单总结就是静态代码块优先,父类优先于子类。