Java基礎(chǔ)案例教程(第3版) 課件 第5章 Java API_第1頁
Java基礎(chǔ)案例教程(第3版) 課件 第5章 Java API_第2頁
Java基礎(chǔ)案例教程(第3版) 課件 第5章 Java API_第3頁
Java基礎(chǔ)案例教程(第3版) 課件 第5章 Java API_第4頁
Java基礎(chǔ)案例教程(第3版) 課件 第5章 Java API_第5頁
已閱讀5頁,還剩162頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

第5章JavaAPI《Java基礎(chǔ)案例教程》(第3版)學習目標/Target熟悉Object類,能夠簡述Object類的常用方法及其作用了解StringBuffer類和StringBuilder類,能夠簡述它們的特點和區(qū)別熟悉System類,能夠簡述System類的常用方法及其作用熟悉String類的常用方法,能夠使用String類的常用方法對字符串進行查找、替換、分割、截取等操作掌握String類的初始化,能夠創(chuàng)建并初始化String對象學習目標/Target掌握LocalDate類和LocalTime類,能夠使用LocalDate類和LocalTime類操作日期和時間掌握DateTimeFormatter類,能夠?qū)θ掌诤蜁r間進行格式化和解析熟悉Duration類和Period類,能夠使用Duration類和Period類處理時間差掌握LocalDateTime類,能夠使用LocalDateTime類操作日期和時間熟悉包裝類,能夠進行基本數(shù)據(jù)類型、對應(yīng)包裝類、字符串類之間的轉(zhuǎn)換學習目標/Target熟悉Lambda表達式,能夠使用Lambda表達式代替匿名內(nèi)部類的編寫掌握正則表達式,能夠簡述正則表達式常用元素的作用,并能夠使用Patter類和Matcher類進行字符串與正則表達式的匹配掌握Math類和Random類,能夠使用Math類進行基本的數(shù)學運算,能夠使用Random類生成隨機數(shù)章節(jié)概述/

SummaryJavaAPI(ApplicationProgrammingInterface,應(yīng)用程序編程接口)是指Java中所提供的一系列類庫、接口文件和相關(guān)工具。JavaAPI中包含了許多已實現(xiàn)并經(jīng)過測試的常用功能,開發(fā)人員可以直接調(diào)用API中提供的類和接口,快速地完成應(yīng)用程序的開發(fā),避免重復造輪子,從而提高軟件開發(fā)和維護的效率。本章將對Java提供的常用API進行講解。目錄/Contents0102Object類字符串類0304包裝類日期時間類目錄/Contents0506System類Math類與Random類0708Lambda表達式正則表達式Object類5.15.1Object類熟悉Object類,能夠簡述Object類的常用方法和其作用

先定一個小目標!5.1Object類Object類是Java中所有類的父類,也就是說,每個Java類都會直接或者間接地繼承Object類。Object類提供了所有Java對象都具有的通用方法,具體如下表。方法名稱方法說明equals(Objectobj)判斷當前對象與參數(shù)對象obj是否相等,即判斷兩個對象是否引用同一個內(nèi)存地址hashCode()獲取對象的哈希值getClass()獲取當前對象實例所屬的類toString()獲取對象的字符串表示形式5.1Object類(1)equals()方法默認情況下,equals()方法使用的是對象的引用比較,即比較內(nèi)存地址。然而,在實際開發(fā)中,往往需要根據(jù)對象的內(nèi)容或特定字段來判斷兩個對象是否相等,而不僅僅是比較內(nèi)存地址。對此開發(fā)者可以在自定義類中重寫equals()方法,在重寫的方法中自定義比較的標準。

需要注意的是,Java官方規(guī)定重寫equals()方法來定義對象相等的準則時,也必須重寫與之相對應(yīng)的

hashCode()方法,以便于在哈希表中存儲對象時,能夠恰好確定對象在哈希表中的存儲位置。5.1Object類(2)hashCode()方法hashCode()方法獲取到對象的哈希值是一個int類型的整數(shù),用于快速定位對象在哈希表中的存儲位置的索引。

不同的對象可能會計算得到相同的哈希值,對此在使用哈希值比較對象時,應(yīng)該結(jié)合equals()方法進行判斷。5.1Object類(3)getClass()方法getClass()方法可以獲取一個對象所屬類的信息、創(chuàng)建類的實例對象、調(diào)用類的方法等,在后續(xù)學習反射時會經(jīng)常用到,這里不做詳細介紹。5.1Object類(4)toString()方法toString()方法返回的是一個對象的字符串表示,該字符串由該對象對應(yīng)的類名、符號“@”和該對象的哈希值組成。開發(fā)者可以在自定義類中根據(jù)具體的需求重寫toString()方法,返回更有意義和具體信息的字符串表示,以便在調(diào)試、日志記錄、輸出等場景下更好地獲取對象的內(nèi)容。5.1Object類案例演示為了更好地理解equals()方法和toString()方法,下面通過一個案例演示它們的使用。Example01.java源代碼5.1Object類案例演示案例的運行結(jié)果如下圖所示。字符串類5.25.2字符串類字符串是編寫程序時使用最為頻繁的數(shù)據(jù)類型之一,為了更好的封裝和處理字符串數(shù)據(jù),Java提供了三種主要的字符串類,分別是String、StringBuffer和StringBuilder,它們位于java.lang包中,可以直接使用而不需要導包。下面對String類、StringBuffer類和StringBuilder類分別進行講解。5.2.1String類的初始化掌握String類的初始化,能夠創(chuàng)建并初始化String對象

