静态变量
- 静态变量也称为类变量,这个变量是属于类的,类的所有实例都共享静态变量,可以通过类名来访问他们。静态变量在内存中只存在一份。
- 实例变量:每创建一个实例就产生一个实例变量,与实例同时产生,同时销毁。
/**
* @author Pickle
* @version V1.0
* @date 2024/3/5 11:27
*/
public class demo {
private static int x = 10;
private int y;
public static void main(String[] args) {
demo.x = 20;
int a = demo.x;
int b = new demo().y;
System.out.println(a + " " + b);
}
}
静态方法
静态方法在类加载的时候就存在了,它不依赖于任何实例,所以静态方法必须有实现,不能是抽象方法。
只能访问静态字段或者静态方法,方法中不能含有this和super。
静态语句块
静态语句块在类初始化时运行一次。
import java.util.*;
import java.util.function.Consumer;
/**
* @author Pickle
* @version V1.0
* @date 2024/3/5 11:27
*/
public class demo {
static{
System.out.println("Initialization");
}
public static void main(String[] args) {
demo a = new demo();
demo b = new demo();
demo c = new demo();
demo d = new demo();
}
}
输出
Initialization
静态内部类
静态内部类不依赖于外部类的实例,静态内部类不能访问外部类的非静态的变量和方法。
初始化顺序
静态变量和静态语句块优先于实例变量和普通语句块,静态变量和静态语句块的初始化顺序取决于它们在代码中的顺序。
存在继承的情况下,初始化的顺序为
- 父类(静态变量、静态语句块)
- 子类(静态变量、静态语句块)
- 父类(实例变量,普通语句块)
- 父类(构造函数)
- 子类(实例变量、普通语句块)
- 子类(构造函数)