代码块


代码块

1.普通代码块

编写在顺序执行的代码流程中的代码块。

public static void main(String[] args) {
		/*
		 * 编写在顺序执行的代码流程中的代码块
		 * 
		*/
    	{
			int a = 1;
			System.out.println(a);
         }
	}

2.构造代码块

/**
 * 人员类
 * @author 孟祥宽
 *
 */
public class Person {

	private String name;
	private int age;
	
	// 构造代码块
	{
		System.out.println("这是构造代码块");
	}
	// 构造方法
	public Person() {
		System.out.println("这是构造方法");
	}
	
	// getter setter 方法
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	public void say () {
		System.out.println(this.name + ":" + this.age);
	}
	
}

/**
 * 测试类
 * @author 孟祥宽
 *
 */
public class Test {
	public static void main(String[] args) {
		Person person = new Person();
	}
}

运行结果:image-20211116161524067

结论:构造代码块,随着对象的每次创建,执行一次。且执行在构造方法之前。

区别:无论用户调用哪一个构造方法来创建对象,构造代码块都必然执行。

3.静态代码块

/*
	 *  静态代码块:随着类的加载(第一次使用),静态代码块执行,类只加载一次,所以静态代码块
	 *  只执行一次。
	 * */
	static {
		System.out.println("这是静态代码块执行");
	}

	public static void main(String[] args) {
		/*
		 *  普通代码块:编写在顺序执行的代码流程中的代码块
		 * 
		*/
		{
			int a = 1;
			System.out.println(a);
		}
		Demo1 d = new Demo1();
		Demo1 d1 = new Demo1();
	}

运行结果:image-20211116162457910

面试题:构造方法 与 构造代码块 以及 静态代码块的执行顺序:

答案:静态代码块 ---> 构造代码块 ---> 构造方法