黑马程序员技术交流社区

标题: 静态代码块 构造代码块 执行顺序 [打印本页]

作者: 代瑞朋    时间: 2013-11-30 17:37
标题: 静态代码块 构造代码块 执行顺序
本帖最后由 代瑞朋 于 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");
        }

}





作者: 容嬷嬷当年也是    时间: 2013-11-30 17:54
对象的初始化顺序:首先执行父类静态的内容,父类静态的内容执行完毕后,接着去执行子类的静态的内容,当子类的静态内容执行完毕之后,再去看父类有没有非静态代码块,如果有就执行父类的非静态代码块,父类的非静态代码块执行完毕,接着执行父类的构造方法;父类的构造方法执行完毕之后,它接着去看子类有没有非静态代码块,如果有就执行子类的非静态代码块。子类的非静态代码块执行完毕再去执行子类的构造方法。总之一句话,静态代码块内容先执行,接着执行父类非静态代码块和构造方法,然后执行子类非静态代码块和构造方法。
作者: Faner    时间: 2013-11-30 18:01
还是 ac  静态代码块 随着类的加载 而加载
作者: xibozglr    时间: 2013-11-30 18:20
两个程序结果都是ac,静态代码块随着类的加载而执行,而构造代码块是随着对象的建立而执行
作者: 不抛弃不放弃    时间: 2013-11-30 18:20
还是 ac  ,注意 执行顺序 和你代码放的位置并不一定有关系。
静态代码块:特点:随着类的加载而执行。只执行一次。用于给类初始化的。并优先于主函数执行。
构造代码块:给所有对象进行初始化。 对象一建立就运行,优先于构造函数运行。

关于程序执行初始化顺序:
  Person p= new Person(“zhangsan”,10);
该句话都做了什么、?
1,因为new用到了Person.class  所以会先找到Person.class文件并加载到内存中。
2,执行该类中的静态代码块(如果有的话),给类进行初始化。
3,在堆内存中开辟空间,分配内存地址。
4,在堆内存中建立对象的特有属性,并进行默认初始化。
5,对对象属性进行显示初始化。
6,执行构造代码块。代码块是对所有对象进行初始化的。
7,对对象对应的构造函数初始化。
8,将内存地址赋给载内存中的变量。
这是我的视频总结  你看懂这个  以后你就知道 程序的执行顺序
作者: 狼人→浪人    时间: 2013-11-30 18:26
static代码块的代码当且仅当类被加载就会马上执行,并且执行顺序在构造函数的之前。参看如下代码的执行顺序:
        public StaticCode(){
               
                System.out.println("B");
        }

        {
                System.out.println("c");
        }
        static {
                System.out.println("a");
        }
----------------------------------
执行结果是:a→ c→ b
作者: 李文帅    时间: 2013-11-30 18:27
当一个类中,有静态代码块,构造代码块时,执行顺序是静态代码块-->构造代码块-->构造方法
这跟代码块的先后顺序没有关系
静态代码块随着类的加载而执行,并且只执行一次,用于给进行初始化
构造代码块构造代码块随着对象的建立而执行,每创建一个对象,就会执行一次
对于楼主的代码的执行结果应该是先打印a,然后再打印c
作者: 冯晓骏    时间: 2013-11-30 18:40

类中各部分加载顺序及存放位置问题http://www.cnblogs.com/ShawnWithSmallEyes/p/3374235.html

作者: 25343215    时间: 2013-11-30 18:54
答案是ac,
类在初始化的时候及创建对象时,执行的顺序是 staitc代码块、代码块,构造函数。
而static 代码块是在类初始化就会加载的,代码块和构造函数是在类被创建对象时,才会进行初始化。




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