一、对象和类
1.面向对象程序设计概述
1.1类之间的关系
依赖:(“uses-a”)
聚合:(“has-a”)
继承:(“is-a”)
依赖:一个类的方法操纵另一个类的对象,我们就说一个类依赖于另一个类。
聚合:意味着类A的对象包含类B的对象。
继承:类A扩展了类B,类A不但包含从类B继承的方法,还会拥有一些额外的功能,如:“急单”继承了“订单”。
2.使用预定义类
2.1对象和对象的变量
要想使用对象, 就必须首先构造对象 , 并指定其初始状态 。 然后 , 对对象应用方法 。
package com.eleven.oop;
import java.util.Date;
public class ObjectVariable {
public static void main(String[] args) {
/**
* 只使用一次:在这两个对象中,构造对象只使用了一次
*/
// 构造一个Date对象
System.out.println(new Date()); // Tue Jan 07 18:05:23 CST 2020
// 返回字符串日期的描述
System.out.println(new Date().toString()); // Tue Jan 07 18:05:23 CST 2020
/**
* 多次使用:将对象放在一个变量中。
* 其中一个对象变量并没有实际包含一个对象, 而仅仅引用一个对象 。
* 任何对象变量的值都是对存储在另外一个地方的一个对象的引用 。
*/
Date birthday = new Date();
System.out.println(birthday);// Tue Jan 07 18:05:23 CST 2020
// 定义了一个对象变量 deadline , 它 可 以 引 用 Date 类型的对象
Date deadline;
// 可以用新构造的对象初始化这个变量
System.out.println(deadline = new Date()); // Tue Jan 07 18:05:23 CST 2020
// 也让这个变量引用一个已存在的对象
System.out.println(deadline = birthday); // Tue Jan 07 18:05:23 CST 2020
/**
*
*/
// 表达式new Date()构造了一个 Date类型的对象,并且它的值是对新创建对象的引用。这个引用存储在变量date中
Date date = new Date();
// 可以显式地将对象变量设置为null, 表明这个对象变量目前没有引用任何对象 。
date = null; // 局部变量不会自动地初始化为null, 而必须通过调用 new 或将它们设置为 null进行初始化 。
}
}
2.2LocalDate类
Java类库分别包含两个类:1.表示时间点的Date类;2.日历表示法LocalDate类。
package com.eleven.oop;
import java.time.LocalDate;
/**
* Date:用来表示时间点。
* LocalDate:日历表示法
*
* @author sywangu
*
*/
public class Calendar {
public static void main(String[] args) {
// 构造一个新对象,表示构造这个对象时的日期
System.out.println(LocalDate.now()); // 2020-01-07
// 提供年、月、日来构造对应一个特定日期的对象
System.out.println(LocalDate.of(1999, 12, 31)); // 1999-12-31
// 通过LocalDate方法获得年月日
LocalDate newYears = LocalDate.of(1999, 12, 31);
int year = newYears.getYear();
int month = newYears.getMonthValue();
int day = newYears.getDayOfMonth();
System.out.println("年:"+year+"月:"+month+"日:"+day); // 年:1999月:12日:31
LocalDate aThousandDaysLater = newYears.plusDays(1000); // 表示1000天之后
year = aThousandDaysLater.getYear();
month = aThousandDaysLater .getMonthValue();
day = aThousandDaysLater .getDayOfMonth();
System.out.println("年:"+year+"月:"+month+"日:"+day); // 年:2002月:9日:26
}
}
2.3更改方法和访问器的方法
需求:用一个应用LocalDate类的程序,显示当前月的日历,其中当前日要用*号标记出来。
思路:
1.先创建一个日历对象
2.获得当前的月和日
3.将日期设置为这个月的第一天,并得到这一天是星期几
4.打印日历的表头和第一行的缩颈
5.打印日历的主体
package com.eleven.oop;
import java.time.DayOfWeek;
import java.time.LocalDate;
/**
* 需求:用一个应用LocalDate类的程序,显示当前月的日历,其中当前日要用*号标记出来。
* 思路:需要解决如何计算某月份的天数以及一个给定日期相应是星期几。
* 思路:
* 1.先创建一个日历对象
* 2.获得当前的月和日
* 3.将日期设置为这个月的第一天,并得到这一天是星期几
* 4.打印日历的表头和第一行的缩颈
* 5.打印日历的主体
*
* @author sywangu
*
*/
public class CalendarTest {
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(); // 调用这个对象的 getValue 方法来得到星期几的一个数值
// 准备将日历打印出来,先打印日历的表头和第一行的缩进
System.out.println("Mon Tue Wed Thu Fri Sat Sun");
for(int i = 1; i < value; i++) {
//System.out.println(" ");
}
// 打印日历的主体
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();
}
}
输出: