黑马程序员技术交流社区

标题: 有一个静态代码块的小问题 [打印本页]

作者: 丁强强    时间: 2013-2-24 13:16
标题: 有一个静态代码块的小问题
本帖最后由 丁强强 于 2013-2-25 05:27 编辑

class StaticCode

        static
        {
        System.out.println(“a”);
        }


class StaticCodeDome

        static
        {
        System.out.println(“b”);
                }


public static void main (Sting[] args)
        {
        new StaticCode();        
        new StaticCode();           
System.out.println("c");

        }                                 
     }               


问题                 new StaticCode();   不是加载 StaticCode类进内存吗?
                       那我new StaticCode();  了两次不应该是加载了2次吗?
作者: 胥文    时间: 2013-2-24 13:29
静态代码块随着类的加载,只加载一次,用于给类进行初始化
如果你调用多次,也就第一次加载,后面就不用加载了
作者: 陈科宇    时间: 2013-2-24 13:36
朋友,你的理解有点偏差哈。 new StaticCode(); 并不是将类加载进内存哈。将类载入内存肯定在建立一个对象之前就完成了。这个语句只是为你新建的对象分配内存空间,而类的准备工作,在建立对象前早已做好,也即楼上所说,类初始化only once。
作者: 陈圳    时间: 2013-2-24 13:54
函数内的构造代码块和静态构造代码块的区别:
前者每个对象建立都会先调用构造代码块.
静态代码块是在这个类加载时,运行一次.
他们的运行顺序:静态代码块->构造代码块->构造函数
作者: 王小丑    时间: 2013-2-24 14:40
静态代码块随着类的加载只加载一次,就算多次的实例化这个对象,静态代码块也就加载第一次,后面是不会再加载的




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