我是Java的新手,在学习C之后尝试学习它,但语法有些麻烦。这是我教授给我看的一个代码,我基本上可以理解它正在接受的最后一节[public boolean isAfter(Date b)]。 Date b来自哪里,什么是compareTo?
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 < 1 || m > 12)
return false;
if (d < 1 || d > DAYS[m])
return false;
if (m == 2 && d == 29 && !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) > 0;
}
答案 0 :(得分:2)
compareTo
是实现Comparable
的所有类都应该实现的方法。该语句可以简单地解释为this.compareTo(b)
,这意味着如果compareTo
的结果在此实例上调用大于1,则此日期更大或位于传入日期之后。查看compareTo
接口的Comparable
方法的合同以获取更多详细信息。
compareTo
的定义,看来你必须亲自实现它?
答案 1 :(得分:2)
isAfter是一个实例方法,它接受一个Date
参数,该函数在函数范围内的引用为b
。
如果这是完整的代码,则无效,因为方法compareTo
未在任何地方定义。