一. 静态
1.1 概念
关键字static
在定义类的时候,类中会用属性和功能,这些属性和功能都是创建对象调用后才有意义的。
而某些属性是所有对象共享的,那么此时就可以把这个属性定义为static的,表示该属性不是某一对象的特有内容,而是属于整个类的。
1.2 特点
- 被static修饰的成员随着类的加载而加载
- 被static修饰的成员属于类,不属于该类某一对象
- 被static修饰的成员是该类对象的共享数据
- 被static修饰的成员可以直接用类名访问,格式:类名.静态成员
- static只能修饰成员不能修饰局部
- 静态成员只能访问静态成员,不能访问非静态的成员;非静态的成员既能访问静态成员也能访问非静态的成员
- 静态不能访问this和super
1.3 什么时候使用静态
1、为了方便调用
注:静态成员的生命周期是随着类的加载而加载,随着类的释放才会被释放,所以与非静态成员不同的是,静态成员不会随着对象的释放而释放,会长时间的存在于内存中,如果一味的将成员定义为静态会因为数据得不到及时释放而导致内存压力过大。
2、定义共享数据时
1.4 静态常量
格式:
public static final 变量名 = 值;
表示是的当前这个变量是整个中类所有对象的共享数据,并且这个共享数据是一个固定值,用于明确当前操作执行的是哪一个相对于功能。
1.5 静态代码块
1.5.1 概念
被static修饰的代码块
1.5.2 格式
static {
// ...
}
1.5.3 特点
1、最优先执行的
2、只会执行一次
3、多个静态代码块,会根据书写的先后顺序依次执行
1.5.4 作用
对类进行全局的初始化
二. 加载到内存中时机
1、类:类中的成员被访问时,类会优先被加载进内存
2、非静态方法:对象调用时
3、非静态成员变量:对象调用时
4、局部变量:该变量所在方法进入内存时
5、静态:随着类的加载进入内存