先定一個小目標!5.2.1String類的初始化String類Java提供用于表示字符串的類之一,使用該類可以創(chuàng)建和操作字符串對象。使用String類進行字符串操作之前,首先需要初始化String對象,初始化的方式有使用字符串常量和使用構(gòu)造方法兩種方式。5.2.1String類的初始化(1)使用字符串常量使用字符串常量初始化一個String類對象的語法格式如下。String變量名=字符串;String為引用數(shù)據(jù)類型,字符串可以為一個具體的字符串,也可以設(shè)置為null。示例代碼如下。Stringstr1=null;//將字符串str1設(shè)置為nullStringstr2="";//將字符串str2設(shè)置為空字符串Stringstr3="hello";//將字符串str3設(shè)置為hello5.2.1String類的初始化(1)使用字符串常量String類代表一個不可變的字符序列。這意味著只要一個String對象被創(chuàng)建,它的值就不能被修改。示例代碼及圖解變化如下。Strings="hello";s="helloworld";5.2.1String類的初始化(2)使用構(gòu)造方法String類提供了多個構(gòu)造方法來初始化字符串對象,其中的常見構(gòu)造方法如下表所示。方法聲明功能描述String()創(chuàng)建一個內(nèi)容為空的字符串String(Stringvalue)根據(jù)指定的字符串value創(chuàng)建對象String(char[]value)根據(jù)指定的字符數(shù)組value創(chuàng)建對象String(byte[]bytes)根據(jù)指定的字節(jié)數(shù)組bytes創(chuàng)建對象5.2.1String類的初始化案例演示下面通過一個案例演示使用構(gòu)造方法創(chuàng)建String類的對象。Example02.java源代碼5.2.1String類的初始化案例演示案例的運行結(jié)果如下圖所示。5.2.1String類的初始化小提示:字符串連接運算符Java中的運算符“+”可以用來連接字符串。例如文件Example02.java中,"s1="+s1的作用就是將s1=和字符串s1的值拼接成一個新的字符串。在Java程序中,如果符號“+”的兩邊操作數(shù)中有一個為String類型,那么“+”就表示字符串連接運算符。5.2.2String類的常用方法熟悉String類的常用方法,能夠使用String類的常用方法對字符串進行查找、替換、分割、截取等操作

先定一個小目標!5.2.2String類的常用方法為了方便操作和處理字符串,String類提供了一系列常用的方法,包括查找、替換、比較和截取等操作。方法聲明功能描述intlength()返回當前字符串的長度,即字符串中字符的個數(shù)intindexOf(intch)返回指定字符ch在字符串中第一次出現(xiàn)的位置(索引)intlastIndexOf(intch)返回指定字符ch在字符串中最后一次出現(xiàn)的位置intindexOf(Stringstr)返回指定子字符串str在字符串第一次出現(xiàn)的位置intlastIndexOf(Stringstr)返回指定子字符串str在此字符串中最后一次出現(xiàn)的位置charcharAt(intindex)返回字符串中index位置上的字符,其中index的取值范圍是0~(字符串長度-1)booleanstartsWith(Stringprefix)判斷此字符串是否以指定的字符串prefix開始booleanendsWith(Stringsuffix)判斷此字符串是否以指定的字符串suffix結(jié)尾5.2.2String類的常用方法方法聲明功能描述booleanisEmpty()判斷字符串長度是否為0,如果為0則返回true,反之則返回falsebooleanequals(Objectobj)比較obj與當前字符串對象的內(nèi)容是否相同booleanequalsIgnoreCase(Stringstr)以忽略大小寫的方式比較str與當前字符串對象的內(nèi)容是否相同intcompareTo(Stringstr)按對應(yīng)字符的Unicode比較str與當前字符串的大小。若當前字符串比str大,返回正整數(shù);若當前字符串比str小,返回負整數(shù);若相等則返回0intcompareToIgnoreCase(Stringstr)按對應(yīng)字符的Unicode以忽略大小寫的方式比較str與當前字符串的大小。若當前字符串比str大,返回正整數(shù);若當前字符串比str小,返回負整數(shù);若相等則返回0booleancontains(CharSequencecs)判斷此字符串中是否包含指定的字符序列cs。StringtoLowerCase()使用默認語言環(huán)境的規(guī)則將String中的所有字符都轉(zhuǎn)換為小寫StringtoUpperCase()使用默認語言環(huán)境的規(guī)則將String中的所有字符都轉(zhuǎn)換為大寫接上頁表格。5.2.2String類的常用方法方法聲明功能描述staticString

valueOf(int

i)將int變量i轉(zhuǎn)換成字符串char[]toCharArray()將此字符串轉(zhuǎn)換為一個字符數(shù)組Stringreplace(CharSequenceoldstr,CharSequencenewstr)使用newstr替換字符串中的oldstr,返回一個新的字符串Stringtrim()去除了原字符串首尾的空格Stringconcat(Stringstr)將指定的字符串str連接到當前字符串的末尾String[]split(Stringregex)根據(jù)參數(shù)regex將當前字符串分割為若干個子字符串Stringsubstring(intbeginIndex)返回一個新字符串,它包含從指定的beginIndex處開始,直到此字符串末尾的所有字符Stringsubstring(intbeginIndex,intendIndex)返回一個新字符串,它包含從指定的beginIndex處開始,直到索引endIndex-1處的所有字符接上頁表格。5.2.2String類的常用方法1.字符串的獲取操作在Java程序中,有時需要獲取字符串的一些信息,比如獲取字符串的長度、獲取指定索引位置的字符等。5.2.2String類的常用方法1.字符串的獲取操作通過一個案例學習使用String類的方法獲取字符串長度、以及訪問字符串中的字符。Example03.java源代碼5.2.2String類的常用方法1.字符串的獲取操作案例的運行結(jié)果如下圖所示。5.2.2String類的常用方法2.字符串的判斷操作在實際開發(fā)中,常常需要對字符串進行各種判斷操作。例如,在用戶注冊時,程序可能需要驗證填寫的用戶信息是否符合特定的格式要求,例如,字符串是否為空、是否以指定字符串開始或結(jié)束、是否包含指定的字符串等。5.2.2String類的常用方法2.字符串的判斷操作通過一個案例演示如何調(diào)用String類提供的方法進行字符串的判斷操作。Example04.java源代碼5.2.2String類的常用方法2.字符串的判斷操作案例的運行結(jié)果如下圖所示。5.2.2String類的常用方法3.字符串的轉(zhuǎn)換操作在程序開發(fā)中,經(jīng)常需要對字符串進行各種轉(zhuǎn)換操作。例如,在數(shù)據(jù)處理時,為了方便拆分字符串,可以將字符串轉(zhuǎn)換成數(shù)組形式,或者為了符合特定格式需求,需要將字符串中的字符進行大小寫轉(zhuǎn)換等。5.2.2String類的常用方法3.字符串的轉(zhuǎn)換操作下面通過一個案例演示字符串的轉(zhuǎn)換操作。Example05.java源代碼5.2.2String類的常用方法3.字符串的轉(zhuǎn)換操作案例的運行結(jié)果如下圖所示。5.2.2String類的常用方法4.字符串的替換和去除空格操作在程序開發(fā)中,經(jīng)常會遇到需要對字符串進行替換和去除空格的操作。例如,開發(fā)一個文本編輯器時,提供查找和替換功能可以快速的修改或替換特定的文本。5.2.2String類的常用方法4.字符串的替換和去除空格操作下面通過一個案例演示字符串的替換和去除空格的操作。Example06.java源代碼5.2.2String類的常用方法4.字符串的替換和去除空格操作案例的運行結(jié)果如下圖所示。5.2.2String類的常用方法5.字符串的拼接、截取和分割操作在程序開發(fā)中,對字符串的拼接、截取和分割也是很常見的操作。例如,購物網(wǎng)站將用戶ID和當前時間拼接起來生成訂單號,或者在一段文本信息中,截取需要的部分,再根據(jù)指定分隔符將其分割為若干段。5.2.2String類的常用方法5.字符串的拼接、截取和分割操作下面通過一個案例演示字符串的拼接、分割和截取操作。Example07.java源代碼5.2.2String類的常用方法5.字符串的拼接、截取和分割操作案例的運行結(jié)果如下圖所示。5.2.3StringBuffer類和StringBuilder類

