Basic returns and class question
<p>I'm new to Java and trying to learn it after having learn C, having some trouble with the syntax. This is a code my professor gave me to look at and I can understand basically what it's doing accept for the last section with [public boolean isAfter(Date b)]. Where did the Date b come from, and what is compareTo?</p>

<pre><code>import java.util.Calendar;
import java.util.GregorianCalendar;

public class Date implements Proj1Constants {

    private static final int[] DAYS = { 0, 31, 29, 31, 30, 31, 30, 31, 31,
            30, 31, 30, 31 };
    private static final int LEAP_YEAR = 366;
    private static final int NON_LEAP_YEAR = 365;

    private final int month; // month (between 1 and 12)
    private final int day; // day (between 1 and DAYS[month])
    private final int year; // year



    /**
     * Constructor: default; returns today's date
     */
    // creates today's date as the date; obtaines it from Java library

    public Date() 

    {
        GregorianCalendar c = new GregorianCalendar();
        month = c.get(Calendar.MONTH)+1; //our month starts from 1
        day = c.get(Calendar.DAY_OF_MONTH);
        year = c.get(Calendar.YEAR);
    }



    /**
     * Constructor: Does bounds-checking to ensure object represents a valid
     * date
     *
     * @param m represents the month between 1 and 12
     * @param d represents the date between 1 and the corresponding number
     * from array DAYS
     * @param y represents the year
     * @exception RuntimeException
     * if the date is invalid
     */
    public Date(int m, int d, int y) 

        {
        if (!isValid(m, d, y))
            throw new RuntimeException("Invalid date");
        month = m;
        day = d;
        year = y;
    }


    /**
     * Constructor: Does bounds-checking to ensure string represents a valid
     * date
     *
     * @param sDate represents a date given in format mm-dd-yyyy
     * @exception RuntimeException if the date is invalid
     */

    public Date(String sDate)

        {
        int m, d, y;
        String[] chopDate = sDate.split("-");
        m = Integer.parseInt(chopDate[ZEROI]);
        d = Integer.parseInt(chopDate[ONEI]);
        y = Integer.parseInt(chopDate[TWOI]);
        if (!isValid(m, d, y))
            throw new RuntimeException("Invalid date");
        month = m;
        day = d;
        year = y;
    }


    /**
     * constructor: creates a date with a given year; fills in valid month and day;
     * as december 31st.
     *
     * @param y represents a date given in year as integer
     */


    public Date(int y) 

        {

        month = 12;
        day = DAYS[12];
        year = y;
    }


    /**
     * create a date with a given month and year; fills in valid day;
     *
     * @param m represents the month between 1 and 12
     * @param y represents the year
     * @exception RuntimeException if the date is invalid
     */

    public Date(int m, int y) 

    {

        if (!isValid(m, DAYS[m], y))
            throw new RuntimeException("Invalid date; correct input");
        month = m;
        day = DAYS[m];
        year = y;
    }


    /**
     * Is the given date valid?
     *
     * @param month, day, and year
     * @return false if month exceeds 12 or is less than 1
     * @return false if day exceeds the corresponding days for a month from
     * array DAYS
     * @return false if the year is not a leap year and has 29 days
     */

    private static boolean isValid(int m, int d, int y) 

    {
        if (m &lt; 1 || m &gt; 12)
            return false;
        if (d &lt; 1 || d &gt; DAYS[m])
            return false;
        if (m == 2 &amp;&amp; d == 29 &amp;&amp; !isLeapYear(y))
            return false;
        return true;
    }


    /**
     * is y a leap year?
     *
     * @param y
     * represents the year specified
     * @return true if year divisible by 400
     * @return false if year divisible by 100 and not by 400
     */

    private static boolean isLeapYear(int y) 

    {
        if (y % 400 == 0)
            return true;
        if (y % 100 == 0)
            return false;
        return (y % 4 == 0);
    }


    /**
     * is (m, y) a leap month?
     *
     * @param m represents the month specified
     * @param y represents the year specified
     * @return true if it is a leap month
     * @return false otherwise
     */

    private static boolean isLeapMonth(int m, int y) 
    {
        if (isLeapYear(y)) return ((m == 2) ? true : false);
        return false;
    }


    // return the next Date
    /**
     * adds a day and returns a new Date object
     *
     * @return returns a new Date object adding a day
     */

    public Date next() 

    {
        if (isValid(month, day + 1, year))
            return new Date(month, day + 1, year);
        else if (isValid(month + 1, 1, year))
            return new Date(month + 1, 1, year);
        else
            return new Date(1, 1, year + 1);
    }


    // is this Date after b?
    /**
     * compares two Date objects
     *
     * @param b Date object
     * @return true if this Date is after Date b
     */

    public boolean isAfter(Date b)

    {
        return compareTo(b) &gt; 0;
    }
</code></pre>
