类加载顺序

8个月前 (12-10) wang JAVA, 技术杂谈 0评论 已收录 233℃ 浏览数:169
<div>public class B</div>
<div>{</div>
<div>    public static B t1 = new B();</div>
<div>    public static B t2 = new B();</div>
<div>    {</div>
<div>        System.out.println("构造块");</div>
<div>    }</div>
<div>    static</div>
<div>    {</div>
<div>        System.out.println("静态块");</div>
<div>    }</div>
<div>    public static void main(String[] args)</div>
<div>    {</div>
<div>        B t = new B();</div>
<div>    }</div>
<div>}</div>

 

输出 构造块 构造块 静态块 构造块

静态块:用static申明,JVM加载类时执行,仅执行一次
构造块:类中直接用{}定义,每一次创建对象时执行
执行顺序优先级:静态块>main()>构造块>构造方法
静态块按照申明顺序执行,所以先执行publicstaticB t1 = newB();该语句创建对象,则又会调用构造块,输出构造块
接着执行public static B t1 = new B();输出构造块

再执行

static
{
System.out.println("静态块");
}输出静态块

最后main方法执行,创建对象,输出构造块。

 

(1) 父类静态代码块(包括静态初始化块,静态属性,但不包括静态方法)
(2) 子类静态代码块(包括静态初始化块,静态属性,但不包括静态方法 )
(3) 父类非静态代码块( 包括非静态初始化块,非静态属性 )
(4) 父类构造函数
(5) 子类非静态代码块 ( 包括非静态初始化块,非静态属性 )
(6) 子类构造函数
博主

Just do it. Now or never.

相关推荐

嗨、骚年、快来消灭0回复。