先定一個小目標!掌握StringBuffer類和StringBuilder類的使用,能夠熟練使用StringBuffer類和StringBuilder類對字符串進行操作,并簡述兩者的區(qū)別5.2.3StringBuffer類和StringBuilder類由于String類的字符串對象被創(chuàng)建后,其內(nèi)容是不可變的。如果需要頻繁地操作字符串,會導致不斷地創(chuàng)建新的String類對象,從而占用大量內(nèi)存,也會降低CPU的效率。為此,Java提供了StringBuffer類,StringBuffer類和String類最大的區(qū)別在于它的內(nèi)容和長度都是可以改變的。5.2.3StringBuffer類和StringBuilder類StringBuffer類提供了一系列高效地處理字符串的方法,常用方法如下表所示。方法聲明功能描述StringBuffer()創(chuàng)建初始容量為16,不含任何內(nèi)容的字符串緩沖區(qū)StringBuffer(intcapacity)創(chuàng)建初始容量為capacity,不含任何內(nèi)容的字符串緩沖區(qū)StringBuffer(Strings)創(chuàng)建初始容量為參數(shù)s的長度+16,內(nèi)容為s的字符串緩沖區(qū)intcapacity()獲取字符串緩沖區(qū)的當前容量StringBufferappend(charc)添加參數(shù)到StringBuffer對象中StringBufferinsert(intoffset,Stringstr)在字符串的offset位置插入字符串strvoidsetCharAt(intindex,charch)修改指定位置index處的字符序列5.2.3StringBuffer類和StringBuilder類接上頁表格。方法聲明功能描述StringBufferreplace(intstart,intend,Strings)在StringBuffer對象中替換指定的字符或字符串序列StringBufferdeleteCharAt(intindex)移除此序列指定位置的字符StringBufferdelete(intstart,intend)刪除StringBuffer對象中指定范圍的字符或字符串序列StringtoString()返回StringBuffer緩沖區(qū)中的字符串StringBufferreverse()反轉(zhuǎn)字符串5.2.3StringBuffer類和StringBuilder類案例演示下面通過一個案例演示StringBuffer類常用方法的使用。Example08.java源代碼5.2.3StringBuffer類和StringBuilder類案例演示案例的運行效果如下圖所示。5.2.3StringBuffer類和StringBuilder類

需要注意的是,在使用StringBuffer類的replace()方法時,傳入的位置范圍是從開始位置到結(jié)束位置之前一個的字符。例如,在文件Example08.java的第15行代碼中,傳入的位置范圍為2到7,實際上是替換字符串中的第3個到第7個字符,而不是第3個到第6個字符。5.2.3StringBuffer類和StringBuilder類String類字符串類String類字符串對象不可變,僅用于表示數(shù)據(jù)類型。StringBuffer類StringBuffer類可以創(chuàng)建可變的字符串對象,是線程安全的。在多線程環(huán)境下,可以更安全的操作字符串。StringBuilder類StringBuilder類可以創(chuàng)建可變的字符串對象,是非線程安全的。在單線程環(huán)境下,代碼性能更高。StringBuilder類提供了與StringBuffer類相似的方法用于操作字符串。5.2.3StringBuffer類和StringBuilder類關(guān)于String類、StringBuffer類和StringBuilder類的使用時的注意事項。(1)在StringBuffer類與StringBuilder類中并沒有對Object類的equlas()方法重寫,具體示例如下。Strings1=newString("abc");Strings2=newString("abc");System.out.println(s1.equals(s2));//結(jié)果為trueStringBuffers3=newStringBuffer("abc");StringBuffers4=newStringBuffer("abc");System.out.println(s3.equals(s4));//結(jié)果為falseStringBuilders5=newStringBuilder("abc");StringBuilders6=newStringBuilder("abc");System.out.println(s5.equals(s6));//結(jié)果為false5.2.3StringBuffer類和StringBuilder類關(guān)于String類、StringBuffer類和StringBuilder類的使用時的注意事項。(2)String類對象可以用操作符“+”進行連接,而StringBuffer類和StringBuilder對象之間不能?!景咐?-1】食材入庫日志案例描述為了更好地掌握餐廳每天的經(jīng)營情況,餐廳負責人每天下班前都會盤點當天食材的入庫和消耗情況,進而計算當天的營收和次日的采購計劃。對此餐廳負責人要求餐廳食材采購人員采購結(jié)束后記錄采購明細。本任務(wù)要求編寫一個程序,對食材入庫進行日志記錄。【案例5-1】食材入庫日志案例效果包裝類5.35.3包裝類熟悉包裝類,能夠進行基本數(shù)據(jù)類型、對應(yīng)包裝類、字符串類之間的轉(zhuǎn)換

