天天看点

java中初始化块

package learn_20150504;

import java.util.Random;

public class Employee2 {

	private static int nextId;
	private int id;
	private String name="";
	private double salary;
	static
	{
		Random generator =new Random();
		nextId = generator.nextInt(1000);
	}
	{
		id = nextId;
		nextId++;
	}
	public Employee2(String n,double s)
	{
		name = n;
		salary = s;
	}
	public Employee2(double s)
	{
		this("Employee # "+nextId,s);
	}
	public Employee2()
	{
		
	}
	public String getName()
	{
		return name;
	}
	public double getSalary()
	{
		return salary;
	}
	public int getId()
	{
		return id;
	}
	
}
           
package learn_20150504;

public class ConstructorTest {
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Employee2[] staff = new Employee2[3];
		staff[0] = new Employee2("harry", 4000);
		staff[1] = new Employee2(6000);
		staff[2] = new Employee2();
		for (Employee2 e : staff) {
			System.out.println("name = " + e.getName() + ",id= " + e.getId()
					+ ",salary= " + e.getSalary());

		}
	}

}
           

运行结果:

name = harry,id= 975,salary= 4000.0

name = Employee # 976,id= 976,salary= 6000.0

name = ,id= 977,salary= 0.0

1 初始快是Java类里可出现的第四种成员(前面依次有:属性,方法,和构造器),一个类里可以有多个初始化块

相同类型的初始化块之间有顺序:前面定义的初始化块先执行,后面定义的初始化块后执行,初始化块的语法格式:

[修饰符]{

//初始化块的可执行代码

}

初始化块的修饰符只能是static,使用static修饰的初始化块被称为静态初始化块,初始化块里的代码可以包含任何可执行性语句

,包括定义局部变量,调用其他对象的方法,使用分支,循环语句等。

package learn_20150504;

public class Person {
	//定义一个初始化块
	{
	 int a = 6;
	 if(a>4)
	 {
		 System.out.println("Person 初始化块,局部变量a的值大于4");
	 }
	 System.out.println("Person 的初始化块");
	}
	//定义第二个初始化块
	{
		System.out.println("Person的第二个初始化块");
	}
	public Person()
	{
		System.out.println("Person类的无参数构造器");
	}
	public static void main(String[] args) {
		Person p = new Person();
	}

}
           

运行结果:

Person 初始化块,局部变量a的值大于4

Person 的初始化块

Person的第二个初始化块

Person类的无参数构造器代码块的执行顺序:

静态代码块 ----》 普通代码块-----》属性------》构造器