【JavaSE】static关键字

static关键字修饰成员方法成员变量

静态成员变量

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

甚至我们不需要实例化对象都可以调用静态的成员变量。
在这里插入图片描述
总结一下静态成员变量

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

静态成员方法

static修饰的成员方法我们称为静态的成员方法,是类的方法, 不是某个对象的方法。静态成员一般都是通过静态方法来访问的。
在这里插入图片描述
像这样用private修饰的成员变量我们如何在类外赋值与调用呢?我们通过get\set方法去赋值和调用,对于静态的成员变量来说我们需要使用静态的方法。
在这里插入图片描述
在这里插入图片描述

总结一下静态成员方法

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

static成员变量的初始化

1、直接赋值
在这里插入图片描述
类似于这样的初始化我们就称为直接赋值
2、默认初始化
3、通过get和set方法来进行初始化
在这里插入图片描述
4、可以在构造对象的时候进行赋值,不推荐这样写,因为静态成员变量不属于某个对象。
5、可以通过代码块进行赋值,什么是代码块呢?下面我们就来讲一讲。

代码块

我们说使用{}定义的一段代码就称为代码块,我们根据代码块的定义的位置以及关键字,可以分为以下四种代码块。

普通代码块

普通代码块:定义在方法中的代码块
在这里插入图片描述

构造代码块

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

在这里插入图片描述

静态代码块

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

在这里插入图片描述

代码块的执行顺序

在这里插入图片描述
我们实例化一个对象,看一看代码执行的顺序是什么
在这里插入图片描述
通过执行的结果我们发现静态代码块优先执行,之后是普通代码块,最后是构造代码块。但是当我们第二次实例化对象时,静态代码块并没有执行。
在这里插入图片描述
所以我们可以说,静态代码块只被执行了一次。

继承中的代码块执行顺序

我们来看看在继承中代码块的顺序:
在这里插入图片描述
我们通过运行可以总结出来,继承关系中的代码块执行顺序为:

1、父类静态代码块优先于子类静态代码块,且最早执行
2、父类普通代码块和构造代码块执行
3、子类普通代码块和构造代码块最后执行
4、同样的静态代码块只被执行一次

简单总结就是静态代码块优先,父类优先于子类。

评论 21
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

悲伤猪小猪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值