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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 为你而去 中级黑马   /  2014-2-28 09:02  /  1025 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文


class StaticCode
{
        static
        {
                System.out.println("c");
        }
        {
                System.out.println("d");
        }
        public static void show()
        {
                System.out.println("show run");
        }
}

class  StaticCodeDemo
{
        static
        {
                System.out.println("a");
        }
        public static void main(String[] args)
        {
                new StaticCode();   //不同点
                System.out.println("Hello World!");
        }
        static
        {
                System.out.println("b");
        }
}
运行结果:
a
b
c
d
Hellow  World

class StaticCode
{
        static
        {
                System.out.println("c");
        }
        {
                System.out.println("d");
        }
        public static void show()
        {
                System.out.println("show run");
        }
}

class  StaticCodeDemo
{
        static
        {
                System.out.println("a");
        }
        public static void main(String[] args)
        {
                StaticCode.show();//不同点
                System.out.println("Hello World!");
        }
        static
        {
                System.out.println("b");
        }
}
运行结果
a
b
c
show run
Hellow  World

下边的为什么执行不到“d”??不是说Static代码块会随着类的存在而执行吗

评分

参与人数 1技术分 +1 收起 理由
何伟超 + 1

查看全部评分

3 个回复

倒序浏览
你代码里打印d的代码块是普通代码块,在创建对象的时候才会执行。你在main函数里并没有创建对象,而是直接用的类名。静态方法调用的show函数,所以不会打印d。你把打印d的代码块声明为静态代码块就会打印d了。

评分

参与人数 1技术分 +1 收起 理由
何伟超 + 1

查看全部评分

回复 使用道具 举报
  代码块的执行顺序: 静态代码块 构造代码块  构造函数。被静态修饰的成员变量和成员函数在类加载的时候就已经在存入静态方法区,所以可以直接被类名调用,而未被静态修饰的成员变量和成员方法必须通过建立对象的方式完成初始化,才能被引用类型变量调用。

评分

参与人数 1技术分 +1 收起 理由
何伟超 + 1

查看全部评分

回复 使用道具 举报
     第一个程序运行结果中有d, 是因为创建了对象new StaticCode(), 执行d的语句属于构造代码块,会随着对象的创建而执行。
     第二个程序运行结果中没有d,执行d的语句属于构造代码块,主函数仅仅执行了StaticCode.show();语句,属于静态调用,没有创建对象。

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马