静态代码块的执行顺序

静态代码块的执行顺序

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.csdn.net/chaseqrr/article/details/103802679
https://blog.csdn.net/weixin_43207025/article/details/118000759

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值