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类的无参数构造器代码块的执行顺序:
静态代码块 ----》 普通代码块-----》属性------》构造器