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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王东 中级黑马   /  2013-10-20 20:25  /  1499 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

今天看毕老师的视频说静态代码块和构造代码块,请问他们的区别?谢谢谢谢
static{
S.o.p("a");
}

{
S.o.p("b");
}

评分

参与人数 1黑马币 +6 收起 理由
狼王 + 6 赞一个!

查看全部评分

7 个回复

倒序浏览
静态代码块随着类的加载而加载,而且只执行一次,在创建对象之前执行,而构造代码块类是在创建对象时运行,优先于构造方法执行,是为所有对象共同属性初始化的,执行顺序先执行静态代码块,然后构造代码块,最后是构造函数

评分

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

查看全部评分

回复 使用道具 举报
当父类与子类都有静态代码块和构造函数的时候,执行顺序如下:
父类静态代码块 > 子类静态代码块
父类构造函数 > 子类构造函数(先有父亲,后有孩子)
如果是多级继承关系的话,最高层的父类首先执行,然后依次递减

总结:静态优先执行,父类优先执行
注意:静态代码块是在JVM加载类的时候执行的,而且静态代码块执行且仅执行一次
构造方法和静态代码块的区别
静态代码块 当且仅当第一次执行的时候才执行,一般用于初始化。
而构造方法 是每次new对象的时候都执行,也是初始化
二者的区别在于 一个是仅执行一次 另一个是每次new对象的时候执行
所以初始化代码 写在那个部分里就要根据具体情况而进行选择

评分

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

查看全部评分

回复 使用道具 举报
静态代码块:随着类的加载而执行,只执行一次,用于给类进行初始化
构造代码块:对象一建立,优先执行构造代码块,给建立的所有对象统一初始化,优先于构造函数执行
回复 使用道具 举报
静态代码块是在JVM加载类的时候执行的,而且静态代码块执行且仅执行一次,一般用于初始化。
而构造方法 是每次new对象的时候都执行,也是初始化。
二者的区别在于 一个是仅执行一次 另一个是每次new对象的时候执行
结论:静态优先执行,父类优先执行,
而且静态代码块可以用类名直接被调用!

评分

参与人数 1技术分 +1 收起 理由
狼王 + 1 赞一个!

查看全部评分

回复 使用道具 举报
楼上几位都说得很对
回复 使用道具 举报
静态代码块只执行一次。

构造代码块在每一次构造对象的开始执行,每构造一次都会执行一次。其与构造函数的区别是构造代码块无论针对所有的对象初始化都会执行,构造函数只会和相匹配的函数一致时才会执行。
下面是静态代码块的例子:
class StaticCode
{

    static
    {
        System.out.println("I'm staticcode");
    }

    void show()
    {
        System.out.println("show run");
    }
}

class StaticCodeDemo
{

    public static void main(String[] args)
    {
        new StaticCode().show();
        new StaticCode().show();
    }
}

///结果
//I'm staticcode
//show run
//show run

下面是构造代码块的例子:
class Person
{
    String name;
    //构造函数的代码块
    {
        System.out.println("哈哈");
    }

    Person()
    {
        name="baby";
        show();
    }

    Person(String name)
    {
        this.name=name;
        show();
    }

    void show()
    {
        System.out.println("name"+name);
    }
}

class  StaticConstructor
{
    public static void main(String[] args)
    {
        Person p1=new Person();
        Person p2=new Person("天使");
    }
}
回复 使用道具 举报
静态代码块只执行一次,它的作用是在整个系统中启动一次的操作,而构造代码块就是方法外定义的代码块,它的作用把所有构造方法中共同的内容定义在一个构造代码块中,提高代码的复用性。
回复 使用道具 举报 1 0
您需要登录后才可以回帖 登录 | 加入黑马