论坛首页 入门技术论坛

JAVA中的静态初始化块、初始化块、构造方法的执行顺序

浏览 10462 次
该帖已经被评为新手帖
作者 正文
   发表时间: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后,执行顺序是:初始化代码块>构造方法

为什么第二次没有执行静态初始化块呢,因为静态初始化块只会在第一次装入系统的时候运行,当再次实例化的时候就不需要再执行了,因为已经存在了

   发表时间:2011-11-02  
静态代码块是在类初始化的时候被执行的,和类的实例化次数没有关系。
0 请登录后投票
   发表时间:2011-11-02  
khotyn 写道
静态代码块是在类初始化的时候被执行的,和类的实例化次数没有关系。

静态代码块的确是在初始化的时候运行的,但是如果第二次实例化这个类的实例的时候就不执行了,没错啊,我没说跟实例化有关系啊
0 请登录后投票
   发表时间:2011-11-03  
是的static语句快只执行一次。
0 请登录后投票
   发表时间:2011-11-03  
楼主想表达个什么意思。。。自问自答系列吗??
0 请登录后投票
   发表时间:2011-11-03  
基础巩固系列
0 请登录后投票
   发表时间:2011-11-03  
类实例化顺序:
1、分配堆空间,给本类到父类的所有成员变量赋缺省值
2、执行本类构造方法时会调用父类方法,而构造方法时会先对如private int a=1;的成员变量进行初始化。
3、执行构造方法体
0 请登录后投票
   发表时间:2011-11-03  
static 语句块 只在第一次初始化时候执行吧
0 请登录后投票
   发表时间:2011-11-03  
不懂得要表达什么意思
0 请登录后投票
   发表时间:2011-11-03  
这种帖子比较适合csdn,iteye上注定是新手贴
0 请登录后投票
论坛首页 入门技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics