黑马程序员技术交流社区

标题: 构造函数和静态代码块的问题? [打印本页]

作者: 李海    时间: 2012-5-22 21:56
标题: 构造函数和静态代码块的问题?
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    这样对吗?
作者: 程旦    时间: 2012-5-22 22:12
楼主 你在运行StaticCodeDemo类的main方法 所以StaticCodeDemo类先加载进内存  然后再是new StaticCode()   没疑问了吧

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

  嗯  我就是这个意思  谢谢哈
作者: 尹丽峰    时间: 2012-5-22 22:56
静态代码块随着类的加载而执行 ,也就是在编译的时候类中的静态先加载然后在找主函数入口main 在执行主函数中的代码
作者: 李斌    时间: 2012-5-23 09:20
我运行了一下楼主的代码 发现
明明newl了两个不同的对象 为什么 只打印了一个a啊??
new StaticCode();
new StaticCode();





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