黑马程序员技术交流社区
标题:
静态代码块 构造代码块 执行顺序
[打印本页]
作者:
代瑞朋
时间:
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