先定一個小目標!5.3包裝類Java提供了多種基本數(shù)據(jù)類型來表示簡單的數(shù)據(jù),它們在編程中使用的非常頻繁。然而,Java作為一種面向?qū)ο蟮木幊陶Z言,某些情況下可能需要把基本數(shù)據(jù)類型作為對象來處理,以便更加靈活地操作這些數(shù)據(jù)。為此,JDK中提供了一系列包裝類,可以把基本數(shù)據(jù)類型的值包裝為引用數(shù)據(jù)類型的對象。5.3包裝類在Java中,每種基本數(shù)據(jù)類都有其對應(yīng)的包裝類,具體如下表所示?;緮?shù)據(jù)類型對應(yīng)的包裝類byteBytecharCharacterintIntegershortShortlongLongfloatFloatdoubleDoublebooleanBoolean5.3包裝類基本數(shù)據(jù)類型與包裝類之間的轉(zhuǎn)換過程稱為“裝箱”與“拆箱”。其中,從基本數(shù)據(jù)類型轉(zhuǎn)換為對應(yīng)的包裝類對象稱為裝箱,反之,從包裝類對象轉(zhuǎn)換為對應(yīng)的基本數(shù)據(jù)類型稱為拆箱。5.3包裝類案例演示下面以int類型和Integer類型之間的轉(zhuǎn)換為例,通過一個案例演示裝箱與拆箱的過程。Example09.java源代碼5.3包裝類案例演示案例的運行結(jié)果如下圖所示。5.3包裝類Java中的包裝類提供了一些常用方法,用于進行各種數(shù)據(jù)類型之間的轉(zhuǎn)換。其中Integer常用的方法如下表所示。方法聲明功能描述staticIntegervalueOf(inti)返回指定的int值的Integer對象intintValue()將Integer類型的值以int類型返回staticIntegervalueOf(Strings)返回指定String值的Integer對象staticintparseInt(Strings)將字符串參數(shù)作為有符號的十進制整數(shù)進行解析5.3包裝類案例演示下面通過一個案例演示Integer常用方法的使用。Example10.java源代碼5.3包裝類案例演示案例的運行結(jié)果如下圖所示。5.3包裝類在實際開發(fā)中,基本數(shù)據(jù)類型與字符串類型之間的轉(zhuǎn)換經(jīng)常會用到。將String類型轉(zhuǎn)換為基本數(shù)據(jù)類型有多種方式。方式一:除了Charcter類之外,其他包裝類都提供了parseXxx()方法用于將String類型轉(zhuǎn)換為基本數(shù)據(jù)類型,具體語法格式如下?;緮?shù)據(jù)類型變量=包裝類.parseXxx(String類型的值或變量);Xxx表示對應(yīng)的基本數(shù)據(jù)類型名稱,首字母需要大寫,例如int類型對應(yīng)的方法為parseInt()。5.3包裝類方式二:包裝類還提供了valueOf()方法,可以先將字符串形式的數(shù)值轉(zhuǎn)換為對應(yīng)的包裝類型,再將其拆箱為基本數(shù)據(jù)類型,具體語法格式如下。包裝類型變量1=包裝類.valueOf(String類型的值或變量);基本數(shù)據(jù)類型變量2=變量1.intValue();以String類型的數(shù)據(jù)轉(zhuǎn)換為int類型為例,使用上述兩種方式的示例代碼如下。Strings="100";//方式一inta=Integer.parseInt(s);//a的值為100//方式二Integerb=Integer.valueOf(s);intc=Value();//c的值為1005.3包裝類基本數(shù)據(jù)類型轉(zhuǎn)換為String類型,可以使用String類提供的靜態(tài)方法valueOf(),具體語法格式如下。String變量=String.valueOf(基本數(shù)據(jù)類型的值或變量);

需要注意的是,在將String類型的數(shù)據(jù)轉(zhuǎn)換為基本數(shù)據(jù)類型時,傳入的字符串參數(shù)不能為0,且必須是可以解析為相應(yīng)基本類型的數(shù)據(jù),否則雖然編譯可以通過,但運行時會報錯。例如以下代碼。inti=Integer.parseInt("itcast");Integeri=Integer.valueOf("12a");日期時間類5.45.4日期時間類對許多應(yīng)用程序來說,對日期和時間進行操作是必不可少的。為了處理日期和時間,Java提供了多個內(nèi)置的日期和時間類,使用這些日期和時間類,可以輕松地進行日期和時間的計算、比較和格式化操作。下面對Java中常用的日期時間類進行講解。5.4.1LocalDate類和LocalTime類掌握LocalDate類和LocalTime類,能夠使用LocalDate類和LocalTime類操作日期和時間

先定一個小目標!5.4.1LocalDate類和LocalTime類LocalDate類和LocalTime類都是JDK8引入的日期時間類。其中,LocalDate表示不帶時區(qū)的日期,其內(nèi)部包含了日期的年、月、日三個部分。LocalTime表示不帶日期的時間,其內(nèi)部包含了單一時間的時、分、秒以及納秒四個部分。5.4.1LocalDate類和LocalTime類1.LocalDate類LocalDate類的作用:它不存儲和表示時間或時區(qū),只是描述日期。LocalDate所表示的日期包括年、月和日3部分,如2022-07-01表示2022年7月1日。5.4.1LocalDate類和LocalTime類1.LocalDate類LocalDate類提供了獲取日期對象、獲取日期的年月日、格式化日期、增減年月日等一系列方法。方法聲明功能描述staticLocalDateof(intyear,Monthmonth,intdayOfMonth)根據(jù)指定的年、月和日獲取LocalDate對象,其中year表示年份,month表示月份,dayOfMonth表示一個月中的哪一天staticLocalDatenow()從默認時區(qū)的系統(tǒng)時鐘中獲取當前日期對應(yīng)的LocalDate對象intgetYear()獲取日期的年份字段MonthgetMonth()使用Month枚舉獲取月份字段intgetMonthValue()獲取當前日期的月份intgetDayOfMonth()獲取當天未當月的第幾天5.4.1LocalDate類和LocalTime類1.LocalDate類接上頁表格。方法聲明功能描述Stringformat(DateTimeFormatter

formatter)使用指定的格式化程序格式化此日期booleanisBefore(ChronoLocalDate

other)檢查當前日期是否在指定日期之前booleanisAfter(ChronoLocalDate

other)檢查當前日期是否在指定日期之后booleanisEqual(ChronoLocalDate

other)檢查當前日期是否等于指定的日期booleanisLeapYear()根據(jù)ISO預測日歷系統(tǒng)規(guī)則,檢查指定日期是否是閏年staticLocalDateparse(CharSequencetext)從一個文本字符串中獲取一個

