/**
 * This program demonstrates object construction.
 */
void main() {
    // fill the staff array with three Employee objects
    var staff = new Employee[3];

    staff[0] = new Employee("Harry", 40000);
    staff[1] = new Employee(60000);
    staff[2] = new Employee();

    // print out information about all Employee objects
    for (Employee e : staff) {
        IO.println("name=" + e.getName() + ",id=" + e.getId()
                + ",salary=" + e.getSalary());
    }
}

/**
 * This version of the Employee class demonstrates overloaded constructors
 * and initialization blocks.
 */
class Employee {
    private static int nextId;

    private int id;
    private String name = ""; // instance field initialization
    private double salary;

    private static RandomGenerator generator = RandomGenerator.getDefault();

    // static initialization block
    static {
        // set nextId to a random number between 0 and 9999
        nextId = generator.nextInt(10000);
    }

    // object initialization block
    {
        id = nextId;
        nextId++;
    }

    // three overloaded constructors
    public Employee(String n, double s) {
        name = n;
        salary = s;
    }

    public Employee(double s) {
        // calls the Employee(String, double) constructor
        this("Employee #" + nextId, s);
    }

    // the no-argument constructor
    public Employee() {
        // name initialized to ""--see above
        // salary not explicitly set--initialized to 0
        // id initialized in initialization block
    }

    public String getName() {
        return name;
    }

    public double getSalary() {
        return salary;
    }

    public int getId() {
        return id;
    }
}
