类加载机制

类加载是“类”的加载,负责类变量(静态变量)和静态代码块。

public static void main(String[] args) {
        /**首先加载类,然后实例化:
         * 类加载过程:
         *         首先加载所有的静态方法,但不执行;
         *         然后按照静态变量的顺序开始初始化
         *         静态变量初始化完毕后执行静态构造块
         *         此时类加载完毕
         * 实例化过程:
         *         加载非静态方法
         *         初始化非静态变量
         *         执行构造代码块
         *         执行构造方法
         *         此时实例化完毕
         */
        StaticTest t = new StaticTest("init");
    }

2、说出执行顺序:

public class B
{
    public static B t1 = new B();
    public static B t2 = new B();
    {
        System.out.println("构造块");
    }
    static
    {
        System.out.println("静态块");
    }
    public static void main(String[] args)
    {
        B t = new B();
    }
}

该题重点:

  1. 静态块(以static开头的部分)在JVM加载该class时只执行一次。

  1. 在一个类中,静态块和静态属性是优先级别相同的,所以按先后顺序执行。

所以JVM在加载这个类时,首先因为静态块和静态属性优先级别相同,所以按先后顺序是new两个B对象赋予t1和t2, 所以会先打印两次"构造块",紧接着执行静态块,打印"静态块",最后执行静态的main方法,main方法中再次new了一个B对象,所以再次打印"构造块"。

所以该问题的答案为:构造块 构造块 静态块 构造块。

1、静态块、main方法、构造块、构造方法的执行顺序

1、static final修饰的常量属性会存到常量池中,类不会加载

https://blog.youkuaiyun.com/qq_34125999/article/details/113904227

2、如果继承类,则执行顺序为:

父类的静态代码块和静态变量初始化-子类的静态代码块和静态变量初始化-父类的非静态方法-父类的构造方法-子类的非静态方法-子类的构造方法

https://blog.youkuaiyun.com/qq_43477676/article/details/115041433

3、类加载时机

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值