The Java Program: Person.java

  1 // Person.java -- demonstrate methods in class and calendar
  2 
  3 import java.text.SimpleDateFormat;
  4 import java.text.ParseException;
  5 import java.util.Calendar;
  6 
  7 class Person {
  8 
  9    // instance variables
 10    final String name;
 11    private final Calendar dob;  // Java Date, Calendar are ugly and mutable!
 12 
 13    // constructor of class "Person"
 14    Person (String name, Calendar dob) {
 15       this.name = name;  this.dob = dob;
 16    }
 17 
 18    // method of class "Person"
 19    int age () {
 20       final Calendar today = Calendar.getInstance();
 21       final int diff = today.get(Calendar.YEAR) - dob.get(Calendar.YEAR);
 22       final int this_day = today.get(Calendar.DAY_OF_YEAR);
 23       final int dob_day  = dob.get(Calendar.DAY_OF_YEAR);
 24       return this_day > dob_day ? diff  : diff-1;
 25    }
 26 
 27    // shared constants, procedures, ...
 28    public static final SimpleDateFormat dmy =
 29       new SimpleDateFormat ("dd MMM yyyy");
 30 
 31    public static Calendar date (final String x) throws ParseException {
 32       final Calendar r = Calendar.getInstance();
 33       r.setTime (dmy.parse (x));
 34       return r;
 35    }
 36  
 37    private static String f = "Age is %s%n";
 38 
 39    public static void main (final String [] args) throws ParseException {
 40       final Person p = new Person ("William H. Gates", date ("28 Oct 1955"));
 41       System.out.format (f, p.age());
 42 
 43       final Person m = new Person ("Richard Dedekind", date ("6 Oct 1831"));
 44       System.out.format (f, m.age());
 45 
 46       final Person h = new Person ("Hans Arnold Heilbronn", date ("8 Oct 1908"));
 47       System.out.format (f, h.age());
 48 
 49       final Person a = new Person ("Howard Aiken", date ("14 Mar 1900"));
 50       System.out.format (f, a.age());
 51 
 52    }
 53 }