一道关于加载顺序的题目分析

本文详细解析了Java中静态成员、静态代码块与实例成员的初始化顺序,并通过具体示例代码展示了整个过程。
package com.gt.world.oa.aaa;

/**
 *
 * @author GT
 */
public class Test20140331 {
    public static int k = 0;
    public static Test20140331 t1 = new Test20140331("t1");
    public static Test20140331 t2 = new Test20140331("t2");
    public static int i = print("i");
    public static int n = 99;
     
    public int j = print("j");
     
    {
        print("构造块");
    }
     
    static {
        print("静态块");
    }
 
    public Test20140331(String str) {
        System.out.println((++k) + ":" + str + "   i=" + i + "    n=" + n);
        ++i;
        ++n;
    }
 
    private static int print(String str) {
        System.out.println((++k) + ":" + str + "   i=" + i + "   n=" + n);
        ++n;
        return ++i;
    }
 
    public static void main(String[] args) {
        Test20140331 t = new Test20140331("init");
        
        Test20140331 t2 = new Test20140331("init2");
    }
 
}

/**
 *  
 *  1 程序从main函数开始执行 ,执行main函数,需要先加载class文件
 *    2 加载class文件的同时,同时初始化static成员变量和static块,执行顺序为从上到下依次执行
 *    3 加载class完成之后,初始化成员变量。注:普通代码块,可以看作成员变量,执行顺序为从上到下依次执行
 *    4 上面的过程完成之后,再从main函数的第一条语句开始执行。
 *    5 注:静态成员变量和静态代码块只会 在加载class文件的时候 执行一次
 */

/**
 * public static Test20140331 t1 = new Test20140331("t1");
 * 1>  1:j         i=0    n=0
 * 2>  2:构造块     i=1    n=1
 * 3>  3:t1        i=2    n=2
 *
 * public static Test20140331 t2 = new Test20140331("t2");
 * 4>  4:j         i=3    n=3
 * 5>  5:构造块     i=4    n=4
 * 6>  6:t2        i=5    n=5
 *
 * public static int i = print("i");
 * 7>  7:i         i=6    n=6
 *
 * public static int n = 99;
 * 8>  n=99
 *
 *     static {
            print("静态块");
        }
 * 9>   8:静态块    i=7    n=99
 *
 * Test20140331 t = new Test20140331("init");
 * 10>  9:j         i=8    n=100
 * 11>  10:构造块     i=9    n=101
 * 12>  11:init      i=10    n=102
 *
 *  * Test20140331 t = new Test20140331("init2");
 * 13>  12:j         i=11     n=103
 * 14>  13:构造块     i=12     n=104
 * 15>  14:init2      i=13    n=105
 *
 */



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值