《Java核心技術 卷I》學習筆記10:使用預定義類
1 物件與物件變數
要想使用物件,首先必須構造物件,並指定其初始狀態,然後對物件應用方法。
使用構造器構造新例項。構造器是一種特殊的方法,用來構造並初始化物件。下面以標準Java庫中的Date類為例,介紹構造器的使用方法。
構造器的名字與類名相同,在構造器前面加上new操作符,就可以構造一個物件。例如:
new Date();
這個表示式構造了一個新物件,並被初始化為當前的日期和時間。
可以將新物件傳遞給一個方法,例如:
System.out.println(new Date());
也可以對新物件應用一個方法,例如:
String s = new Date().toString(); //返回日期的字串描述
在上面的例子中,構造的物件只能使用一次。為了讓物件可以多次使用,需要將物件存放在一個變數中。例如:
Date birthday = new Date();
物件變數不等於物件。物件變數並不包含物件,它只是引用一個物件。當物件變數沒有引用任何物件時,不能在這個變數上使用方法,否則會產生編譯錯誤。例如:
Date deadline;
String s = deadline.toString(); //錯誤
必須首先初始化變數,可以讓它引用一個新構造的物件,也可以引用一個已有的物件。例如:
Date deadline = new Date();
Date date = deadline; //此時變數deadline和date引用同一個物件
可以顯式地將物件變數設定為null,指示這個物件變數沒有引用任何物件。例如:
Date time = null;
在Java中,任何物件變數的值都是對儲存在另外一個地方的某個物件的引用,new操作符的返回值也是一個引用。可以將Java中的物件變數看做類似於C++的物件指標。
2 LocalDate類
上面提到的Date類用來表示時間點,而LocalDate類用日曆表示法表示日期。下面列出LocalDate類的一些常用方法。
/* java.time.LocalDate */
static LocalDate now() //構造一個表示當前日期的物件
static LocalDate of(int year, int month, int dayOfMonth) //構造一個表示給定日期的物件
int getYear() //得到當前物件指定日期的年
int getMonthValue() //得到當前物件指定日期的月
int getDayOfMonth() //得到當前物件指定日期的日
DayOfWeek getDayOfWeek()
//得到當前物件指定日期的星期數,返回DayOfWeek類的一個例項。
//對DayOfWeek類的例項呼叫getValue方法得到1~7之間的一個數,1表示星期一,7表示星期日。
LocalDate plusDays(long daysToAdd) //生成當前物件指定日期之後n天的日期
LocalDate minusDays(long daysToSubtract) //生成當前物件指定日期之前n天的日期
只訪問物件而不修改物件的方法稱為訪問器方法,修改物件的方法稱為更改器方法。例如,上面的plusDays方法得到當前物件指定日期之後n天的日期,但並不改變當前物件,因此它是訪問器方法。
應用例項:列印當前月的日曆
import java.time.*;
public class Calendar
{
public static void main(String[] args)
{
LocalDate date = LocateDate.now(); //構造一個物件,並用當前日期初始化
int month = date.getMonthValue(); //得到當前月份
int today = date.getDayOfMonth(); //得到當前日期
date = date.minusDays(today - 1); //將date設定為這個月的第一天
int value = date.getDayOfWeek().getValue(); //得到這個月的第一天是星期幾
System.out.println("Mon Tue Wed Thu Fri Sat Sun"); //列印表頭
for (int i = 1; i < value; i++)
{
System.out.print(" "); //列印第一行的縮排,內容為4個空格
}
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();
}
}
}
執行結果:
Mon Tue Wed Thu Fri Sat Sun
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15*
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30
在這個例子中,不需要考慮這個月有幾天,不需要考慮星期數如何計算,只需要呼叫方法,而不用考慮方法的具體實現,這體現了封裝性的優勢。
相關文章
- 《Java核心技術 卷I》學習筆記2:資料型別、變數與常量Java筆記資料型別變數
- JAVA核心技術學習筆記--反射Java筆記反射
- Java核心技術 卷1 基礎知識 部分筆記Java筆記
- java核心技術卷1學習思維導圖Java
- 《Java核心技術》第五章 繼承 學習筆記Java繼承筆記
- Java 核心技術卷 I (第 10 版,基於 java8) 第一二章總結Java
- Java核心技術筆記 繼承Java筆記繼承
- java核心技術閱讀筆記Java筆記
- 《Java核心技術(卷1)》筆記:第8章 泛型程式設計Java筆記泛型程式設計
- java核心技術筆記--執行緒Java筆記執行緒
- 《Java核心技術(卷1)》筆記:第7章 異常、斷言和日誌Java筆記
- java學習筆記(包裝類)Java筆記
- JAVA學習筆記—JAVA WEB(二)JAVA WEB核心(下)Java筆記Web
- Java核心技術筆記 異常、斷言和日誌Java筆記
- Kubernetes學習筆記(五):卷筆記
- JVM核心學習筆記JVM筆記
- Java學習筆記7(Java常用類庫與工具 )Java筆記
- java核心技術卷1 第五章:繼承Java繼承
- Java核心技術卷閱讀隨筆--第3章【Java 的基本程式設計結構】Java程式設計
- LLM學習筆記-長度外推技術筆記
- Java程式設計思想學習筆記4 - 序列化技術Java程式設計筆記
- 重學java之類的定義Java
- Xilinx約束學習筆記(二)—— 定義時鐘筆記
- Android 學習筆記核心篇Android筆記
- Redis核心技術筆記07-08Redis筆記
- Redis核心技術筆記11-15Redis筆記
- Redis核心技術筆記01-02Redis筆記
- Redis核心技術筆記21-25Redis筆記
- Redis核心技術筆記05-06Redis筆記
- Redis核心技術筆記03-04Redis筆記
- Redis核心技術筆記16-20Redis筆記
- 學習筆記17:DenseNet實現多分類(卷積基特徵提取)筆記SENet卷積特徵
- Go語言核心36講(Go語言進階技術四)--學習筆記Go筆記
- Go語言核心36講(Go語言進階技術三)--學習筆記Go筆記
- Go語言核心36講(Go語言進階技術二)--學習筆記Go筆記
- Go語言核心36講(Go語言進階技術九)--學習筆記Go筆記
- Go語言核心36講(Go語言進階技術十三)--學習筆記Go筆記
- Go語言核心36講(Go語言進階技術十二)--學習筆記Go筆記