Development Class Java

/*
 This program is a part of the companion code for Core Java 8th ed.
 (http://horstmann.com/corejava)
 This program is free software: you can redistribute it and/or modify
 it under the terms of the GNU General Public License as published by
 the Free Software Foundation, either version 3 of the License, or
 (at your option) any later version.
 This program is distributed in the hope that it will be useful,
 but WITHOUT ANY WARRANTY; without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 GNU General Public License for more details.
 You should have received a copy of the GNU General Public License
 along with this program.  If not, see .
 */
import java.text.DateFormatSymbols;
import java.util.Calendar;
import java.util.GregorianCalendar;
/**
 * @version 1.4 2007-04-07
 * @author Cay Horstmann
 */
public class CalendarTest {
  public static void main(String[] args) {
    // construct d as current date
    GregorianCalendar d = new GregorianCalendar();
    int today = d.get(Calendar.DAY_OF_MONTH);
    int month = d.get(Calendar.MONTH);
    // set d to start date of the month
    d.set(Calendar.DAY_OF_MONTH, 1);
    int weekday = d.get(Calendar.DAY_OF_WEEK);
    // get first day of week (Sunday in the U.S.)
    int firstDayOfWeek = d.getFirstDayOfWeek();
    // determine the required indentation for the first line
    int indent = 0;
    while (weekday != firstDayOfWeek) {
      indent++;
      d.add(Calendar.DAY_OF_MONTH, -1);
      weekday = d.get(Calendar.DAY_OF_WEEK);
    }
    // print weekday names
    String[] weekdayNames = new DateFormatSymbols().getShortWeekdays();
    do {
      System.out.printf("%4s", weekdayNames[weekday]);
      d.add(Calendar.DAY_OF_MONTH, 1);
      weekday = d.get(Calendar.DAY_OF_WEEK);
    } while (weekday != firstDayOfWeek);
    System.out.println();
    for (int i = 1; i <= indent; i++)
      System.out.print("    ");
    d.set(Calendar.DAY_OF_MONTH, 1);
    do {
      // print day
      int day = d.get(Calendar.DAY_OF_MONTH);
      System.out.printf("%3d", day);
      // mark current day with *
      if (day == today)
        System.out.print("*");
      else
        System.out.print(" ");
      // advance d to the next day
      d.add(Calendar.DAY_OF_MONTH, 1);
      weekday = d.get(Calendar.DAY_OF_WEEK);
      // start a new line at the start of the week
      if (weekday == firstDayOfWeek)
        System.out.println();
    } while (d.get(Calendar.MONTH) == month);
    // the loop exits when d is day 1 of the next month
    // print final end of line if necessary
    if (weekday != firstDayOfWeek)
      System.out.println();
  }
}