该帖已经被评为新手帖
|
|
---|---|
作者 | 正文 |
发表时间:2011-11-02
话说如果没有写初始化块和静态初始化块的程序中,首先执行的都是构造方法,主要用于初始化,但是初始化代码块、静态初始化代码块、构造方法它们之间的执行顺序是什么样子的呢
package test5; public class Test1 { public static void main(String args[]) { Test2 t1 = new Test2(); System.out.println("----------第二次实例化----------"); Test2 t2 = new Test2(); } } class Test2 { //构造方法 public Test2() { System.out.println("构造方法"); } //初始化代码块 { System.out.println("初始化代码块"); } //静态初始化代码块 static { System.out.println("静态初始化代码块"); } } 首先看看运行结果:
静态初始化代码块 初始化代码块 构造方法 ----------第二次实例化---------- 初始化代码块 构造方法 看到没有,第一次实例化Test2后,结果与第二次还不一样,总么回事呢? 当第一次实例化Test2后,执行顺序是:静态初始化代码块>初始化代码块>构造方法 当第二次实例化Test2后,执行顺序是:初始化代码块>构造方法 为什么第二次没有执行静态初始化块呢,因为静态初始化块只会在第一次装入系统的时候运行,当再次实例化的时候就不需要再执行了,因为已经存在了 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2011-11-02
静态代码块是在类初始化的时候被执行的,和类的实例化次数没有关系。
|
|
返回顶楼 | |
发表时间:2011-11-02
khotyn 写道 静态代码块是在类初始化的时候被执行的,和类的实例化次数没有关系。
静态代码块的确是在初始化的时候运行的,但是如果第二次实例化这个类的实例的时候就不执行了,没错啊,我没说跟实例化有关系啊 |
|
返回顶楼 | |
发表时间:2011-11-03
是的static语句快只执行一次。
|
|
返回顶楼 | |
发表时间:2011-11-03
楼主想表达个什么意思。。。自问自答系列吗??
|
|
返回顶楼 | |
发表时间:2011-11-03
基础巩固系列
|
|
返回顶楼 | |
发表时间:2011-11-03
类实例化顺序:
1、分配堆空间,给本类到父类的所有成员变量赋缺省值 2、执行本类构造方法时会调用父类方法,而构造方法时会先对如private int a=1;的成员变量进行初始化。 3、执行构造方法体 |
|
返回顶楼 | |
发表时间:2011-11-03
static 语句块 只在第一次初始化时候执行吧
|
|
返回顶楼 | |
发表时间:2011-11-03
不懂得要表达什么意思
|
|
返回顶楼 | |
发表时间:2011-11-03
这种帖子比较适合csdn,iteye上注定是新手贴
|
|
返回顶楼 | |