黑马程序员技术交流社区

标题: Java中的静态块,构造块和初始化 [打印本页]

作者: 逆风TO    时间: 2020-5-18 15:19
标题: Java中的静态块,构造块和初始化

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”

注意:

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


本文转载自CSDN








欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2