A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 牧歌 中级黑马   /  2014-12-11 18:28  /  943 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

静态初始化块只在类加载时执行,且只会执行一次,同时静态初始化块只能给静态变量赋值,不能初始化普通的成员变量。
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 时并未执行静态初始化块。


5 个回复

倒序浏览
学习了~~
回复 使用道具 举报
的确学习了···
回复 使用道具 举报
有点小难度啊。
回复 使用道具 举报
没看出通过初始化为变量赋值与通过构造方法为变量赋值的区别:(
回复 使用道具 举报
运行了一遍,确实上面的三个输出语句没按常理来,正如楼主所说,不过还是没看明白通过初始化为变量赋值与通过构造方法为变量赋值的区别
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马