LocalDate的實例static

LocalDateparse(CharSequencetext,DateTimeFormatterformatter)使用特定格式格式化

LocalDate從文本字符串獲取的

LocalDate實例5.4.1LocalDate類和LocalTime類1.LocalDate類接上頁表格。方法聲明功能描述LocalDateplusYears(longyearsToAdd)增加指定年份LocalDateplusMonths(longmonthsToAdd)增加指定月份LocalDateplusDays(long

daysToAdd)增加指定天數(shù)LocalDateminusYears(long

yearsToSubtract)減少指定年份LocalDateminusMonths(long

monthsToSubtract)減少指定月份LocalDateminusDays(long

daysToSubtract)減少指定天數(shù)LocalDatewithYear(intyear)根據(jù)參數(shù)year修改日期的年份,并返回修改后的日期LocalDatewithMonth(intmonth)根據(jù)參數(shù)month修改日期的月份,并返回修改后的日期LocalDatewithDayOfMonth(intdayOfMonth)根據(jù)參數(shù)dayOfMonth修改日期的天數(shù),并返回修改后的日期5.4.1LocalDate類和LocalTime類1.LocalDate類下面通過一個案例演示LocalDate類一系列常用方法的使用。Example11.java源代碼5.4.1LocalDate類和LocalTime類1.LocalDate類案例的運行結(jié)果如下圖所示。5.4.1LocalDate類和LocalTime類2.LocalTime類LocalTime類的作用:用來表示不帶時區(qū)的時間,只對時分秒納秒做出處理,默認格式為時:分:秒.納秒,例如,11:23:40.051942200。與LocalDate類一樣,LocalTime類不能代表時間線上的即時信息,只是描述時間。5.4.1LocalDate類和LocalTime類2.LocalTime類LocalTime類中提供了獲取時間對象的方法,以及增減時分秒等常用方法,這些方法與LocalDate類中的方法用法類似。常用方法如下表所示。方法聲明功能描述staticLocalTimeof(inthour,intminute,intsecond,intnanoOfSecond)創(chuàng)建一個指定時、分、秒和納秒的

LocalTime

對象staticLocalTimenow()從默認時區(qū)的系統(tǒng)時鐘中獲取當前時間對應(yīng)的LocalTime對象intgetHour()獲取時間的小時部分intgetMinute()獲取時間的分鐘部分intgetSecond()獲取時間的秒部分5.4.1LocalDate類和LocalTime類2.LocalTime類接上頁表格。方法聲明功能描述staticLocalTimeparse(CharSequencetext,DateTimeFormatterformatter)用于將字符串表示的時間按照指定的格式解析為

LocalTime

對象booleanisAfter(LocalTimeother)判斷當前時間是否在指定時間之后booleanisBefore(LocalTimeother)判斷當前時間是否在指定時間之前Stringformat(DateTimeFormatterformatter)將時間格式化為指定的字符串表示形式LocalTimewithNano(intnanoOfSecond)創(chuàng)建一個具有指定納秒數(shù)的LocalTime實例5.4.1LocalDate類和LocalTime類2.LocalTime類下面通過一個案例學習LocalTime類的方法。Example12.java源代碼5.4.1LocalDate類和LocalTime類2.LocalTime類案例的運行效果如下圖所示。5.4.2LocalDateTime類掌握LocalDateTime類,能夠使用LocalDateTime類操作日期和時間

先定一個小目標!5.4.2LocalDateTime類LocalDateTime類是LocalDate類與LocalTime類的綜合,表示不帶時區(qū)的日期和時間,默認的日期時間格式是年-月-日T時:分:秒.納秒,如2023-11-06T13:43:25.774。LocalDateTime類包含了LocalDate類與LocalTime類的所有方法,并且LocalDateTime類還額外提供了日期時間的轉(zhuǎn)換方法5.4.2LocalDateTime類案例演示下面通過一個案例學習LocalDateTime類的日期時間轉(zhuǎn)換方法。Example13.java源代碼5.4.2LocalDateTime類案例演示案例的運行結(jié)果如下圖所示。5.4.3DateTimeFormatter類掌握DateTimeFormatter類的使用,能夠使用DateTimeFormatter類對日期和時間進行格式化

