Student.java

Download Student.java source file

/// Student.java - A demo of using optional constructor arguments by
// using overloaded constructors.  Student objects represent students
// enrolled in a college course and have many attributes not shown.
// This is sometimes called the "telescoping constructor pattern".
// (Validity checking of arguments and other details omitted for clarity.)
//
// Written 4/2007 by Wayne Pollock, Tampa Florida USA.

class Student
{
   private static int nextStudentID;

   static {
      // Typically fetched from a DB at application (JVM) startup:
      // ...
      nextStudentID = ...;
   }

   // Add a shutdown hook to save the current value of nextStudentID
   // to the DB when the application (the JVM) exits:
   // ...

   private int studentID;
   private String lastName;
   private String firstName;
   private String address;
   private String homePhone;
   private int level;  // 1 = freshman, ...
   private Date enrolled;
   private char gender;  // 'M' or 'F', 'U' = unknown
   // ...

  public Student ( String lastName )
  {  this( lastName, "" );  }

  public Student (String lastName, String firstName )
  {  this( lastName, firstName, "Unknown", "", 1, new Date(), 'U' );  }

  public Student (String lastName, String firstName, String address )
  {  this( lastName, firstName, address, "", 1, new Date(), 'U' );  }

  public Student (String lastName, String firstName, int level )
  {  this( lastName, firstName, "Unknown", "", level, new Date(), 'U' );  }

  //////////////////////////////////////////////////////////////////////
  // Repeat for all allowed combinations of optional arguments!  Note //
  // not all combinations are possible (e.g., last, first, phone).    //
  // (How many constructors will there be?)                           //
  //////////////////////////////////////////////////////////////////////

  // The main constructor invoked by all the others:
  public Student (String lastName, String firstName, String address,
      String homePhone, int level, Date enrolled, char gender )
  {
     this.studentID = nextStudentID;  ++nextStudentID;
     this.lastName = lastName;
     this.firstName = firstName;
     this.address = address;
     this.homePhone = homePhone;
     this.level = level;
     this.enrolled = enrolled;
     this.gender = gender;
  }

   // public Student methods go here:
   // ...
}


// Sample use (good luck figuring out which combinations and the
// order of arguments to use):

class StudentTest
{
    Student s1 = new Student( "Doe" );
    Student s2 = new Student( "Piffl", "Hymie", 'M' );
    // ...
}