java程序加载过程

在java中,当创建一个对象时总的加载过程如下:

首先加载要创建对象的类及其直接与间接父类。

在类被加载的同时会将静态成员进行加载,主要包括静态成员变量的初始化,静态语句块的执行,在加载时按代码的先后顺序执行。

需要的类加载完成后,开始创建对象,首先会加载非静态的成员,主要包括非静态成员变量的初始化,非静态语句块的执行,在加载时按代码的先后顺序执行。

最后执行构造器,构造器执行完毕,对象生成。

class MyclassFather
{
	public MyclassFather() {
		System.out.println("执行父类构造器");
	}
}

class Myclass extends MyclassFather{
	//非静态成员
	Unstatic u=new Unstatic();
	final UnstaticFinal uf=new UnstaticFinal();
	{
		System.out.println("执行非静态语句块");
	}
	//静态成员
	static 
	{
		System.out.println("执行静态语句块");
	}
	static final StaticFinal sf=new StaticFinal();
	static Static s=new Static();
	//类构造器
	Myclass()
	{
		System.out.println("执行子类构造器");
	}
	
}

//用来打印静态final的成员变量的类
class StaticFinal{
	StaticFinal()
	{
		System.out.println("静态非final的成员变量初始化");
	}
}

//用来打印静态非final的成员变量的类
class Static{
	Static()
	{
		System.out.println("静态非final的成员变量初始化");
	}
}

//用来打印非静态final的成员变量的类
class UnstaticFinal
{
	UnstaticFinal(){
		System.out.println("非静态final成员变量初始化");
	}
}

//用来打印非静态非final的成员变量的类
class Unstatic
{
	Unstatic()
	{
		System.out.println("非静态非final成员变量初始化");
	}
}
	
public class guocheng {
	public static void main(String args[])
	{
		new Myclass();
	}

}
执行静态语句块
静态非final的成员变量初始化
静态非final的成员变量初始化
执行父类构造器
非静态非final成员变量初始化
非静态final成员变量初始化
执行非静态语句块
执行子类构造器

你可能感兴趣的:(java)