先定一個小目標!5.4.3DateTimeFormatter類使用LocalDate類、LocalTime類、LocalDateTime時,獲取到的日期或者時間都是以默認的格式,如果想要將日期或者時間設(shè)置為其他指定的格式,可以使用格式化類。JDK8在java.time.format包提供了一個DateTimeFormatter類,該類是一個格式化類,它不僅可以將日期、時間對象格式化成字符串,還能將特定格式的字符串解析成日期、時間對象。5.4.3DateTimeFormatter類要使用DateTimeFormatter進行格式化或者解析,就必須先獲得DateTimeFormatter對象。獲取DateTimeFormatter對象有3種方式。(1)方式一使用預定義的靜態(tài)常量創(chuàng)建DateTimeFormatter格式器。在DateTimeFormatter類中包含大量預定義的靜態(tài)常量,如BASIC_ISO_DATE、ISO_LOCAL_DATE等,通過這些靜態(tài)常量都可以獲取DateTimeFormatter實例。5.4.3DateTimeFormatter類(2)方式二使用本地化樣式創(chuàng)建DateTimeFormatter格式器。在FormatStyle類中定義了FULL、LONG、MEDIUM和SHORT四個枚舉值,它們表示不同樣式的日期和時間,這種方式通過ofLocalizedDateTime(FormatStyledateTimeStyle)實現(xiàn)DateTimeFormatter對象的創(chuàng)建。5.4.3DateTimeFormatter類(3)方式三(最為常用)根據(jù)模式字符串創(chuàng)建DateTimeFormatter格式器,這種方式通過ofPattern(Stringpattern)方法實現(xiàn)DateTimeFormatter對象的創(chuàng)建。ofPattern()方法需要接收一個表示日期或時間格式的模板字符串,該模板字符串通過特定的日期標記可以提取對應(yīng)的日期或時間。5.4.3DateTimeFormatter類常用的格式化模板標記如下表所示。格式化選項表示含義y年份,4位數(shù)字,使用yyyy表示。例如“2023”M月份,2位數(shù)字,使用MM表示。例如“11”d日(天數(shù)),2位數(shù)字,使用dd表示。例如“01”H小時(24小時制),2位數(shù)字,使用HH表示。例如“10”m分鐘,2位數(shù)字,使用mm表示。例如“15”s秒,2位數(shù)字,使用ss表示。例如“00”S毫秒,3位數(shù)字,使用SSS表示。例如“776”a上午/下午標記,例如“AM”或“PM”5.4.3DateTimeFormatter類使用DateTimeFormatter將日期、時間格式化為字符串,有兩種方式。(1)調(diào)用DateTimeFormatter的format(TemporalAccessortemporal)方法執(zhí)行格式化,其中參數(shù)temporal是一個TemporalAccessor類型接口,其主要實現(xiàn)類有LocalDate、LocalTime、LocalDateTime。(2)調(diào)用LocalDate、LocalDateTime等日期、時間對象的format(DateTimeFormatterformatter)方法執(zhí)行格式化。若要使用DateTimeFormatter將指定格式的字符串解析成日期、時間對象,可以使用日期時間對象所提供的parse(CharSequencetext,DateTimeFormatterformatter)方法。5.4.3DateTimeFormatter類案例演示下面通過一個案例來演示,如何使用DateTimeFormatter來格式化日期、時間。Example14.java源代碼5.4.3DateTimeFormatter類案例演示案例的運行效果如下圖所示。5.4.4Duration類和Period類熟悉Duration類和Period類,能夠使用Duration類和Period類處理時間差

先定一個小目標!5.4.4Duration類和Period類Duration類和Period類是Java中用于處理時間差的類,它們?yōu)殚_發(fā)人員提供了更方便的時間間隔計算方法。5.4.4Duration類和Period類1.Duration類Duration類用來表示兩個時間對象的時間間隔,可以用于計算兩個時間對象相差的天數(shù)、小時數(shù)、分數(shù)、秒數(shù)、毫秒數(shù)、納秒數(shù)。Duration類常用方法如下表所示。方法聲明功能描述between(TemporalstartInclusive,TemporalendExclusive)獲取一個Duration表示兩個對象之間的持續(xù)時間toDays()計算兩個時間相差的天數(shù)toHours()計算兩個時間相差的小時數(shù)toMinutes()計算兩個時間相差的分鐘數(shù)toSeconds()計算兩個時間相差的秒數(shù)toMillis()計算兩個時間相差的毫秒數(shù)toNanos()計算兩個時間相差的納秒數(shù)5.4.4Duration類和Period類1.Duration類下面通過一個案例演示Duration類中常用方法的使用。Example15.java源代碼5.4.4Duration類和Period類1.Duration類案例的運行結(jié)果如下圖所示。5.4.4Duration類和Period類2.Period類Period主要用于計算兩個日期之間的間隔,可以用來計算兩個日期之間相差的年、月、日。Period類的方法與Duration類的方法在使用上類似,Period類常用的方法如下表所示。方法聲明功能描述between(LocalDatestart,LocalDateend)獲取一個Period表示兩個對象之間的持續(xù)時間getYears()計算兩個日期相差的年數(shù)getMonths()計算兩個日期相差的月數(shù)getDays()計算兩個時間相差的天數(shù)5.4.4Duration類和Period類2.Period類需要注意的是,使用getYears()方法、getMonths()方法和getDays()方法計算年數(shù)、月數(shù)和天數(shù)差時,只計算一個單位的字段值,而非整個Period的不同單位維度的總值。也就是說,計算兩個時間的月份差時,不會包含年份在內(nèi),在計算天數(shù)差時,也不會包含月份和年份在內(nèi)。5.4.4Duration類和Period類2.Period類下面通過一個案例演示Period類常用方法的使用。Example16.java源代碼5.4.4Duration類和Period類2.Period類案例的運行結(jié)果如下圖所示。【案例5-2】日程安排管理案例描述隨著生活節(jié)奏的加快,人們每天都面臨的事務(wù)比較多樣化,有時候可能會忘記一些重要的日程安排,例如會議,采訪等。為了更好地管理和組織日常安排,本案例要求編寫一個日程安排管理程序,具體要求如下。用戶可以多次創(chuàng)建日程,但是最多只能創(chuàng)建20個,創(chuàng)建日程時包括日程的標題、日期和時間。要求日程的時間不能在當前時間之前。創(chuàng)建完成后,程序按照日程時間由近及遠,展示用戶的所有日程信息,包括標題、日期、時間、目前距離這個日程還有多久(格式:x天x小時x分鐘),以及日程的創(chuàng)建時間?!景咐?-2】日程安排管理案例效果System類5.55.5System類熟悉System類,能夠簡述System常用的方法及對應(yīng)的作用

