天天看點

JavaSE(14):可變字元串類和日期相關類1、可變字元串類2、Java8之前的日期相關類3、 Java8中的日期相關類

文章目錄

  • 1、可變字元串類
    • 1.1 基本概念
    • 1.2 StringBuilder類常用的構造方法
    • 1.3 StringBuilder類常用的成員方法
    • 1.4 傳回值的設計
  • 2、Java8之前的日期相關類
    • 2.1 System類的概述
      • 2.1.1 常用的方法
    • 2.2 Date類的概述
      • 2.2.1 基本概念
      • 2.2.2 常用的方法
    • 2.3 SimpleDateFormat類的概述
      • 2.3.1 基本概念
      • 2.3.2 常用的方法
    • 2.4 Calendar類的概述
      • 2.4.1 基本概念
      • 2.4.2 常用的方法
      • 2.4.3 多态的使用場合
  • 3、 Java8中的日期相關類
    • 3.1 Java8日期類的由來
    • 3.2 Java8日期類的概述
    • 3.3 LocalDate類的概述
      • 3.3.1 基本概念
      • 3.3.2 常用的方法
    • 3.4 LocalTime類的概述
      • 3.4.1 基本概念
      • 3.4.2 常用的方法
    • 3.5 LocalDateTime類的概述
      • 3.5.1 基本概念
      • 3.5.2 常用的方法
    • 3.6 Instant類的概述
      • 3.6.1 基本概念
      • 3.6.2 常用的方法
    • 3.7 DateTimeFormatter類的概述
      • 3.7.1 基本概念
      • 3.7.2 常用的方法

1、可變字元串類

1.1 基本概念

  • 由于String類描述的字元串内容是個常量不可改變,當需要在Java代碼中描述大量類似的字元串時,隻能單獨申請和存儲,此時會造成記憶體空間的浪費。
  • 為了解決上述問題,可以使用java.lang.StringBuilder類和java.lang.StringBuffer類來描述字元序列可以改變的字元串。
  • StringBuffer類是從jdk1.0開始存在,屬于線程安全的類,是以效率比較低。
  • StringBuilder類是從jdk1.5開始存在,屬于非線程安全的類,效率比較高。

1.2 StringBuilder類常用的構造方法

方法聲明 功能介紹
StringBuilder() 使用無參方式構造對象,容量為16
StringBuilder(int capacity) 根據參數指定的容量來構造對象,容量為參數指定大小
StringBuilder(String str) 根據參數指定的字元串來構造對象,容量為:16+字元串長度

1.3 StringBuilder類常用的成員方法

方法聲明 功能介紹
int capacity() 用于傳回調用對象的容量
int length() 用于傳回字元串的長度,也就是字元的個數
StringBuilder insert(int offset, String str) 插入字元串并傳回調用對象的引用,就是自己
StringBuilder append(String str) 字元串的末尾追加字元串
StringBuilder deleteCharAt(int index) 将目前字元串中下标為index位置的單個字元删除
StringBuilder delete(int start,int end) 删除字元串
StringBuilder replace(int start,int end,String str) 替換字元串
StringBuilder reverse() 字元串反轉
  • 注意:作為參數傳遞的話,方法内部String不會改變其值,StringBuffer和StringBuilder會改變其值。
  • 筆試考點一:如何實作StringBuilder類型和String類型之間的轉換?
StringBuilder sb3 = new StringBuilder("hello");
String str3 = sb3.toString();
StringBuilder sb5 = new StringBuilder(str3);
           
  • 筆試考點二:String、StringBuilder、StringBuffer之間效率誰高?排列如何?

    效率排行:String < StringBuffer < StringBuilder

1.4 傳回值的設計

  • StringBuilder的很多方法的傳回值均為StringBuilder類型。這些方法的傳回語句均為:return this。
  • 由此可見,這些方法在對StringBuilder所封裝的字元序列進行改變後又傳回了該對象的引用。基于這樣設計的目的在于可以連續調用。

2、Java8之前的日期相關類

2.1 System類的概述

2.1.1 常用的方法

方法聲明 功能介紹
static long currentTimeMillis() 傳回目前時間與1970年1月1日0時0分0秒之間以毫秒為機關的時間差。通常用于測試某一段代碼的執行效率。

2.2 Date類的概述

2.2.1 基本概念

  • java.util.Date類主要用于描述特定的瞬間,也就是年月日時分秒,可以精确到毫秒。

2.2.2 常用的方法

方法聲明 功能介紹
Date() 使用無參的方式構造對象,也就是目前系統時間
Date(long date) 根據參數指定毫秒數構造對象, 參數為距離1970年1月1日0時0分0秒的毫秒數
long getTime() 擷取調用對象距離1970年1月1日0時0分0秒的毫秒數
void setTime(long time) 設定調用對象為距離基準時間time毫秒的時間點

2.3 SimpleDateFormat類的概述

2.3.1 基本概念

  • java.text.SimpleDateFormat類主要用于實作日期和文本之間的轉換。

2.3.2 常用的方法

方法聲明 功能介紹
SimpleDateFormat() 使用無參方式構造對象
SimpleDateFormat(String pattern) 根據參數指定的模式來構造對象,模式主要有: y-年 M-月 d-日 H-時 m-分 s-秒
final String format(Date date) 用于将日期類型轉換為文本類型
Date parse(String source) 用于将文本類型轉換為日期類型

2.4 Calendar類的概述

2.4.1 基本概念

  • java.util.Calender類主要用于描述特定的瞬間,取代Date類中的過時方法實作全球化。
  • 該類是個抽象類,是以不能執行個體化對象,其具體子類針對不同國家的月曆系統,其中應用最廣泛的是GregorianCalendar(格裡高利曆),對應世界上絕大多數國家/地區使用的标準月曆系統。

