Java中的静态块,构造块和初始化

Java中的静态块,构造块和初始化

源代码:

public class InitializeDemo {
	 private static int k = 1;
	    private static InitializeDemo t1 = new InitializeDemo("t1");
	    private static InitializeDemo t2 = new InitializeDemo("t2");
	    private static int i = print("i");
	    //静态块
	    static {
	        print("静态块");
	        n=100;
	    }
	    private static int n = 99;
	    //构造块
	    {
	        print("构造块");
	        j=100;
	    }
	    public InitializeDemo(String str) {
	        System.out.println((k++) + ":" + str + "   i=" + i + "    n=" + n);
	        ++i;
	        ++n;
	    }
	    private int j = print("j");
	    public static int print(String str) {
	        System.out.println((k++) + ":" + str + "   i=" + i + "    n=" + n);
	        ++n;
	        return ++i;
	    }
	    public static void main(String[] args) {
	        InitializeDemo  n = new InitializeDemo("初始化");
	    }
}

运行结果:
在这里插入图片描述
分析:
1)先分析main函数中InitializeDemo n = new InitializeDemo("初始化");先进行引用,引用后执行静态块部分内容

2)给k静态赋值等于1,然后给该语句创建一个对象private static InitializeDemo t1 = new InitializeDemo("t1"); 接着执行构造块中的{ print("构造块"); j=100; }所以先执行打印里的内容,打印出“构造块”,因为程序只初始化到了**private static InitializeDemo t1 = new InitializeDemo("t1");**,由于后面的i和n并没有进行初始化,所以变量 i 和 n 默认为0。从而有了第一行输出结果**“构造块 i = 0 n = 0”**

3)按照执行顺序++i++n对变量 i 和 n 的值进行加一,然后在执行private int j = print("j");输出 “j”和 System.out.println((k++) + ":" + str + " i=" + i + " n=" + n);输出 i 和 n 的值从而有了第二行结果:" j i = 1 n = 1 "

4)之后按照代码执行顺序执行private static InitializeDemo t1 = new InitializeDemo("t1");与前两行结果同理,得到第三行结果:“ t1 i = 2 n = 2”

5)再执行private static InitializeDemo t2 = new InitializeDemo("t2");该内容与private static InitializeDemo t1 = new InitializeDemo("t1"); 中代码 执行过程相同,分别得出四,五,六行结果:“构造块 i=3 n=3 ” “ j i=4 n=4 ” “ t2 i=5 n=5 ”

6)继续执行最后一个private static int i = print("i"); 打印出“ i ”,然后++i++n对变量 i 和 n 的值进行加一,System.out.println((k++) + ":" + str + " i=" + i + " n=" + n);第二次执行了静态块中print("静态块"); 再执行++i++n进行输出所以第七和第八行的结果为:“i i = 6 n = 6” “静态块 i = 7 n = 7”

7)执行构造块部分的print("构造块");首先打印出是“构造块”然后根据静态块中执行的代码 private static int n = 99;n由100;定义为99,i 继续执行++i得出第九行结果:“ 构造块 i = 8 n = 99”

8)再执行private int j = print("j");通过 ++i++n对i和n进行加一,得到第十行结果:“j i= 9 n = 100”

9)执行完所以静态块内容之后,在执行初始化的内容,所以执行代码InitializeDemo n = new InitializeDemo("初始化");打印出字符串“初始化”通过 ++i++n对i和n进行加一,得到第十一行结果:“初始化 i= 10 n = 101”

注意:
在执行完所以静态块内容之后再去执行初始化的内容

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值