Java代码执行顺序(转载--自己看)

在这里插入图片描述
在这里插入图片描述

发现引用静态变量打印到控制台,也是先加载静态代码块、方法(按顺序执行)
在这里插入图片描述

在运行一个Java程序时,分为类加载过程和实例化过程,即static修饰的代码块、属性、声明为类加载,类的普通属性、代码块、构造器为实例化过程。其中类加载的代码属于整个类,只执行一次;而实例化过程中的代码属于实例化对象的,每次实例化过程都执行。

执行顺序类加载先于实例化执行,执行过程自上而下按顺序执行。如果父类有类加载代码,先按前面的规则执行父类的类加载代码,执行完后再执行自己的类加载代码。如果类加载过程中实例化了对象,则暂停类加载过程,执行实例化代码,实例化完成后继续执行未执行完的类加载代码。

当类加载代码执行完后,执行实例化代码,实例化过程中不能执行类加载过程。实例化变量先自上而下按顺序执行普通代码块、属性,最后执行构造器,如果有父类就先按前面的规则执行父类的。

当执行完类加载和实例化代码后,再去执行main方法里的内容。

以下为验证代码:`

public class MyTest extends Test{
    public static int x = count("静态");
    static {
        System.out.println("静态代码块1");
    }
    public static MyTest test1 = new MyTest("test1");
    public static MyTest test2 = new MyTest("test2");
    public static int n = count("非静态");
    public int a = count("");
    {
        System.out.println("普通代码块1");
    }
    static {
        System.out.println("静态代码块2");
    }
    public static int count(String string){
        System.out.println("赋值"+string+"变量");
        return 0;
    }
    public MyTest(String string){
        System.out.println("构造器实例化"+string);
    }
    {
        System.out.println("普通代码块2");
    }
    public static void main(String[] args) {
        MyTest test3 = new MyTest("Mian");
    }
}
class Test {
    {
        System.out.println("父类普通代码块");
    }
}



————————————————
版权声明:本文为CSDN博主「柳承溪」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_42785286/article/details/82179559

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值