版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
第九章Java輸入/輸出9.1輸入/輸出的基本概念9.2輸入/輸出類層次結(jié)構(gòu)9.3面向字節(jié)的輸入/輸出9.4面向字符輸入/輸出9.5其它輸入/輸出流9.6File類本章小結(jié)
9.1輸入/輸出的基本概念
Java是使用“流(Stream)”的概念來進(jìn)行輸入/輸出的?!傲鳌睂嵸|(zhì)是Java預(yù)定義的對不同情況進(jìn)行輸入/輸出操作的類,“流”對象就是這些類產(chǎn)生的對象,在進(jìn)行輸入/輸出的時候就是由這些類產(chǎn)生的對象來完成相應(yīng)操作的。
9.1.1輸入與輸出
Java的輸入/輸出是指相對于程序而言,程序與外部進(jìn)行的數(shù)據(jù)輸入和輸出的操作。
程序中的輸入與輸出操作很常見,比如從鍵盤上讀取數(shù)據(jù)、從文件讀取數(shù)據(jù)、向文件寫出數(shù)據(jù)等。通過輸入與輸出操作,可以將程序中產(chǎn)生的數(shù)據(jù)輸出到外界,也可以從外界輸入數(shù)據(jù)到程序中,Java語言使用流對象來實現(xiàn)這些輸入/輸出操作,流對象對數(shù)據(jù)的輸入/輸出操作屏蔽了具體的細(xì)節(jié),讓Java程序員更為方便地操縱數(shù)據(jù)流向。
首先要明確輸入/輸出的方向:輸入/輸出一定是相對于程序而言的。
(1)相對于程序而言,數(shù)據(jù)是進(jìn)來的,就稱之為輸入/讀入(input/read)。
(2)相對于程序而言,數(shù)據(jù)是出去的,就稱之為輸出/寫出(output/write)。
如圖9-1所示,避免“讀出”、“寫入”這樣含糊不清的說法。
圖9-1Java相對于程序的輸入/輸出
9.1.2流對象
1.輸入流對象
可以將圖9-1中“程序”左邊的箭頭視為輸入流對象,有能力將數(shù)據(jù)輸入到程序中的對象,就可以視為輸入流對象。輸入流對象對應(yīng)數(shù)據(jù)源端,數(shù)據(jù)要從外部輸入到程序中,就要說明數(shù)據(jù)源端是什么、在哪里,然后該輸入流對象就采用相應(yīng)的輸入方法來將數(shù)據(jù)從數(shù)據(jù)源端輸入到程序。
2.輸出流對象
圖9-1中“程序”右邊的箭頭可以視為輸出流對象,有能力將數(shù)據(jù)輸出到程序外部的對象,就可以視為輸出流對象。輸出流對象對應(yīng)接收端,數(shù)據(jù)要從程序輸出到外部,就要說明接收端是什么、在哪里,然后輸出流對象采用相應(yīng)的輸出方法將數(shù)據(jù)從程序輸出到接收端。
3.緩沖流對象
以文件的輸入/輸出為例,內(nèi)存中的程序要和磁盤中的文件進(jìn)行數(shù)據(jù)輸入/輸出,然而二者速度不匹配,磁盤文件的操作比內(nèi)存的操作慢很多。顯然,在這樣的情況下每次輸入/輸出一個字節(jié)的效率是非常低的。為了提高數(shù)據(jù)的傳輸效率,通常使用緩沖流(BufferedStream)來提高數(shù)據(jù)的輸入/輸出效率。
4.字節(jié)流/字符流
進(jìn)行數(shù)據(jù)的輸入/輸出時,需要確定數(shù)據(jù)輸入/輸出的基本單位是什么。
(1)字節(jié)流:即每次輸入/輸出是按字節(jié)進(jìn)行(1B?=?8bit)的。這種方式是最基本的輸入/輸出方式,能夠?qū)λ袛?shù)據(jù)進(jìn)行輸入/輸出(計算機(jī)中的所有數(shù)據(jù)是以0和1來存儲的)。字節(jié)流又被稱為二進(jìn)制字節(jié)流(binarybytestream)或位流(bitsstream)。
(2)字符流:字符流的基本單位是字符char,是針對字符優(yōu)化了的輸入/輸出。Java的char是采用2個字節(jié)的Unicode編碼,所以字符流一次輸入/輸出2個字節(jié),針對字符類型數(shù)據(jù)進(jìn)行輸入/輸出較為方便且效率高。
9.2輸入/輸出類層次結(jié)構(gòu)
為了便于程序員進(jìn)行輸入/輸出操作,屏蔽輸入/輸出的細(xì)節(jié),Java將相關(guān)輸入/輸出操作封裝在相應(yīng)的類中,這些類放置在java.io包里,如圖9-2所示。
圖9-2Java輸入/輸出類層次圖
在java.io包中有4個基本類,即InputStream、OutputStream及Reader、Writer類,它們分別處理字節(jié)流和字符流,根據(jù)數(shù)據(jù)源端和接收端的不同以及輸入/輸出方式的不同,它們下面還有若干子類。除了這4個基本類,另外還有File類以及隨機(jī)訪問文件類RandomAccessFile等。
9.3面向字節(jié)的輸入/輸出
InputStream和OutputStream類是Java中用來處理以字節(jié)(Byte)為單位的輸入/輸出流的,這兩個類下面還有更為具體的面向字節(jié)的輸入/輸出類,用以處理各種不同的輸入/輸出。還是以文件為例,它們可以處理二進(jìn)制文件(binaryfile)、文本文件、圖片聲音文件等等,所有文件在外部存儲器上都是以位和字節(jié)的方式存儲數(shù)據(jù)的,所以都可以使用面向字節(jié)的輸入/輸出流對各種文件進(jìn)行輸入/輸出(對于文本文件,使用下一節(jié)將介紹的面向字符的輸入/輸出流進(jìn)行操作更為方便)。
我們以文件的輸入/輸出為例進(jìn)行介紹,這也是最常見的輸入/輸出方式。對于文件,按字節(jié)的方式進(jìn)行輸入/輸出,主要將使用下面兩個類:
(1)?FileInputStream:面向字節(jié)的文件輸入流。
(2)?FileOutputStream:面向字節(jié)的文件輸出流。
9.3.1面向字節(jié)的文件輸入流
FileInputStream的主要方法如表9-1所示。
read()方法有以下三個重載形式:
(1)將數(shù)據(jù)源端的1個字節(jié)輸入到程序中。
(2)將數(shù)據(jù)源端的多個字節(jié)輸入到程序中(與數(shù)據(jù)源端字節(jié)多少、程序接收字節(jié)的byte數(shù)組大小有關(guān),一般情況下程序員控制二者相等)。
(3)將數(shù)據(jù)源端中指定的字節(jié)輸入到程序中(指定偏移量和字節(jié)數(shù))。
如何構(gòu)造FileInputStream類的對象呢?主要有兩種方式:
(1)通過String形式的文件路徑-文件名來構(gòu)造FileInputStream類對象。
(2)通過一個File類對象來構(gòu)造FileInputStream類對象(File類后面將詳細(xì)討論)。
程序結(jié)果:
9.3.2面向字節(jié)的文件輸出流
FileOutputStream的主要方法如表9-2所示。
從表9-2可以看出,F(xiàn)ileOutputStream的主要方法是write(),與FileInputStream類似,也是具有三個重載方法:
(1)將單個的字節(jié)寫出到輸出流對應(yīng)的接收端:
write(int
b)
(2)將byte數(shù)組的所有字節(jié)一次性輸出到接收端:
write(byte[]
b)
(3)將byte數(shù)組的指定字節(jié)輸出到接收端:
write(byte[]
b,int
off,int
len)
下面在上述程序的基礎(chǔ)上進(jìn)行下列操作:將d盤javaCode目錄下的a.jpg文件輸入到程序的b數(shù)組中,然后將b數(shù)組中的字節(jié)元素依次輸出到同目錄下的b.jpg文件中,這相當(dāng)于對文件的復(fù)制操作。
9.3.3帶緩沖的字節(jié)輸入/輸出流
對數(shù)據(jù)流的每次操作若都是以字節(jié)為單位進(jìn)行的,每次輸入/輸出一個字節(jié),效率將是非常低的。那么,如何提高輸入/輸出的效率?一個有效的解決方法就是以帶緩沖的方式來進(jìn)行輸入/輸出,將使用下面兩個類來完成:
(1)字節(jié)緩沖輸入流:BufferedInputStream。
(2)字節(jié)緩沖輸出流:BufferedOutputStream。
具體是先產(chǎn)生一個面向字節(jié)的文件輸入/輸出流對象,然后將該對象作為緩沖流構(gòu)造函數(shù)的參數(shù),從而“包裝”成一個緩沖流對象,使用該緩沖流對象進(jìn)行read和write操作就具有緩沖的方式,如圖9-3所示。
圖9-3“包裝”緩沖輸入/輸出對象
對文件按字節(jié)進(jìn)行輸入/輸出有以下幾種方式:
(1)采用循環(huán)一個一個字節(jié)地輸入/輸出。
(2)對(1)加緩沖輸入/輸出方式。
(3)使用byte數(shù)組作為參數(shù),一次性輸入/輸出多個字節(jié)。
(4)對(3)加緩沖輸入/輸出方式。
程序結(jié)果:
程序結(jié)果:
程序結(jié)果
程序結(jié)果:
9.3.4格式化輸入/輸出流
進(jìn)行輸入/輸出的主要是兩種單位,即字節(jié)、字符,但有時會希望一次輸入/輸出一個int整數(shù)數(shù)據(jù)(4字節(jié)),或者一個double數(shù)據(jù)(8字節(jié))等基本類型數(shù)據(jù),這種情況就可以使用下面兩個類來完成:
(1)格式化字節(jié)輸入流:DataInputStream。
(2)格式化字節(jié)輸出流:DataOutputStream。
如圖9-4所示,還是使用“包裝”的方式。圖9-4“包裝”格式化輸入/輸出對象
如圖9-4所示,先產(chǎn)生基本的輸入/輸出對象fin和fout,然后進(jìn)行“包裝”,產(chǎn)生格式化輸入/輸出流對象din和dout;使用din和dout對象就具有新的輸入/輸出方法,能夠按照各種基本數(shù)據(jù)類型進(jìn)行輸入/輸出,這就是格式化輸入/輸出。
下面先使用格式化字節(jié)輸出流輸出幾個基本數(shù)據(jù)到a.bat文件中,然后使用格式化字節(jié)輸入流來讀取這些基本數(shù)據(jù)。
(1)格式化字節(jié)輸出流:DataOutputStream。該類除了具有一般的write()方法重載之外,新增了專門對Java的基本類型數(shù)據(jù)以及字符串進(jìn)行輸出的方法:
程序結(jié)果:
使用記事本打開a.bat,可以看到下面的結(jié)果:
(2)格式化字節(jié)輸入流:DataInputStream。該類除了具有一般的read()方法重載之外,新增了專門對于Java基本數(shù)據(jù)類型進(jìn)行輸入的方法:
程序結(jié)果:
9.4面向字符輸入/輸出
9.4.1面向字符的文件輸入流面向字符的文件輸入流類為FileReader,其父類為InputStreamReader,InputStreamReader的父類是Reader。FileReader類主要的方法如表9-3所示。
程序結(jié)果:
9.4.2面向字符的文件緩沖輸入流
將一個磁盤文件生成一個面向字符的文件輸入流FileReader對象,然后將該對象“包裝”成帶緩沖方式的輸入流BufferedReader對象br,如圖9-5所示。圖9-5“包裝”緩沖輸入對象
程序結(jié)果
9.4.3面向字符的文件輸出流
面向字符的文件輸出流類為FileWriter,其父類為OutputStreamReader,而OutputStreamReader的父類是Writer,其主要的方法如表9-4所示。
程序結(jié)果:
9.4.4面向字符的文件緩沖輸出流
面向字符的文件輸出緩沖流類為BufferedWriter,其父類為java.io.Writer;該類除了具有緩沖輸出方式之外還多了一個newLine()方法,該方法使用平臺自己的行分隔符概念進(jìn)行換行;此概念由系統(tǒng)屬性line.separator定義,并非所有平臺都使用換行符('\n')來終止各行,因此調(diào)用此方法來終止每個輸出行要優(yōu)于直接寫入換行符。
BufferedWriter類的使用方法,同樣是先產(chǎn)生一個FileWriter對象fout,然后將該對象“包裝”成為BufferedWriter對象bout,使用bout進(jìn)行面向字符的文件輸出操作就具有了緩沖方式,并且bout可以使用newLine()方法寫出一個換行到文件中。
程序結(jié)果:
9.5其它輸入/輸出流
9.5.1對象輸入/輸出流將Java程序中的一個對象寫出到外部文件的操作稱為對象序列化(objectserialize);同樣,也可以從該文件中將對象恢復(fù)到程序中,這就實現(xiàn)了將程序中的對象保存到磁盤文件中,獨立于程序存在。一個類的對象要能被序列化,該類在定義的時候要實現(xiàn)java.io.Serializable接口;該接口只是一個標(biāo)記接口,實現(xiàn)該接口無需實現(xiàn)任何方法,它只是表明該類的實例是可序列化的,滿足對象序列化的語法要求。
通過對象序列化操作,將程序中的某個對象保存到外部文件中,再將文件傳送到遠(yuǎn)端的程序,然后由遠(yuǎn)端的程序?qū)⑽募械膶ο蠡謴?fù)到程序中,這也是Java分布式計算/處理的重要技術(shù)之一。
程序結(jié)果:
9.5.2數(shù)組/字符串輸入/輸出流
如果輸入/輸出的數(shù)據(jù)源端、數(shù)據(jù)接收端為字節(jié)數(shù)組、字符數(shù)組或者字符串,如圖9-6所示,可以使用下面的類來完成輸入/輸出操作:
(1)字節(jié)數(shù)組:ByteArrayInputStream、ByteArrayOutputStream。
(2)字符數(shù)組:CharArrayReader、CharArrayWriter。
(3)字符串:StringReader、StringWriter。
圖9-6輸入/輸出端為數(shù)組、字符串情況
前面說過輸入/輸出是相對于程序的,但是如果數(shù)據(jù)源或者接收端是程序中的數(shù)組或者字符串,進(jìn)行數(shù)據(jù)傳輸時輸入/輸出是相互相對的,例如數(shù)組a要將數(shù)據(jù)傳輸?shù)綌?shù)組b中,可以有下列兩種方式:
(1)相對于數(shù)組b,可以將數(shù)組a作為數(shù)據(jù)源端,生成輸入流對象,將a中的數(shù)據(jù)輸入到b中。
(2)相對于數(shù)組a,可以將數(shù)組b作為數(shù)據(jù)接收端,生成輸出流對象,將a中數(shù)據(jù)輸出到b中。
9.5.3順序輸入流
SequenceInputStream類是面向字節(jié)順序輸入流類,其父類為InputStream,用以將多個輸入流按順序連接在一起,沒有對應(yīng)的輸出流。當(dāng)將多個輸入流連接成為單一的輸入流時,就可以按順序進(jìn)行輸入操作,將其中的一個輸入流數(shù)據(jù)輸入完畢,即可開始下一個輸入流數(shù)據(jù)的輸入,直到所有的輸入流輸入完畢為止。
SequenceInputStream類的構(gòu)造函數(shù)主要有兩個:
(1)?publicSequenceInputStream(InputStreams1,InputStreams2):將兩個InputStream輸入流合并為一個SequenceInputStream輸入流對象。
(2)?publicSequenceInputStream(Enumeration<?extendsInputStream>
e):將多個InputStream構(gòu)成的枚舉對象合并成為一個SequenceInputStream輸入流對象。
程序結(jié)果
9.6File類
9.6.1File對象可以將外部存儲器中的文件、文件夾生成File類對象,只需要提供文件或者文件夾的具體路徑和名字即可,如將d盤下javaCode目錄下的FileDemo1.java文件生成File類對象f1、f2,下列這兩種方式都是正確的:
從上面四句程序的字面上看不出File對象里面是文件還是文件夾。從習(xí)慣上來說,文件一般帶后綴名,用以區(qū)分文件類型;文件夾不帶后綴名,用以保存文件或子文件夾。但這只是習(xí)慣,也可以對文件夾起后綴名,而文件沒有后綴名,如圖9-7所示,F(xiàn)ileDemo.java實際是個文件夾,javaCode實際是個Java源文件。所以上面程序中,對于f1~f4對象而言,只能采用File類相應(yīng)方法才能判斷出它們對應(yīng)的是文件還是文件夾。
圖9-7文件和文件夾名
另外,也可以使用下列方式生成File類對象:
其中,第一個參數(shù)是盤符-路徑名,第二個參數(shù)是文件名/文件夾名,表示將指定盤符路徑名下的文件/文件夾生成File類對象。
9.6.2對文件進(jìn)行操作
對一個文件生成一個File類對象,就能夠?qū)υ撐募M(jìn)行各種操作,主要是獲取文件的信息、創(chuàng)建、刪除以及設(shè)置文件的屬性等。
程序結(jié)果:
9.6.3對文件夾進(jìn)行操作
File類對象還可以對文件夾進(jìn)行各種操作,主要是獲取文件夾信息、創(chuàng)建文件夾和設(shè)置文件夾屬性等。
程序結(jié)果:
本章小結(jié)
1.?Java的輸入/輸出是相對于程序的。相對于程序,數(shù)據(jù)進(jìn)來的就是輸入(input,read);相對于程序,數(shù)據(jù)出去的就是輸出(output,write)。2.?輸入流對象,對應(yīng)數(shù)據(jù)源端,有能力將數(shù)據(jù)源端的數(shù)據(jù)輸入到程序中的對象。3.?輸出流對象,對應(yīng)數(shù)據(jù)接收端,有能力將程序中的數(shù)據(jù)輸出到接收端的對象。
4.?Java按照輸入/輸出的數(shù)據(jù)單位主要分為面向字節(jié)和面向字符兩種,它們的主要父類為InputStream/OutputStream和Reader/Writer。
5.?由于Java面向的數(shù)據(jù)源和數(shù)據(jù)接收端的多樣性,以及輸入/輸出的多種方式,所以Java的輸入/輸出類比較多,應(yīng)重點掌握面向字節(jié)和字符的文件輸入/輸出方式。
6.?創(chuàng)建了基本的輸入/輸出流對象,然后使用緩沖方式進(jìn)行包裝,讓輸入/輸出具有緩沖方式,提高輸入/輸出效率。
7.?使用格式化輸出流對象從程序中將各個基本類型數(shù)據(jù)輸出到外部文件,想要從文件還原這些基本類型數(shù)據(jù),就要使用格式化輸入流對象按照原來輸出格式的順序讀取這些基本類型數(shù)據(jù)。
8.?采用輸入/輸出流對象能夠?qū)⒊绦蛑械膶ο筝敵龅轿募?,持久化程序中生成的對象,然后采用輸入流對象能讀取保存在文件中的對象。
9.?File類不僅能對文件操作,還可以對文件夾操作,獲取文件/文件夾的信息,還可以對文件/文件夾進(jìn)行各種處理。第十章Java常用類介紹10.1基本數(shù)據(jù)包裝類10.2System類10.3Random類10.4日期時間類本章小結(jié)
10.1基本數(shù)據(jù)包裝類
1.包裝類
Java語言源于C語言,因此Java中也保存了類似C語言的基本數(shù)據(jù)類型,共有八種,即byte、short、int、long、char、boolean、float、double。正是這些基本數(shù)據(jù)類型,使得Java不是一個單純的面向?qū)ο笳Z言,因為這些基本數(shù)據(jù)類型定義的是基本數(shù)據(jù)類型變量,而并不是對象。
如果要讓這些基本數(shù)據(jù)也能像對象一樣進(jìn)行方法調(diào)用等面向?qū)ο蟮木幊谭绞?,就需要將這些基本數(shù)據(jù)類型轉(zhuǎn)換為對應(yīng)的類。Java定義了包裝類(WrapperClasses)與這八種基本數(shù)據(jù)類型對應(yīng),它們都位于java.lang包中。這些包裝類中可以保存對應(yīng)的基本數(shù)據(jù)類型的數(shù)據(jù),并可以完成相應(yīng)的操作,如表10-1所示。
2.裝箱與拆箱
(1)裝箱:將基本類型數(shù)據(jù)轉(zhuǎn)換為包裝器類型對象。
(2)拆箱:將包裝器類型對象轉(zhuǎn)換為基本類型數(shù)據(jù)。
3.包裝類的應(yīng)用
Java設(shè)計的這些包裝類中有很多實用的方法,以方便對這些基本數(shù)據(jù)進(jìn)行各種處理。下面以Integer為例進(jìn)行介紹,其它包裝類請讀者自行查詢幫助文檔使用。
程序結(jié)果:
程序分析:
(1)如果沒有Integer包裝類,解決這個問題就要像在C語言中一樣使用面向過程的分支、循環(huán)等語句來完成,需要判斷輸入的整數(shù)是正數(shù)還是負(fù)數(shù),然后遍歷字符串,取出每個字符轉(zhuǎn)換為整數(shù),最后按一定算法拼接成為對應(yīng)的整數(shù)。
(2)有了Integer這個類,只需要調(diào)用Integer類的靜態(tài)方法parseInt即可完成,而且對于正數(shù)、負(fù)數(shù)以及非整數(shù)情況都能處理,對于不是整數(shù)情況的將拋出異常。
(3)反之,將一個整數(shù)轉(zhuǎn)變?yōu)閷?yīng)的整數(shù)字符串形式,同樣也可以使用Integer的toString方法來完成:
intm=134;
Strings=Integer.toString(m);
(4)類似的其它包裝類也有這樣的操作,如parseByte(Stringstr)、parseShort(Stringstr)、parseLong(Stringstr)、parseFloat(Stringstr)、parseDouble(Stringstr)等,將字符串形式的數(shù)據(jù)轉(zhuǎn)換為對應(yīng)的基本類型數(shù)據(jù)即可。
10.2System類
1.System的屬性(1)?publicstaticfinalInputStreamin:標(biāo)準(zhǔn)輸入設(shè)備(鍵盤)。(2)?publicstaticfinalInputStreamout:標(biāo)準(zhǔn)輸出設(shè)備(顯示器)。(3)?publicstaticfinalInputStreamerr:標(biāo)準(zhǔn)錯誤輸出流。
2.System的常用方法
(1)?publicstaticvoidexit(intstatus):系統(tǒng)退出,如果status為0就表示退出。
(2)?publicstaticvoidgc():運行垃圾收集機(jī)制,調(diào)用Runtime類中的gc方法。
(3)?publicstaticlongcurrentTimeMillis():返回以毫秒為單位的當(dāng)前時間。
(4)?publicstaticlongnanoTime():返回最準(zhǔn)確的可用系統(tǒng)計時器的當(dāng)前值。
(5)?publicstaticvoidarraycopy(Objectsrc,intsrcPos,Objectdest,intdesPos,intlength):數(shù)組拷貝操作。
(6)?publicstaticPropertiesgetProperties():取得當(dāng)前系統(tǒng)的全部屬性。
(7)?publicstaticStringgetProperty(Stringkey):根據(jù)鍵值取得屬性的具體內(nèi)容。
3.System類的使用
程序結(jié)果
程序結(jié)果:
10.3Random類1.Random構(gòu)造函數(shù)JavaAPI中提供了兩個構(gòu)造方法來創(chuàng)建一個Random對象:(1)?Random():無參構(gòu)造函數(shù)。(2)?Random(longseed):使用long類型參數(shù)作為種子的構(gòu)造函數(shù)。無參構(gòu)造函數(shù)底層也是調(diào)用了有參構(gòu)造函數(shù),將System.nanoTime()作為參數(shù)傳遞,即如果使用無參構(gòu)造,默認(rèn)的seed值為System.nanoTime(),使用種子產(chǎn)生的偽隨機(jī)數(shù)隨機(jī)性更好。
2.Random的主要方法
(1)?boolean
nextBoolean(): 返回下一個偽隨機(jī)數(shù),它是取自此隨機(jī)數(shù)生成器序列的均勻分布的boolean值。
(2)?void
nextBytes(byte[]bytes):生成隨機(jī)字節(jié)并將其置于用戶提供的byte數(shù)組中。
(3)?double
nextDouble():返回下一個偽隨機(jī)數(shù),它是取自此隨機(jī)數(shù)生成器序列的、在0.0和1.0之間均勻分布的double值。
(4)?double
nextGaussian():返回下一個偽隨機(jī)數(shù),它是取自此隨機(jī)數(shù)生成器序列的、呈高斯正態(tài)分布的double值,其平均值是0.0,標(biāo)準(zhǔn)差是1.0。
(5)?int
nextInt():返回下一個偽隨機(jī)數(shù),它是此隨機(jī)數(shù)生成器的序列中均勻分布的int值。
(6)?int
nextInt(intn):返回一個偽隨機(jī)數(shù),它是取自此隨機(jī)數(shù)生成器序列的[0,n-1]之間均勻分布的int值。
(7)?void
setSeed(longseed):使用單個long種子設(shè)置此隨機(jī)數(shù)生成器的種子。
3.Random的使用
一般在程序中產(chǎn)生的隨機(jī)數(shù)主要有兩種,一種是一個小數(shù)區(qū)段的偽隨機(jī)數(shù);另外一種是一個整數(shù)區(qū)段的偽隨機(jī)數(shù)。
下面首先創(chuàng)建Random的對象ra(Randomra=newRandom();),然后通過ra調(diào)用相應(yīng)的對象方法來創(chuàng)建偽隨機(jī)數(shù),例如:
(1)生成[0,10)區(qū)間的整數(shù):
intn2=ra.nextInt(10); (左閉右開)
(2)生成[n,m]區(qū)間的整數(shù):
ra.nextInt(n-m+1)+m
(3)生成[10,50]區(qū)間的整數(shù):
ra.nextInt(41)+10
(4)生成-231到231-1之間的整數(shù):
intn=ra.nextInt();
(5)生成[0,1.0)區(qū)間的小數(shù):
doubled1=ra.nextDouble();
(6)生成[0,5.0)區(qū)間的小數(shù):
oubled2=ra.nextDouble()*5;
(7)生成[1,2.5)區(qū)間的小數(shù):
doubled3=ra.nextDouble()*1.5+1;
程序結(jié)果:
10.4日?期?時?間?類
Java對于日期和時間進(jìn)行處理的類主要有:古老的Date類、處理年月日的日歷類Calendar和格式化日期對象SimpleDateFormat類。
10.4.1Date類
Date(java.util.Date)類從jdk1.0就開始被設(shè)計出來,Java早期的版本中有關(guān)日期和時間的操作幾乎都是由Date類完成的,有很多對于時間日期的獲取/設(shè)置方法,現(xiàn)在這些方法大多不再使用,被Calendar中的方法所替代了。
Date中封裝了一個long類型的成員變量“privatetransientlongfastTime;”,這個變量是整個時間日期操作的對象。我們使用該變量代表時間和日期,整數(shù)值代表的是距離格林尼治標(biāo)準(zhǔn)時間(1970年1月1日0時0分0秒)所經(jīng)過的毫秒數(shù),也就是說fastTime值為1000的時候代表時間為1970年1月1日0時0分1秒。
10.4.2Calendar類
Calendar(java.util.Calendar)是處理日期時間的核心類。該類中封裝了很多靜態(tài)常量字段(field),這些日歷字段分別用來表示日期時間屬性,例如YEAR表示年份,MONTH表示月份,WEEK代表星期幾,HOUR表示小時等,并且具有相應(yīng)的獲取/設(shè)置這些屬性的方法。(注:月份和星期幾都是從0開始計數(shù)的,0代表1月、星期一。)
Calendar是抽象類,所以不能使用new方式來創(chuàng)建Calendar的對象,而是要使用類方法getInstance()來獲取該類的對象,如“CalendarrightNow=Calendar.getInstance();”,對象rightNow中的日歷字段由執(zhí)行該語句時的當(dāng)前日期和時間進(jìn)行初始化。日期時間的操作方法主要有兩類,一是獲取日期時間的日歷字段值,如年月日時分秒等;二是設(shè)置各個日歷字段的值。
程序結(jié)果:
程序結(jié)果:
10.4.3SimpleDateFormat類
SimpleDateForm
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 《固體廢物處理與處置》大學(xué)筆記
- 2023高考英語語法填空熱點話題分類訓(xùn)練:個人情況
- 濟(jì)南2024年10版小學(xué)英語第5單元測驗卷
- 2025新譯林版英語七年級下Unit 8 Wonderland單詞表
- 強(qiáng)社會救助體系建設(shè)的調(diào)研
- 消防突發(fā)狀況的應(yīng)急預(yù)案(3篇)
- 運輸合同(水陸聯(lián)運)(35篇)
- 試用期轉(zhuǎn)正總結(jié)(33篇)
- 致客戶慰問信
- 集團(tuán)2024年工作計劃6篇
- 2024年四川省達(dá)州市中考英語試題含解析
- DL-T 5190.1-2022 電力建設(shè)施工技術(shù)規(guī)范 第1部分:土建結(jié)構(gòu)工程(附條文說明)
- 廈門島生活垃圾處置現(xiàn)狀與未來工作展望
- 完整版用PLCs7-200實現(xiàn)接觸器互鎖的電動機(jī)正反轉(zhuǎn)控制電路的編程安裝與接線文檔良心出品
- 《我運動、我參與、我快樂、我健康》主題班會課件.ppt
- 醫(yī)療學(xué)術(shù)會議工作人員分工明細(xì)表
- 事業(yè)單位出納工作常見問題及對策
- 陰道鏡培訓(xùn)(課堂PPT)
- 《爬山虎的腳》教學(xué)課件
- 人教版英語選擇性必修第四冊UNIT 4 Sharing中英文對照
- 內(nèi)分泌疾病內(nèi)分泌疾病診療規(guī)范
評論
0/150
提交評論