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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 丁强强 中级黑马   /  2013-2-24 13:16  /  1972 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 丁强强 于 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次吗?

评分

参与人数 1技术分 +1 收起 理由
李培根 + 1 神马都是浮云

查看全部评分

4 个回复

倒序浏览
静态代码块随着类的加载,只加载一次,用于给类进行初始化
如果你调用多次,也就第一次加载,后面就不用加载了

评分

参与人数 1技术分 +1 收起 理由
李培根 + 1 神马都是浮云

查看全部评分

回复 使用道具 举报
朋友,你的理解有点偏差哈。 new StaticCode(); 并不是将类加载进内存哈。将类载入内存肯定在建立一个对象之前就完成了。这个语句只是为你新建的对象分配内存空间,而类的准备工作,在建立对象前早已做好,也即楼上所说,类初始化only once。

评分

参与人数 1技术分 +1 收起 理由
李培根 + 1 赞一个!

查看全部评分

回复 使用道具 举报
函数内的构造代码块和静态构造代码块的区别:
前者每个对象建立都会先调用构造代码块.
静态代码块是在这个类加载时,运行一次.
他们的运行顺序:静态代码块->构造代码块->构造函数

评分

参与人数 1技术分 +1 收起 理由
李培根 + 1 赞一个!

查看全部评分

回复 使用道具 举报
静态代码块随着类的加载只加载一次,就算多次的实例化这个对象,静态代码块也就加载第一次,后面是不会再加载的
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马