先定一個小目標!5.5System類System類對于大家來說并不陌生,因為在之前的學習中,經(jīng)常用到“System.out.println();”語句輸出結(jié)果,這句代碼中就使用到了System類。System類位于java.lang包中,它定義了一些與系統(tǒng)相關(guān)的屬性和方法,并且這些屬性與方法都是靜態(tài)的,因此,可以直接使用System類來訪問它們。5.5System類System類常用的方法如下表所示。方法名稱功能描述staticvoidexit(intstatus)該方法用于終止當前正在運行的Java虛擬機,其中參數(shù)status表示狀態(tài)碼,若狀態(tài)碼非0,則表示異常終止staticvoidcurrentTimeMillis()返回以毫秒為單位的當前時間staticvoidarraycopy(Objectsrc,intsrcPos,Objectdest,intdestPos,intlength)從src引用的指定源數(shù)組的srcPos位置,復制length個元素,到dest引用的數(shù)組的destPos位置5.5System類1.exit()方法exit()方法用于終止當前正在運行的Java虛擬機,當用戶想要退出程序時,可以使用exit(0)來正常退出。下面通過一個案例演示exit()方法的使用。Example17.java源代碼5.5System類1.exit()方法運行結(jié)果如下圖所示。5.5System類2.currentTimeMillis()方法currentTimeMillis()方法用于以毫秒為單位返回系統(tǒng)的當前時間,返回值的類型是long,該值表示當前時間與1970年1月1日0點0分0秒之間的時間差。下面通過一個案例演示currentTimeMillis()方法的使用,案例要求計算一億次累加操作所用的時間。Example18.java源代碼5.5System類2.currenr()方法案例的運行結(jié)果如下圖所示。5.5System類3.arraycopy()方法arraycopy()方法用于將數(shù)組中的數(shù)據(jù)復制到另一個數(shù)組中,以實現(xiàn)數(shù)組的復制、合并、元素移動等操作。arraycopy()方法的聲明語法格式如下:staticvoidarraycopy(Objectsrc,intsrcPos,Objectdest,intdestPos,intlength){}src:源數(shù)組srcPos:源數(shù)組開始復制的起始位置dest:目標數(shù)組destPos:目標數(shù)組開始接收元素的起始位置length:要復制的元素數(shù)量5.5System類3.arraycopy()方法下面通過一個合并數(shù)組的案例演示arrayCopy()方法的使用。Example19.java源代碼5.5System類3.arraycopy()方法案例的運行結(jié)果如下圖所示。Math類與Random類5.65.6Math類與Random類Math類和Random類是Java提供的與數(shù)學相關(guān)的類,Math類位于java.lang包中,Random類位于java.util包中。本節(jié)將詳細講解Java中的Math類與Random類。5.6.1Math類掌握Math類的使用,能夠使用Math類進行基本的數(shù)學運算

先定一個小目標!5.6.1Math類Math類是一個工具類,其中提供了許多用于進行基本數(shù)值運算的方法,如計算一個數(shù)的平方根、絕對值等。Math類中的方法都是靜態(tài)的,因此可以直接使用類名進行調(diào)用。除了靜態(tài)方法外,Math類中還定義了兩個靜態(tài)常量PI和E,分別代表數(shù)學中的π和e。5.6.1Math類Math類的常用方法如下表所示。方法聲明功能描述abs(doublea)用于計算a的絕對值sqrt(doublea)用于計算a的平方根ceil(doublea)用于計算大于a的最小整數(shù),并將該整數(shù)轉(zhuǎn)化為double型數(shù)據(jù)。例如,Math.ceil(15.2)的值是16.0floor(doublea)用于計算小于a的最大整數(shù),并將該整數(shù)轉(zhuǎn)化為double型數(shù)據(jù)。例如Math.floor(-15.2)的值是-16.0round(doublea)用于計算小數(shù)a進行四舍五入后的int類型的值5.6.1Math類接上頁表格。方法名稱功能描述max(doublea,doubleb)用于返回a和b的較大值min(doublea,doubleb)用于返回a和b的較小值random()用于生成一個[0.0,1.0)的隨機值sin(doublea)返回a的正弦值pow(doublea,doubleb)用于計算a的b次冪,即ab的值5.6.1Math類案例演示下面通過一個案例演示Math類常用方法的使用。Example20.java源代碼5.6.1Math類案例演示案例的運行結(jié)果如下圖所示。5.6.2Random類掌握Random類的使用,能夠使用Random類生成隨機數(shù)

先定一個小目標!5.6.2Random類Random類可以生成指定取值范圍的隨機數(shù)字,它提供了兩個構(gòu)造方法用于創(chuàng)建Random對象,具體如下表所示。方法聲明功能描述Random()使用當前機器時間創(chuàng)建一個Random對象Random(longseed)使用參數(shù)seed指定的種子創(chuàng)建一個Random對象第一個構(gòu)造方法實際上使用時間戳作為種子傳遞給Random對象,所以每次生成的隨機數(shù)每次都不同。第二個構(gòu)造方法指定種子實現(xiàn)了可重現(xiàn)的隨機數(shù)序列,因此可以創(chuàng)建多個相同的隨機數(shù)。5.6.2Random類Random類可以生成指定取值范圍的隨機數(shù)字,它提供了兩個構(gòu)造方法用于創(chuàng)建Random對象,具體如下表所示。方法聲明功能描述Random()使用當前機器時間創(chuàng)建一個Random對象Random(longseed)使用參數(shù)seed指定的種子創(chuàng)建一個Random對象第一個構(gòu)造方法實際上使用時間戳作為種子傳遞給Random對象,所以每次生成的隨機數(shù)每次都不同。第二個構(gòu)造方法指定種子實現(xiàn)了可重現(xiàn)的隨機數(shù)序列,因此可以創(chuàng)建多個相同的隨機數(shù)。5.6.2Random類案例演示Random提供了nextInt()方法用于獲取隨機的整數(shù),下面通過案例演示Random類的兩個構(gòu)造方法創(chuàng)建的Random對象獲取隨機數(shù)的效果。Example21.java源代碼5.6.2Random類案例演示第一次運行文件Example21.java的結(jié)果。第二次運行文件Example21.java的結(jié)果。5.6.2Random類Random類常用的方法:方法聲明功能描述booleannextBoolean()隨機生成boolean類型的隨機數(shù)longnextLong()隨機生成long類型的隨機數(shù)intnextInt()隨機生成int類型的隨機數(shù)intnextInt(intn)隨機生成0~n(包含0但不包含n)之間int類型的隨機數(shù),doublenextDouble()隨機生成0.0~1.0(包含0.0但不包含1.0)之間double類型的隨機數(shù)floatnextFloat()隨機生成0.0~1.0(包含0.0但不包含1.0)之間float類型的隨機數(shù)5.6.2Random類使用nextInt(intn)方法可以指定的范圍為從0開始。如果需要生成非0開始的范圍內(nèi)的隨機整數(shù),例如,生成5~20之間的隨機整數(shù),可以使用如下代碼。intrandomNumber=random.nextInt(15)+5;上述代碼中,nextInt(15)將生成一個0~15之間的整數(shù),然后通過+5操作將范圍調(diào)整為5~20。5.6.2Random類案例演示下面通過一個案例演示Random類中常用方法的使用。Example22.java源代碼5.6.2Random類案例演示案例的運行結(jié)果如下圖所示?!景咐?-3】小明的算術(shù)題卡案例描述某小學為了加強學生的算術(shù)能力,要求每位學生每天做一篇算術(shù)題卡,其中包括50道加減乘除的算術(shù)題。本案例要求為小明隨機出50道100以內(nèi)的加減法算式和20以內(nèi)的乘除法算式,作為今天的算術(shù)題卡,具體要求如下。100以內(nèi)指1~100,包括1和100。20以內(nèi)指1~20,包括1和20。加法算式只要求兩個加數(shù)小于100,結(jié)果可以大于100。減法算式要求結(jié)果為正數(shù)。乘法算式只要求兩個乘數(shù)小于20,結(jié)果可以大于20。除法算式的結(jié)果可以為分數(shù)?!景咐?-3】小明的算術(shù)題卡案例效果Lambda表達式5.75.7Lambda表達式熟悉Lambda表達式,能夠使用Lambda表達式替代匿名內(nèi)部類的編寫

