对象与对象变量
要想使用对象,就必须构造对象,并指定其初始状态。
- 使用构造器(constructor)构造新实例
构造器的名字应该与类名相同,想要构造一个对象,需要在构造器前面加new操作符
new Date()
将这个对象传递给一个方法:
System.out.println(new Date());
或者将方法用于一个创建好的对象,toStrign
方法用于返回日期的字符串描述
String s = new Date().toString();
如果想要多次使用,需要将对象存放在一个变量中
Date birthday = new Date();
- 一个对象变量并没有实际包含一个对象,而仅仅是引用对象
-
Date dealine = new Date();
表达式new Date()构造了一个Date类型的对象,并且它的值是对新创造对象的引用 - 如果将一个方法应用于一个值为null对象上,那么就会产生运行错误。
- 所有的java兑现都存放在堆中,当一个对象包含另一个对象变量时,这个变量依然包含这指引领域个对象的指针
java中的LocalDate类
date类,时间是用一个距离固定时间点的毫秒数表示的,这个点就是所谓的纪元
它是UTC时间1970年1月1日0:00:00。
- 一个用来表示时间的date类;另一个时用来表示日历表示法的LocalDate类
不要使用构造器来构造LocalDatele类的对象,应该使用静态工厂方法代表调用构造器
LocalDate.now()
可以提供年、月、日来构造一个特定的日期:
LocalDate.of(1990,12,13)
将构造的对象保存在一个对象变量中:
LocalDate newYearEve = LocalDate.of(1999.12.31);
plusDays
方法会得到个新的LocalDate,如果应用这个方法的对象称为当前对象,则新日期对象则是距当前对象指定天数的一个新日期
LocalDate aThousandDaysLater = newYearEve.plusDays(1000)
更改器方法于访问器方法
plusDays方法产生一个欣的LocalDate对象,然后把这个新的对象赋给 aThousandDaysLater变量
- GregorianCalendar类处理日历一个日期增加1000天
GregorianCalendar someDay = newYearEve.GregorianCalendar(1999,11,31);
//那个类的奇怪特征:月份从0到1
someDay.add(Calendar.DAY_OF-MONTH,1000);
GregorianCalendar.add方法是一个更改器方法
只访问对象而不修改对象的方法称为访问器方法
方法
-
static LocalTime now()
创造一个表示当前日期的对象 -
static LocalTime of(int year,int month,int day)
构造一个表示给定日期的对象 -
int getYear()
int getMonthValue()
int getDayOfMonth()
得到当前的日期的年、月和日
*DayOfWek getDayOfWeek
得到当前是星期几,作为DayOfWeek类的一个实例返回,调用getValue来得到1~7之间的一个数字,表示这个是星期几,1=星期一,…7=周日
*LocalDate plusDays(int n)
LoclDate minusDays(int n)
生成当前日期之后或之前n天的日期
这个程序需要解决如何计算某月份的天数以及一个给定日期相应是星期几,当前日期用*标记
import java.time.*;
public class Main3
{
public static void main(String[] args)
{
LocalDate date = LocalDate.now();
int month = date.getMonthValue();
int today = date.getDayOfMonth();
date = date.minusDays(today - 1); // 设置为月初
DayOfWeek weekday = date.getDayOfWeek();
int value = weekday.getValue(); // 1=周一,…7=周日
System.out.println("Mon Tue Wed Thu Fri Sat Sun");
//日历上第一行是缩进的,是的月份第一天指向相应的星期几
for (int i = 1; i < value; i++)
System.out.print(" ");
//不知道一个月是几天,实际上只要date还在本月就行了
while (date.getMonthValue() == month)
{
System.out.printf("%3d", date.getDayOfMonth());
if (date.getDayOfMonth() == today)
System.out.print("*");
else
System.out.print(" ");
date = date.plusDays(1);
//如果到达新的一周则打印换行
if (date.getDayOfWeek().getValue() == 1) System.out.println();
}
if (date.getDayOfWeek().getValue() != 1) System.out.println();
}
}
网友评论