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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 李海 中级黑马   /  2012-5-22 21:56  /  2015 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

class StaticCode
{
            static
        {
                System.out.println("a");
        }
       
}

class StaticCodeDemo
{
        static
        {
                System.out.println("b");
        }
        public static void main(String[] args)
        {
                new StaticCode();
                new StaticCode();
                System.out.println("over");
       
        }
        static
        {
                System.out.println("c");
        }
       
       
}
//d:\>java0217\day06>java StaticCodeDemo
//b c a over
这是毕老师的代码和输出结果  对于输出结果  我有一个小问题   在new StaticCode的时候,应该是先执行它StaticCode类中的构造函数  在执行static代码块   所以我觉得执行结果是bc空格空格aover    这样对吗?

6 个回复

倒序浏览
楼主 你在运行StaticCodeDemo类的main方法 所以StaticCodeDemo类先加载进内存  然后再是new StaticCode()   没疑问了吧
回复 使用道具 举报
你这代码中没构造函数啊,new 了两次StaticCode(),应该多个a吧
静态代码块、构造代码块和构造函数的区别
      静态代码块:用于给类初始化,类加载时就会被加载执行,只加载一次。
      构造代码块:用于给对象初始化的。只要建立对象该部分就会被执行,且优先于构造函数。
      构造函数:  给对应对象初始化的,建立对象时,选择相应的构造函数初始化对象。               
      创建对象时,三者被加载执行顺序:先执行静态代码块,然后构造代码块,最后构造函数
回复 使用道具 举报
明白你的意思了,你是不是想问构造函数调用是否占一个空格?
感觉你误解了,println方法是输出到控制台。这里的构造函数就没有输出语句,它在在内存中加载和控制台根本就没什么关系,那么空格又怎么可能打印出来呢?
回复 使用道具 举报
秦晓阳 发表于 2012-5-22 22:25
明白你的意思了,你是不是想问构造函数调用是否占一个空格?
感觉你误解了,println方法是输出到控制台。这 ...

  嗯  我就是这个意思  谢谢哈
回复 使用道具 举报
静态代码块随着类的加载而执行 ,也就是在编译的时候类中的静态先加载然后在找主函数入口main 在执行主函数中的代码
回复 使用道具 举报
李斌 中级黑马 2012-5-23 09:20:14
7#
我运行了一下楼主的代码 发现
明明newl了两个不同的对象 为什么 只打印了一个a啊??
new StaticCode();
new StaticCode();
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马