先定一個小目標!5.7Lambda表達式Lambda表達式是JDK8新增的一個特性,Lambda表達式可以以更簡潔的方式替代大部分的匿名內(nèi)部類。通過Lambda表達式,可以直接傳遞方法而不必創(chuàng)建實現(xiàn)類,極大地優(yōu)化了代碼結(jié)構(gòu)。JDK還提供了大量的內(nèi)置函數(shù)式接口,使得Lambda表達式的運用更加方便、高效。5.7Lambda表達式Lambda表達式由參數(shù)列表、箭頭符號->和方法體組成。方法體既可以是一個表達式,也可以是一個語句塊。Lambda表達式的語法格式如下:(參數(shù)列表)->{方法體}->符號:Lambda表達式的主體部分分隔符,左邊是參數(shù)列表,右邊是Lambda的功能實現(xiàn)。Lambda表達式的參數(shù)列表中需要與所實現(xiàn)的接口中的抽象方法保持一致,參數(shù)類型可以省略,并且如果只有一個參數(shù)則可以不使用小括號包裹參數(shù)。如果方法體中只有一條語句則可以省略大括號,如果這條語句是一個返回語句,那么return關(guān)鍵字也可以省略。5.7Lambda表達式案例演示下面通過一個案例學習使用匿名內(nèi)部類和Lambda表達式來計算兩數(shù)之和。Example23.java源代碼5.7Lambda表達式案例演示案例的運行結(jié)果如下圖所示。正則表達式5.85.8正則表達式在程序開發(fā)中,常常需要對郵箱、手機號碼和身份證號碼等字符串做各種限制,例如限制它們的長度和格式。如果使用傳統(tǒng)的條件語句或循環(huán)逐個檢查字符,代碼量會很龐大且難以維護。對此可以使用正則表達式,這是一種用于模式匹配和處理字符串的工具,基于正則表達式可以更高效地處理和匹配文本字符串,并減少代碼復雜度。5.8.1正則表達式的元素掌握正則表達式的元素,能夠簡述正則表達式常用元素的作用

先定一個小目標!5.8.1正則表達式的元素正則表達式是一種使用預先定義的特定字符、字符組合和語法規(guī)則來表達對字符串進行模式匹配和處理的工具,其組成元素可以為字符和特殊字符、量詞、邊界等,基于這些元素可以創(chuàng)建復雜的匹配模式,用于搜索和替換文本數(shù)據(jù)。5.8.1正則表達式的元素1.普通字符和特殊字符普通字符:指那些可以直接匹配的字符,如大小寫的字母、數(shù)字、空格等。例如,“a”和“1”都是普通字符。.(點號):匹配除換行符外的任意單個字符,例如,正則表達式“t.n”匹配“tan”“ten”。^:匹配輸入字符串的開始位置,例如,“^abc”匹配以“abc”開頭的字符串。$:匹配輸入字符串的結(jié)束位置,例如,“abc$”匹配以“abc”結(jié)尾的字符串。+:匹配前面的模式一次或多次,例如,“a+”匹配一個或多個連續(xù)的“a”字符,“ab+”匹配一個“a”字符,后面跟著一次或多次出現(xiàn)的“b”字符。5.8.1正則表達式的元素1.字符和特殊字符*:匹配前面的模式零次或多次,例如,“a*”匹配零個或多個連續(xù)的“a”字符,“ab*”匹配一個“a”字符,后面跟著零個或多個連續(xù)的“b”字符。?:匹配前面的模式零次或一次,例如,“a?”匹配零個或一個“a”字符,“ab?”匹配一個“a”字符,后面跟著零個或一個“b”字符。[]:定義一個字符集合,匹配其中任意一個字符,例如,“[abc]”匹配“a”、“b”或“c”中的任意一個字符。。():用于分組和捕獲匹配的子表達式,例如,“(abc)”將“abc”視為一個整體進行匹配,“(ab)+”匹配一個或多個連續(xù)出現(xiàn)的“ab”。5.8.1正則表達式的元素2.量詞量詞用于指定模式出現(xiàn)的次數(shù),常見的量詞如下。{n}:精確匹配前面的模式出現(xiàn)n次,例如,“a{3}”匹配連續(xù)出現(xiàn)三個“a”的字符串。{n,}:匹配前面的模式至少出現(xiàn)n次,例如,“a{3,}”匹配連續(xù)出現(xiàn)三個或更多個“a”的字符串。{n,m}:匹配前面的模式出現(xiàn)n到m次,例如,“a{2,4}”匹配連續(xù)出現(xiàn)兩個到四個“a”的字符串。5.8.1正則表達式的元素3.邊界邊界用于指定匹配的位置,常見邊界如下。\b:匹配單詞的邊界,單詞邊界是指單詞與其他字符之間的分界點,通常是單詞的開頭或結(jié)束位置,例如,“\bword\b”匹配獨立的單詞

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論