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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 代瑞朋 中级黑马   /  2013-11-30 17:37  /  1908 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 代瑞朋 于 2013-11-30 18:34 编辑

class StaticCode
{
        
        static
        {
                System.out.println("a");
        }
        {
                System.out.println("c");
        }
        
}
要是静态代码块和构造代码块 都能运行,  结果是 a c  那下面的这个是 c a  还是 a c??
class StaticCode
{
        
        {
                System.out.println("c");
        }
        static
        {
                System.out.println("a");
        }

}




评分

参与人数 1技术分 +1 黑马币 +6 收起 理由
枫儿 + 1 + 6 神马都是浮云

查看全部评分

8 个回复

倒序浏览
对象的初始化顺序:首先执行父类静态的内容,父类静态的内容执行完毕后,接着去执行子类的静态的内容,当子类的静态内容执行完毕之后,再去看父类有没有非静态代码块,如果有就执行父类的非静态代码块,父类的非静态代码块执行完毕,接着执行父类的构造方法;父类的构造方法执行完毕之后,它接着去看子类有没有非静态代码块,如果有就执行子类的非静态代码块。子类的非静态代码块执行完毕再去执行子类的构造方法。总之一句话,静态代码块内容先执行,接着执行父类非静态代码块和构造方法,然后执行子类非静态代码块和构造方法。

评分

参与人数 1技术分 +1 黑马币 +6 收起 理由
枫儿 + 1 + 6 不错 、 哥们挺积极

查看全部评分

回复 使用道具 举报
还是 ac  静态代码块 随着类的加载 而加载
回复 使用道具 举报
两个程序结果都是ac,静态代码块随着类的加载而执行,而构造代码块是随着对象的建立而执行
回复 使用道具 举报
还是 ac  ,注意 执行顺序 和你代码放的位置并不一定有关系。
静态代码块:特点:随着类的加载而执行。只执行一次。用于给类初始化的。并优先于主函数执行。
构造代码块:给所有对象进行初始化。 对象一建立就运行,优先于构造函数运行。

关于程序执行初始化顺序:
  Person p= new Person(“zhangsan”,10);
该句话都做了什么、?
1,因为new用到了Person.class  所以会先找到Person.class文件并加载到内存中。
2,执行该类中的静态代码块(如果有的话),给类进行初始化。
3,在堆内存中开辟空间,分配内存地址。
4,在堆内存中建立对象的特有属性,并进行默认初始化。
5,对对象属性进行显示初始化。
6,执行构造代码块。代码块是对所有对象进行初始化的。
7,对对象对应的构造函数初始化。
8,将内存地址赋给载内存中的变量。
这是我的视频总结  你看懂这个  以后你就知道 程序的执行顺序

评分

参与人数 1技术分 +1 黑马币 +6 收起 理由
枫儿 + 1 + 6 赞一个! 恭喜满25分 加油

查看全部评分

回复 使用道具 举报
static代码块的代码当且仅当类被加载就会马上执行,并且执行顺序在构造函数的之前。参看如下代码的执行顺序:
        public StaticCode(){
               
                System.out.println("B");
        }

        {
                System.out.println("c");
        }
        static {
                System.out.println("a");
        }
----------------------------------
执行结果是:a→ c→ b

评分

参与人数 1技术分 +1 黑马币 +6 收起 理由
枫儿 + 1 + 6 赞一个!

查看全部评分

回复 使用道具 举报
当一个类中,有静态代码块,构造代码块时,执行顺序是静态代码块-->构造代码块-->构造方法
这跟代码块的先后顺序没有关系
静态代码块随着类的加载而执行,并且只执行一次,用于给进行初始化
构造代码块构造代码块随着对象的建立而执行,每创建一个对象,就会执行一次
对于楼主的代码的执行结果应该是先打印a,然后再打印c

评分

参与人数 1黑马币 +21 收起 理由
枫儿 + 21 哥们、今个技术分够了 给金币好不好 继续保.

查看全部评分

回复 使用道具 举报

类中各部分加载顺序及存放位置问题http://www.cnblogs.com/ShawnWithSmallEyes/p/3374235.html
回复 使用道具 举报
答案是ac,
类在初始化的时候及创建对象时,执行的顺序是 staitc代码块、代码块,构造函数。
而static 代码块是在类初始化就会加载的,代码块和构造函数是在类被创建对象时,才会进行初始化。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马