2.4.2 常用的方法

方法聲明 功能介紹
static Calendar getInstance() 用于擷取Calendar類型的引用
void set(int year, int month, int date, int hourOfDay, int minute, int second) 用于設定年月日時分秒資訊
Date getTime() 用于将Calendar類型轉換為Date類型
void set(int field, int value) 設定指定字段的數值
void add(int field, int amount) 向指定字段增加數值
  • 考點:既然Calendar是個抽象類不能建立對象,那麼getInstance()方法為什麼可以擷取Calendar類型的引用?

    答:由源碼可知,傳回的并不是Calendar類型的對象,而是Calendar類的子類GregorianCalendar等的對象,形成了多态。

2.4.3 多态的使用場合

  • 場合一:通過方法的參數傳遞形成多态。
public static void draw(Shape s){
    s.show();
}
draw(new Rect(1, 2, 3, 4));
           
  • 場合二:在方法體中直接使用多态的文法格式。
  • 場合三:通過方法的傳回值類型形成多态。
Calender getInstance(){
    return new GregorianCalendar(zone, aLocale);
}
           

3、 Java8中的日期相關類

3.1 Java8日期類的由來

JDK 1.0中包含了一個java.util.Date類,但是它的大多數方法已經在JDK 1.1引入Calendar類之後被棄用了。而Calendar并不比Date好多少。它們面臨的問題是:

  • Date類中的年份是從1900開始的,而月份都從0開始。
  • 格式化隻對Date類有用,對Calendar類則不能使用。
  • 非線程安全等。

3.2 Java8日期類的概述

  • Java 8通過釋出新的Date-Time API來進一步加強對日期與時間的處理。
  • java.time包:該包是日期/時間API的基礎包。
  • java.time.chrono包:該包提供對不同月曆系統的通路。
  • java.time.format包:該包能夠格式化和解析日期時間對象。
  • java.time.temporal包:該包包含底層架構和擴充特性。
  • java.time.zone包:該包支援不同時區以及相關規則的類。

3.3 LocalDate類的概述

3.3.1 基本概念

  • java.time.LocalDate類主要用于描述年-月-日格式的日期資訊,該類不表示時間和時區資訊。

3.3.2 常用的方法

方法聲明 功能介紹
static LocalDate now() 在預設時區中從系統時鐘擷取目前日期

3.4 LocalTime類的概述

3.4.1 基本概念

  • java.time.LocalTime 類主要用于描述時間資訊,可以描述時分秒以及納秒。

3.4.2 常用的方法

方法聲明 功能介紹
static LocalTime now() 從預設時區的系統時間中擷取目前時間
static LocalTime now(ZoneId zone) 擷取指定時區的目前時間

3.5 LocalDateTime類的概述

3.5.1 基本概念

  • java.time.LocalDateTime類主要用于描述ISO-8601月曆系統中沒有時區的日期時間,如2007-12-03T10:15:30。

3.5.2 常用的方法

方法聲明 功能介紹
static LocalDateTime now() 從預設時區的系統時間中擷取目前日期時間
static LocalDateTime of(int year, int month, int dayOfMonth, int hour, int minute, int second) 根據參數指定的年月日時分秒資訊來設定日期時間
int getYear() 擷取年份字段的數值
int getMonthValue() 擷取1到12之間的月份字段
int getDayOfMonth() 擷取日期字段
int getHour() 擷取小時數
int getMinute() 擷取分鐘數
int getSecond() 擷取秒數
LocalDateTime withYear(int year) 設定為參數指定的年
LocalDateTime withMonth(int month) 設定為參數指定的月
LocalDateTime withDayOfMonth(int dayOfMonth) 設定為參數指定的日
LocalDateTime withHour(int hour) 設定為參數指定的時
LocalDateTime withMinute(int minute) 設定為參數指定的分
LocalDateTime withSecond(int second) 設定為參數指定的秒
LocalDateTime plusYears(long years) 加上參數指定的年
LocalDateTime plusMonths(long months) 加上參數指定的月
LocalDateTime plusDays(long days) 加上參數指定的日
LocalDateTime plusHours(long hours) 加上參數指定的時
LocalDateTime plusMinutes(long minutes) 加上參數指定的分
LocalDateTime plusSeconds(long seconds) 加上參數指定的秒
LocalDateTime minusYears(long years) 減去參數指定的年
LocalDateTime minusMonths(long months) 減去參數指定的月
LocalDateTime minusDays(long days) 減去參數指定的日
LocalDateTime minusHours(long hours) 減去參數指定的時
LocalDateTime minusMinutes(long minutes) 減去參數指定的分
LocalDateTime minusSeconds(long seconds) 減去參數指定的秒

3.6 Instant類的概述

3.6.1 基本概念

  • java.time.Instant類主要用于描述瞬間的時間點資訊。

3.6.2 常用的方法

方法聲明 功能介紹
static Instant now() 從系統時鐘上擷取目前時間
OffsetDateTime atOffset(ZoneOffset offset) 将此瞬間與偏移量組合以建立偏移日期時間
static Instant ofEpochMilli(long epochMilli) 根據參數指定的毫秒數來構造對象,參數為距離1970年1月1日0時0分0秒的毫秒數
long toEpochMilli() 擷取距離1970年1月1日0時0分0秒的毫秒數

3.7 DateTimeFormatter類的概述

3.7.1 基本概念

  • java.time.format.DateTimeFormatter類主要用于格式化和解析日期。

3.7.2 常用的方法

方法聲明 功能介紹
static DateTimeFormatter ofPattern(String pattern) 根據參數指定的模式來擷取對象
String format(TemporalAccessor temporal) 将參數指定日期時間轉換為字元串
TemporalAccessor parse(CharSequence text) 将參數指定字元串轉換為日期時間