150天打卡day14__static和final
2021-04-22 18:20 作者:关阿姨的Java日记 | 我要投稿
优点
缺点
注意
思考:为啥需要静态初始化块?
类变量可以在构造函数中初始化为啥还要定义静态初始化块呢?
类名.类变量
常量。
欢迎👏点赞+关注,笔芯❤️

上节回顾
package
import
封装
本节重点
static
static英文含义静态的,所有的静态相关,都是用static关键字修饰的
static关键字可以修饰成员变量,称为静态变量
static关键字可以修饰方法,称为静态方法
static关键字可以修饰代码块,称为静态块
静态变量
由static修饰
属于类的,存在方法区中,只有一份
可以通过类名直接打点调用
所有对象共享的数据都统一声明为静态变量
飞机大战里的图片,视频,音频
优点:静态变量不需要实例化,静态变量的值可以直接赋值,不需要参数传递
缺点:静态变量属于类,所以在类存在的时候就会加载到内存中,如果一直没有被引用的话,会加大
内存负担和程序运行负担,影响运行效率
静态方法
由static修饰
静态方法和非静态方法都存储在方法区中,只有调用的时候有区别,静态方法在调用的时候
是直接用类名打点调用.非静态方法通过对象来调用
注意
如果想频繁的使用一个方法,并且这个方法不需要某个对象数据时,就可以设置为静态方法
静态方法中不允许有隐式的this关键字 ,this属于对象,不属于类,而静态属于类,不属于对象
静态方法中不能调用非静态成员
静态方法只能访问静态的变量和调用静态的方法,静态的只能使用静态的,但是非静态的可以调
用静态方法和变量,也可以调用非静态的变量和方法
静态块
静态代码块(静态初始化块):JVM加载类(加载在运行之前)时执行,静态代码块只执行一次,
静态块常用来执行类属性的初始化。
例如:
思考:为啥需要静态初始化块?
静态初始化块主要用来初始化类变量。有时需要有些代码在项目启动时就执行,静态代码块是主动执行的。
类变量可以在构造函数中初始化为啥还要定义静态初始化块呢?
因为,类变量可以通过类名.类变量的形式调用,有的时候我们不想为了初始化类变量而创建对象,所以就有了静态初始化块。
静态初始化块可以在类加载的时候执行一次。避免了了初始化类变量而创建对象
final
final 最后,最终的
final关键字可以修饰成员变量和局部变量,
final关键字可以修饰方法。
final关键字可以修饰类。
final 修饰变量
通常由final定义的变量称之为是常量。例如:常用于对一些特定数值的声明
final关键字可用于声明变量,必须在声明时就对其进行赋值操作,一旦该变量被设定,就不可
以改变
final关键字修饰一个基本类型的变量(包括局部变量和成员变量)时,该变量不能重
新赋值,第一次的值为最终的
fianl关键字修饰一个引用类型变量时,该变量不能重新指向新的对象
final修饰方法
final修饰的方法不允许被重写
final修饰类
如果希望一个类不允许任何类继承,而且也不允许其他人对这个类进行任何改动,可以将这
个类设置为final类
如果将这个类设定为final类,那么类中的所有方法都被隐式的设置为final形式的,但是类中的
成员变量可以被定义为final形式或者非final形式.
static final
声明的同时必须初始化
能同时被static和final关键字修饰的量。一般情况下,是公有的,静态的,不可改变的量
public static final修饰的量最好变量的名字全大写且单词间用下划线分隔。通过类名调用
这个量。
当一个常数或字符串我们需要在程序中反复使用的时候,我们就可以把它定义为static
final,这样内存就不用重复的申请和释放空间了。
针对引用类型变量的final修饰符也是很多人搞混淆的地方。实际上final只是修饰引用变量
的值(也就是限定引用保存的地址不能变)。至于该引用指向的对象,内容是否能变,那
就管不着了。所以,对于如下语句:
你可以修改它指向的对象的内容,比如:
但是不能修改它的值,比如:
总结
static 静态的 所有与静态相关的,都由static修饰
static修饰变量称之是静态变量,属于类存储在方法区,可以由类名直接调用
static修饰方法称之是静态方法,也属于类存储在方法区,可以又类名调用,静态方法中只能调用
静态变量和方法,非静态方法即可以调用非静态变量也可以调用静态变量和方法.
static修饰代码块称之是静态块,在类加载期间执行的代码块,只执行一次,一般用来做类的初始
化工作.
欢迎👏点赞+关注,笔芯❤️