【Java】代码块


在Java中,字段的初始化方式有三种:

  1. 就地初始化
  2. 使用构造方法初始化
  3. 使用代码块初始化

前两种方式非常简单,接下来介绍一下工程中常用的第三种方式:使用代码块初始化


什么是代码块?

使用{}定义的一段代码.
根据代码块定义的位置以及关键字,又可分为以下四种:

  1. 普通代码块
  2. 构造块
  3. 静态块
  4. 同步代码块(涉及多线程知识后面再讲解)

普通代码块

普通代码块:定义在方法中的代码块。

public class Main{
	public static void main(String[] args) {
		{ 	//普通方法块
			int x = 10 ;
			System.out.println("x1 = " +x);
		}
		int x = 100 ;
		System.out.println("x2 = " +x);
	}
}

// 执行结果
x1 = 10
x2 = 100 

构造代码块

定义:定义在类中的代码块(不加修饰符)。也叫:实例代码块、构造块。

构造代码块一般用于初始化实例成员变量,类似于C++中的初始化成员列表。

class Person{
	private String name;	//实例成员变量
	private int age;
	private String sex;
	
	public Person() {
		System.out.println("I am Person init()!");
	}
	
	{ 		//实例代码块
		this.name = "giturtle";
		this.age = 21;
		this.sex = "man";
		System.out.println("I am instance init()!");
	}
	
	public void show(){
		System.out.println("name: "+name
			+" age: "+age
			+" sex: "+sex
		);
	}
}

public class Main {
	public static void main(String[] args) {
		Person p1 = new Person();
		p1.show();
	}
}

// 运行结果
I am instance init()!
I am Person init()!
name: giturtle age: 21 sex: man 

从执行结果可以看到:实例代码块优先于构造函数执行。

静态代码块

定义:使用static定义的代码块。一般用于初始化静态成员属性。

class Person{
	private String name;	//实例成员变量
	private int age;
	private String sex;
	private static int count = 0;	//静态成员变量 由类共享数据、方法区

	public Person(){
		System.out.println("I am Person init()!");
	}

	{		//实例代码块
		this.name = "giturtle";
		this.age = 21;
		this.sex = "man";
		System.out.println("I am instance init()!");
	}

	static { 		//静态代码块
		count = 10;	//只能访问静态数据成员
		System.out.println("I am static init()!");
	}
}

public class Main {
	public static void main(String[] args) {
		Person p1 = new Person();
		Person p2 = new Person();	//静态代码块不会执行
									//只会在最开始执行一次
	}
} 

// 运行结果
I am static init()!
I am instance init()!
I am Person init()!
I am instance init()!
I am Person init()!

注:

  • 静态代码块不管生成多少个对象,其只会执行一次,且是最先执行的。
  • 静态代码块执行完毕后, 实例代码块(构造块)执行,再然后是构造函数执行。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章