欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

代码块的执行顺序

程序员文章站 2022-07-15 18:06:49
...

在Java语言中,当实例化对象时,对象所在类的所有成员变量首先要进行初始化,只有当所有类成员完成初始化后,才会调用对象所在类的构造函数创建对象。
代码块的执行顺序

1.在非主类中的静态块

class Person{
	{//定义在类中,不加任何修饰符
		System.out.println("1.Person类的构造块");
	}
	}
	public Person(){
		System.out.println("2.Person类的构造方法");
	} 
	static{//使用static定义的代码块
		System.out.println("3.定义在非主类中的静态块");
	}

}
public class Test{
	public static void main(String[] args) {
		System.out.println("--start--");
		new Person();
		new Person();
		System.out.println("--end--");
	}
}

代码块的执行顺序
结论:
**前提:**在非主类的静态块

1.执行的优先级为静态块>构造块>构造方法
2.无论产生多少实例化对象,静态块都只执行一次
3.每产生一个新的对象就调用一次构造块

2.在主类中的静态块

public class Test{
	{//定义在类中,不加任何修饰符
		System.out.println("1.Test的构造块");
	}
	public Test(){
		System.out.println("2.Test的构造方法");
	} 
	static{//使用static定义的代码块
		System.out.println("3.定义在主类中的静态块");
	}
	public static void main(String[] args) {
		System.out.println("--start--");
		new Test();
		new Test();
		System.out.println("--end--");
	}
}

代码块的执行顺序

结论:在主类中定义的静态块优先于主方法(main)执行。

补充:
1.构造块的作用:给对象进行初始化,对象一建立就运行,而且优先于构造方法执行。
2.构造块和构造方法的区别:构造块是给所有对象进行统一初始化;而构造方法是给对应的对象初始化。
3.构造块中定义的是不同对象共性的初始化内容。

3.存在继承时的运行顺序

class B extends Object{
	static {
		System.out.println("Load B");
	}
	public B() {
		System.out.println("Creat B");
	}
}

class A extends B{
	static {
		System.out.println("Load A");
	}
	public A() {
		System.out.println("Creat A");
	}
}

public class Testclass {

	public static void main(String[] args) {
		new A();
	}
}

代码块的执行顺序

Java程序的初始化一般遵循3个原则(优先级依次递减):
  1. 静态对象(变量)优先于非静态对象(变量)初始化,其中,静态对象(变量)只初始化一次,而非静态对象(变量)可能会初始化多次。
  2. 父类优先于子类进行初始化。
  3. 按照成员变量的定义顺序进行初始化。即使变量定义散布于方法定义之中,它们依然在任何方法(包括构造方法)被调用之前先初始化。