目录内容
static关键字
静态初始化块
首先来说一个凡是
凡是用static修饰的内容,具有以下两个特性:
1、与类有关,与对象无关;
2、一定会在加载期有特殊动作;
因为 static 修饰的属性在内存上没有存放在每个对象身上,所以不是一个对象一个属性,而是全类共享一个属性!存放在数据段的静态区当中,只有一个。
而由于static修饰的属性与对象无关,所以可以直接使用类名**.**该属性进行访问,不用产生对象。
且:static修饰的属性是在加载期的时候产生的,并完成初始化;
什么时候使用static修饰呢?
1、必须要全类共享唯一值的属性,才能使用static修饰;
2、由1可以知道,常量可以直接使用static修饰;
小结:
1、用static修饰的方法可以直接用 “类名.” 的方式进行访问,当然也可以用 “对象.” 的方式访问;
2、静态方法不能访问本类的非静态属性,当然也不能调用本类的其他非静态方法,但是非静态方法可以访问本类的静态方法,或调用本类的非静态方法;甚至静态方法里面不能写super或this;
3、在加载期,会首先加载一个类的静态方法,然后再加载非静态方法;
4、通常我们只把工具类的工具方法设计为static的;
5、构造方法不能用static修饰,因为构造方法与对象息息相关;
静态初始化块
static修饰初始化块,就是静态初始化块;
例:
`static{
指令集;
}
初始化块:
初始化块就是一个没有方法声明,只有方法实现的代码块!他会在对象产生的时候,被自动调用;每产生一个对象被调用一次;通常里面的代码是产生对象要做一些初始化准备工作—被称为初始化块,也叫实例初始化块;
而静态初始化块就是在实例初始化块前面加上static修饰的;与实例初始化块相比,静态初始化块只在第一次调用时被加载,之后不再被加载;静态初始化块不能调用this或super,以及本类的对象属性或对象行为;
用途:
在很多工程项目中,如果需要在加载期完成资源的开启,空间的划分,线程池或链接通道的建立,都会选择写在静态初始化当中;