一、對象和類
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();
}
}
輸出: