黑马程序员技术交流社区

标题: Java中的静态初始化 [打印本页]

作者: 牧歌    时间: 2014-12-11 18:28
标题: Java中的静态初始化
静态初始化块只在类加载时执行,且只会执行一次,同时静态初始化块只能给静态变量赋值,不能初始化普通的成员变量。
public class HelloWorld
{
        int num1;
        int num2;
        static int num3;

        public HelloWorld()
        {
                num1 = 91;
                System.out.println("通过构造方法为变量num1赋值");
        }

        {
                num2 = 74;
                System.out.println("通过初始化为变量num2赋值");
        }
       
        static
        {
                num3 = 83;
                System.out.println("通过静态初始化为静态变量num3赋值");
        }

        public static void main(String args[])
        {
                HelloWorld hello = new HelloWorld();
                System.out.println("num1:" + hello.num1);
                System.out.println("num2:" + hello.num2);
                System.out.println("num3:" + num3);
                HelloWorld hello2 = new HelloWorld();
        }

}

---------- java ----------
通过静态初始化为静态变量num3赋值
通过初始化为变量num2赋值
通过构造方法为变量num1赋值
num1:91
num2:74
num3:83
通过初始化为变量num2赋值
通过构造方法为变量num1赋值

通过输出结果可以看到,程序运行时静态初始化块最先被执行,然后执行普通初始化块,最后才执行构造方法。由于静态初始化块只在类加载时执行一次,所以当再次创建对象 hello2 时并未执行静态初始化块。



作者: caobin    时间: 2014-12-11 18:29
学习了~~
作者: 王海生    时间: 2014-12-11 18:31
的确学习了···
作者: 曹震国    时间: 2014-12-11 18:32
有点小难度啊。
作者: 侯鹏成    时间: 2014-12-11 18:55
没看出通过初始化为变量赋值与通过构造方法为变量赋值的区别:(
作者: 侯鹏成    时间: 2014-12-11 18:59
运行了一遍,确实上面的三个输出语句没按常理来,正如楼主所说,不过还是没看明白通过初始化为变量赋值与通过构造方法为变量赋值的区别




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