静态代码块的执行顺序
public class demo {
private static int num = 1; // 1
static {
num = 10; // 2
number = 50; // 3
System.out.println(num); // 4
//System.out.println(number); //报错: 非法前向引用
}
private static int number = 5; // 5
public static void main(String[] args) {
System.out.println(demo.num); // 6
System.out.println(demo.number);// 7
}
}
- 程序启动后,优先运行main方法中的静态代码块
- 所有静态代码按照代码顺序执行
- 静态代码块中的变量不能前向引用,只能赋值,不能引用(见两个sout,其中num可以调用,number不能调用)。
- 静态代码块中的内容在项目启动时自动执行,只能执行一次,后续无法调用
- 所有静态代码块执行结束后,进入main方法
再举一个例子:
Car
public class Car {
static {
System.out.println("my first car...");
move(); //move可以被调用
//stop(); //stop不能被调用,因为不是静态方法
}
public Car() {
System.out.println("new car...");
}
public static void move() {
System.out.println("move...");
}
public void stop() {
System.out.println("stop...");
}
}
test
public class test {
public static void main(String[] args) {
Car car1 = new Car();
car1.move();
car1.stop();
Car car2 = new Car();
}
}
/*
my first car... //第一次实例化Car时,初始化Car程序,调用了静态代码块
move... //静态代码块调用了move()方法
new car... //调用构造函数
move... //car1.move();
stop... //car1.stop();
new car... //第二次实例化Car时,Car程序已被初始化,不会再调用静态代码块
*/
参考博客:https://blog.youkuaiyun.com/chaseqrr/article/details/103802679
https://blog.youkuaiyun.com/weixin_43207025/article/details/118000759