《跨平臺(tái)程序設(shè)計(jì)語言》課件-第6章 Java常用類及接口_第1頁
《跨平臺(tái)程序設(shè)計(jì)語言》課件-第6章 Java常用類及接口_第2頁
《跨平臺(tái)程序設(shè)計(jì)語言》課件-第6章 Java常用類及接口_第3頁
《跨平臺(tái)程序設(shè)計(jì)語言》課件-第6章 Java常用類及接口_第4頁
《跨平臺(tái)程序設(shè)計(jì)語言》課件-第6章 Java常用類及接口_第5頁
已閱讀5頁,還剩54頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1.System類介紹第6章Java常用類及接口System類:System類介紹System類位于java.lang包,代表當(dāng)前Java程序的運(yùn)行平臺(tái),系統(tǒng)級(jí)的很多屬性和控制方法都放置在該類的內(nèi)部。由于該類的構(gòu)造方法是private的,所以無法創(chuàng)建該類的對(duì)象,也就是無法實(shí)例化該類。System類提供了一些類變量和類方法,允許直接通過System類來調(diào)用這些類變量和類方法。System類的成員變量System.out.println(data);System類有3個(gè)靜態(tài)成員變量,分別是PrintStreamout、InputStreamin和PrintStreamerr。PrintStreamout:標(biāo)準(zhǔn)輸出流。此流已打開并準(zhǔn)備接收輸出數(shù)據(jù)。通常,此流對(duì)應(yīng)于顯示器輸出或者由主機(jī)環(huán)境或用戶指定的另一個(gè)輸出目標(biāo)。例如,編寫一行輸出數(shù)據(jù)的典型方式是:其中,println方法是屬于流類PrintStream的方法,而不是System中的方法。System類的成員變量System類有3個(gè)靜態(tài)成員變量,分別是PrintStreamout、InputStreamin和PrintStreamerr。InputStreamin:標(biāo)準(zhǔn)輸入流。此流已打開并準(zhǔn)備提供輸入數(shù)據(jù)。通常,此流對(duì)應(yīng)于鍵盤輸入或者由主機(jī)環(huán)境或用戶指定的另一個(gè)輸入源。PrintStreamerr:標(biāo)準(zhǔn)的錯(cuò)誤輸出流。其語法與System.out類似,不需要提供參數(shù)就可輸出錯(cuò)誤信息。也可以用來輸出用戶指定的其他信息,包括變量的值。System類的成員變量示例:編寫一個(gè)Java程序,使用本節(jié)介紹的System類實(shí)現(xiàn)從鍵盤輸入字符并顯示出來。具體實(shí)現(xiàn)代碼如下:以上代碼中,System.in.read()語句讀入一個(gè)字符,read()方法是InputStream類擁有的方法。變量c必須用int類型而不能用char類型,否則會(huì)因?yàn)閬G失精度而導(dǎo)致編譯失敗。System類的成員方法arraycopy()方法:該方法的作用是數(shù)組復(fù)制,即從指定源數(shù)組中復(fù)制一個(gè)數(shù)組,復(fù)制從指定的位置開始,到目標(biāo)數(shù)組的指定位置結(jié)束。該方法的具體定義如下:其中,src表示源數(shù)組,srcPos表示從源數(shù)組中復(fù)制的起始位置,dest表示目標(biāo)數(shù)組,destPos表示要復(fù)制到的目標(biāo)數(shù)組的起始位置,length表示復(fù)制的個(gè)數(shù)。publicstaticvoidarraycopy(Objectsrc,intsrcPos,Objectdest,intdestPos,intlength)System類中提供了一些系統(tǒng)級(jí)的操作方法,常用的方法有arraycopy()、currentTimeMillis()、exit()、gc()和getProperty()。System類的成員方法下面的示例代碼演示了arraycopy()方法的使用:如左側(cè)代碼,將數(shù)組srcArray中,從下標(biāo)1開始的數(shù)據(jù)復(fù)制到數(shù)組destArray從下標(biāo)1開始的位置,總共復(fù)制兩個(gè)。也就是將srcArray[1]復(fù)制給destArray[1],將srcArray[2]復(fù)制給destArray[2]。這樣經(jīng)過復(fù)制之后,數(shù)組srcArray中的元素不發(fā)生變化,而數(shù)組destArray中的元素將變?yōu)镋、B、C、H,下面為輸出結(jié)果:源數(shù)組:A

B

C

D目標(biāo)數(shù)組:E

B

C

HpublicclassSystem_arrayCopy{publicstaticvoidmain(String[]args){char[]srcArray={'A','B','C','D'};char[]destArray={'E','F','G','H'};System.arraycopy(srcArray,1,destArray,1,2);System.out.print("源數(shù)組:");for(inti=0;i<srcArray.length;i++){System.out.print(“\t”+srcArray[i]);}System.out.print("\n目標(biāo)數(shù)組:");for(intj=0;j<destArray.length;j++){System.out.print(“\t”+destArray[j]);}}}System類的成員方法currentTimeMillis()方法:該方法的作用是返回當(dāng)前的計(jì)算機(jī)時(shí)間,時(shí)間的格式為當(dāng)前計(jì)算機(jī)時(shí)間與GMT時(shí)間(格林尼治時(shí)間)1970年1月1日0時(shí)0分0秒所差的毫秒數(shù)。一般用它來測(cè)試程序的執(zhí)行時(shí)間。例如:上述語句將獲得一個(gè)長(zhǎng)整型的數(shù)字,該數(shù)字就是以差值表達(dá)的當(dāng)前時(shí)間。longm=System.currentTimeMillis();System類中提供了一些系統(tǒng)級(jí)的操作方法,常用的方法有arraycopy()、currentTimeMillis()、exit()、gc()和getProperty()。System類的成員方法使用currentTimeMillis()方法來顯示時(shí)間不夠直觀,但是可以很方便地進(jìn)行時(shí)間計(jì)算。例如,計(jì)算程序運(yùn)行需要的時(shí)間就可以使用如下的代碼:左側(cè)代碼中的變量time的值表示代碼中for循環(huán)執(zhí)行所需要的毫秒數(shù),使用這種方法可以測(cè)試不同算法的程序的執(zhí)行效率高低,也可以用于后期線程控制時(shí)的精確延時(shí)實(shí)現(xiàn)。publicclassSystem_currentTimeMillis{publicstaticvoidmain(String[]args){longstart=System.currentTimeMillis();for(inti=0;i<100000000;i++){inttemp=0;}longend=System.currentTimeMillis();longtime=end-start;System.out.println("程序執(zhí)行時(shí)間"+time+"秒");}}System類的成員方法exit()方法:該方法的作用是終止當(dāng)前正在運(yùn)行的Java虛擬機(jī),具體的定義格式如下:其中,status的值為0時(shí)表示正常退出,非零時(shí)表示異常退出。使用該方法可以在圖形界面編程中實(shí)現(xiàn)程序的退出功能等。publicstaticvoidexit(intstatus)System類中提供了一些系統(tǒng)級(jí)的操作方法,常用的方法有arraycopy()、currentTimeMillis()、exit()、gc()和getProperty()。System類的成員方法gc()方法:該方法的作用是請(qǐng)求系統(tǒng)進(jìn)行垃圾回收,完成內(nèi)存中的垃圾清除。至于系統(tǒng)是否立刻回收,取決于系統(tǒng)中垃圾回收算法的實(shí)現(xiàn)以及系統(tǒng)執(zhí)行時(shí)的情況。定義如下:publicstaticvoidgc()System類中提供了一些系統(tǒng)級(jí)的操作方法,常用的方法有arraycopy()、currentTimeMillis()、exit()、gc()和getProperty()。System類的成員方法getProperty()方法:該方法的作用是獲得系統(tǒng)中屬性名為key的屬性對(duì)應(yīng)的值,具體的定義如下:系統(tǒng)中常見的屬性名以及屬性的說明如下表所示。publicstaticStringgetProperty(Stringkey)System類中提供了一些系統(tǒng)級(jí)的操作方法,常用的方法有arraycopy()、currentTimeMillis()、exit()、gc()和getProperty()。屬性名屬性說明java.versionJava運(yùn)行時(shí)環(huán)境版本java.homeJava安裝目錄操作系統(tǒng)的名稱os.version操作系統(tǒng)的版本用戶的賬戶名稱user.home用戶的主目錄user.dir用戶的當(dāng)前工作目錄System類的成員方法下面的示例演示了getProperty()方法的使用:運(yùn)行該程序,輸出的結(jié)果如下:Java運(yùn)行時(shí)環(huán)境版本:1.8.0_371當(dāng)前操作系統(tǒng)是:Windows10當(dāng)前用戶是:Administrator提示:使用getProperty()方法可以獲得很多系統(tǒng)級(jí)的參數(shù)以及對(duì)應(yīng)的值,這里不再一一舉例。publicclassSystem_getProperty{publicstaticvoidmain(String[]args){Stringjversion=System.getProperty("java.version");StringoName=System.getProperty("");Stringuser=System.getProperty("");System.out.println("Java運(yùn)行時(shí)環(huán)境版本:"+jversion);System.out.println("當(dāng)前操作系統(tǒng)是:"+oName);System.out.println("當(dāng)前用戶是:"+user);}}2.Object類介紹第6章Java常用類及接口Object類介紹Object類:Object是Java類庫中的一個(gè)特殊類,也是所有類的父類。也就是說,Java允許把任何類型的對(duì)象賦給Object類型的變量。當(dāng)一個(gè)類被定義后,如果沒有指定繼承的父類,那么默認(rèn)父類就是Object類。因此,以下兩個(gè)類表示的含義是一樣的。等價(jià)于publicclassMyClass{…}publicclassMyClassextendsObject{…}Object類介紹由于Java所有的類都是Object類的子類,所以任何Java對(duì)象都可以調(diào)用Object類的方法。常見的方法如下表所示。其中,toString()、equals()方法和getClass()方法在Java程序中比較常用。方法說明Objectclone()創(chuàng)建與該對(duì)象的類相同的新對(duì)象booleanequals(Object)比較兩對(duì)象是否相等voidfinalize()當(dāng)垃圾回收器確定不存在對(duì)該對(duì)象的更多引用時(shí),對(duì)象垃圾回收器調(diào)用該方法ClassgetClass()返回一個(gè)對(duì)象運(yùn)行時(shí)的實(shí)例類inthashCode()返回該對(duì)象的散列碼值voidnotify()激活等待在該對(duì)象的監(jiān)視器上的一個(gè)線程voidnotifyAll()激活等待在該對(duì)象的監(jiān)視器上的全部線程StringtoString()返回該對(duì)象的字符串表示voidwait()在其他線程調(diào)用此對(duì)象的notify()

方法或notifyAll()

方法前,導(dǎo)致當(dāng)前線程等待Object

類的成員方法toString()方法:toString()方法返回該對(duì)象的字符串,當(dāng)程序輸出一個(gè)對(duì)象或者把某個(gè)對(duì)象和字符串進(jìn)行連接運(yùn)算時(shí),系統(tǒng)會(huì)自動(dòng)調(diào)用該對(duì)象的toString()方法返回該對(duì)象的字符串表示。Object類的toString()方法返回“運(yùn)行時(shí)類名@十六進(jìn)制哈希碼”格式的字符串,但很多類都重寫了Object類的toString()方法,用于返回可以表述該對(duì)象信息的字符串。例如:System.out.println(newDemo());對(duì)象輸出時(shí)一定會(huì)調(diào)用Object類中的toString()方法打印內(nèi)容。所以利用此特性就可以通過

重寫toString()取得一些對(duì)象的信息。Demo@15db9742Object

類的成員方法equals()方法:在前面學(xué)習(xí)字符串比較時(shí),曾經(jīng)介紹過兩種比較方法,分別是==運(yùn)算符和equals()方法,==運(yùn)算符是比較兩個(gè)引用變量是否指向同一個(gè)實(shí)例,equals()方法是比較兩個(gè)對(duì)象的內(nèi)容是否相等,通常字符串的比較只是關(guān)心內(nèi)容是否相等。其使用格式如下:其中,obj表示要進(jìn)行比較的一個(gè)對(duì)象,o表示另一個(gè)對(duì)象。booleanresult=obj.equals(Objecto);System類的成員方法示例:編寫一個(gè)Java程序,實(shí)現(xiàn)用戶登錄的驗(yàn)證功能。要求用戶從鍵盤輸入登錄用戶名和密碼,當(dāng)用戶輸入的用戶名等于admin并且密碼也等于admin時(shí),則表示該用戶為合法用戶,提示登錄成功,否則提示用戶名或者密碼錯(cuò)誤信息。在這里使用equals()方法將用戶輸入的字符串與保存admin的字符串對(duì)象進(jìn)行比較。System類的成員方法//驗(yàn)證用戶名和密碼publicstaticbooleanvalidateLogin(Stringuname,Stringupwd){if(uname.equals("admin")&&upwd.equals("admin")){//比較兩個(gè)String對(duì)象

returntrue;}else{

returnfalse;}}publicstaticvoidmain(String[]args){Scannerinput=newScanner(System.in);System.out.println("用戶名:");Stringusername=input.next();//獲取用戶輸入的用戶名System.out.println("密碼:");Stringpwd=input.next();//獲取用戶輸入的密碼booleancon=validateLogin(username,pwd);if(con)

System.out.println("登錄成功!");else

System.out.println("用戶名或密碼有誤!");}具體的代碼如下:System類的成員方法上述代碼在validateLogin()方法中又使用equals()方法將兩個(gè)String類型的對(duì)象進(jìn)行了比較,當(dāng)uname對(duì)象與保存admin的String對(duì)象相同時(shí),uname.equals("admin")為true;與此相同,當(dāng)upwd對(duì)象與保存admin的String對(duì)象相同時(shí),upwd.equals("admin")為true。當(dāng)用戶輸入的用戶名和密碼都為admin時(shí),表示該用戶為合法用戶,提示登錄成功信息,否則提示用戶名或密碼有誤的錯(cuò)誤信息。該程序的運(yùn)行結(jié)果下所示:------歡迎使用大數(shù)據(jù)管理平臺(tái)------用戶名:adinm密碼:admin用戶名或密碼有誤!------歡迎使用大數(shù)據(jù)管理平臺(tái)------用戶名:admin密碼:admin登錄成功!Object

類的成員方法getClass()方法:getClass()方法返回對(duì)象所屬的類,是一個(gè)Class對(duì)象。通過Class對(duì)象可以獲取該類的各種信息,包括類名、父類以及它所實(shí)現(xiàn)接口的名字等。例如編寫一個(gè)實(shí)例,演示如何對(duì)String類型調(diào)用getClass()方法,然后輸出其父類及實(shí)現(xiàn)的接口信息。System類的成員方法publicstaticvoidprintClassInfo(Objectobj){//獲取類名System.out.println("類名:"+obj.getClass().getName());//獲取父類名System.out.println("父類:"+obj.getClass().getSuperclass().getName());System.out.println("實(shí)現(xiàn)的接口有:");//獲取實(shí)現(xiàn)的接口并輸出for(inti=0;i<obj.getClass().getInterfaces().length;i++){System.out.println(obj.getClass().getInterfaces()[i]);}}publicstaticvoidmain(String[]args){StringstrObj=newString();printClassInfo(strObj);}具體的代碼如下:該程序的運(yùn)行結(jié)果下所示:類名:java.lang.String父類:java.lang.Object實(shí)現(xiàn)的接口有:interfacejava.io.Serializableinterfacejava.lang.Comparableinterfacejava.lang.CharSequenceObject

類的成員方法接收任意引用類型的對(duì)象:既然Object類是所有對(duì)象的父類,則所有的對(duì)象都可以向Object進(jìn)行轉(zhuǎn)換,在這其中也包含了數(shù)組和接口類型,即一切的引用數(shù)據(jù)類型都可以使用Object進(jìn)行接收。例如,實(shí)例化A類對(duì)象,Aa=newA();對(duì)象向上轉(zhuǎn)型的格式:Objectobj=a;對(duì)象向下轉(zhuǎn)型的格式:Ax=(A)obj;溫馨提示:因?yàn)镺bject類可以接收任意的引用數(shù)據(jù)類型,所以在很多的類庫設(shè)計(jì)上都采用Object作為方法的參數(shù),這樣操作起來會(huì)比較方便。3.Math類介紹第6章Java常用類及接口Math類:Math類介紹Java中的+、-、*、/和%等基本算術(shù)運(yùn)算符不能進(jìn)行更復(fù)雜的數(shù)學(xué)運(yùn)算,例如,三角函數(shù)、對(duì)數(shù)運(yùn)算、指數(shù)運(yùn)算等。于是Java提供了Math工具類來完成這些復(fù)雜的運(yùn)算。在Java中Math類封裝了常用的數(shù)學(xué)運(yùn)算,提供了基本的數(shù)學(xué)操作,如指數(shù)、對(duì)數(shù)、平方根和三角函數(shù)等。Math類位于java.lang包,它的構(gòu)造方法是private的,因此無法創(chuàng)建Math類的對(duì)象,并且Math類中的所有方法都是類方法,可以直接通過類名來調(diào)用它們。Math

類的靜態(tài)常量Math類中包含E和PI兩個(gè)靜態(tài)常量,正如它們名字所暗示的,它們的值分別等于e(自然對(duì)數(shù))和π(圓周率)。例如:調(diào)用Math類的E和PI兩個(gè)常量,并將結(jié)果輸出。代碼如下:執(zhí)行上述代碼,輸出結(jié)果如下:System.out.println("E常量的值:"+Math.E);System.out.println("PI常量的值:"+Math.PI);E常量的值:2.718281828459045PI常量的值:3.141592653589793求最大值、最小值和絕對(duì)值在程序中常見的就是求最大值、最小值和絕對(duì)值問題,如果使用Math類提供的方法可以很容易實(shí)現(xiàn)。這些方法的說明如下表所示。方法說明staticintabs(inta)返回a的絕對(duì)值staticlongabs(longa)返回a的絕對(duì)值staticfloatabs(floata)返回a的絕對(duì)值staticdoubleabs(doublea)返回a的絕對(duì)值staticintmax(intx,inty)返回x和y中的最大值staticdoublemax(doublex,doubley)返回x和y中的最大值staticlongmax(longx,longy)返回x和y中的最大值staticfloatmax(floatx,floaty)返回x和y中的最大值staticintmin(intx,inty)返回x和y中的最小值staticlongmin(longx,longy)返回x和y中的最小值staticdoublemin(doublex,doubley)返回x和y中的最小值staticfloatmin(floatx,floaty)返回x和y中的最小值求最大值、最小值和絕對(duì)值例如,求10和20的較大值、15.6和15的較小值、-12的絕對(duì)值,代碼如下:該程序的運(yùn)行結(jié)果如下:publicstaticvoidmain(String[]args){System.out.println("10和20的較大值:"+Math.max(10,20));System.out.println("15.6和15的較小值:"+Math.min(15.6,15));System.out.println("-12的絕對(duì)值:"+Math.abs(-12));}10和20的較大值:2015.6和15的較小值:15.0-12的絕對(duì)值:12求整運(yùn)算Math類的求整方法有很多,詳細(xì)說明如下表所示。方法說明staticdoubleceil(doublea)返回大于或等于a的最小整數(shù)staticdoublefloor(doublea)返回小于或等于a的最大整數(shù)staticdoublerint(doublea)返回最接近a的整數(shù)值,如果有兩個(gè)同樣接近的整數(shù),則結(jié)果取偶數(shù)staticintround(floata)將參數(shù)加上1/2后返回與參數(shù)最近的整數(shù)staticlonground(doublea)將參數(shù)加上1/2后返回與參數(shù)最近的整數(shù),然后強(qiáng)制轉(zhuǎn)換為長(zhǎng)整型求整運(yùn)算下面的實(shí)例演示了Math類中取整函數(shù)方法的應(yīng)用:publicstaticvoidmain(String[]args){Scannerinput=newScanner(System.in);System.outprintln("請(qǐng)輸入一個(gè)數(shù)字:");doublenum=input.nextDouble();System.out.println("大于或等于"+num+"的最小整數(shù):"+Math.ceil(num));System.out.println("小于或等于"+num+"的最大整數(shù):"+Math.floor(num));System.out.println("將"+num+"加上0.5之后最接近的整數(shù):"+Math.round(num));System.out.println("最接近"+num+"的整數(shù):"+Math.rint(num));}請(qǐng)輸入一個(gè)數(shù)字:99.01大于或等于99.01的最小整數(shù):100.0小于或等于99.01的最大整數(shù):99.0將99.01加上0.5之后最接近的整數(shù):100最接近99.01的整數(shù):99.0該程序的運(yùn)行結(jié)果如下:三角函數(shù)運(yùn)算Math類中包含的三角函數(shù)方法及其說明如下表所示。方法說明staticdoublesin(doublea)返回角的三角正弦值,參數(shù)以孤度為單位staticdoublecos(doublea)返回角的三角余弦值,參數(shù)以孤度為單位staticdoubleasin(doublea)返回一個(gè)值的反正弦值,參數(shù)域在[-1,1],值域在[-PI/2,PI/2]staticdoubleacos(doublea)返回一個(gè)值的反余弦值,參數(shù)域在[-1,1],值域在[0.0,PI]staticdoubletan(doublea)返回角的三角正切值,參數(shù)以弧度為單位staticdoubleatan(doublea)返回一個(gè)值的反正切值,值域在[-PI/2,PI/2]staticdoubletoDegrees(doubleangrad)將用孤度表示的角轉(zhuǎn)換為近似相等的用角度表示的角staticdoubletoRadians(doubleangdeg)將用角度表示的角轉(zhuǎn)換為近似相等的用弧度表示的角在表中,每個(gè)方法的參數(shù)和返回值都是double類型,參數(shù)以弧度代替角度來實(shí)現(xiàn),其中1度等于π/180弧度,因此平角就是π弧度。三角函數(shù)運(yùn)算例如,計(jì)算90度的正弦值、0度的余弦值、1的反正切值、120度的弧度值,代碼如下:publicstaticvoidmain(String[]args){System.out.println{"90度的正弦值:"+Math.sin(Math.PI/2));System.out.println("0度的余弦值:"+Math.cos(0));System.out.println("1的反正切值:"+Math.atan(l));System.out.println("120度的弧度值:"+Math.toRadians(120.0));}90度的正弦值:1.00的余弦值:1.01的反正切值:0.7853981633974483120度的弧度值:2.0943951023931953在上述代碼中,因?yàn)镸ath.sin()中的參數(shù)的單位是弧度,而90度表示的是角度,因此需要將90度轉(zhuǎn)換為弧度,即Math.PI/180*90,故轉(zhuǎn)換后的弧度為Math.PI/2,然后調(diào)用Math類中的sin()方法計(jì)算其正弦值。該程序的運(yùn)行結(jié)果如下:指數(shù)運(yùn)算指數(shù)的運(yùn)算包括求方根、取對(duì)數(shù)及其求n次方的運(yùn)算。在Math類中定義的指數(shù)運(yùn)算方法及其說明如下表所示。方法說明staticdoubleexp(doublea)返回e的a次冪staticdoublepow(doublea,doubleb)返回以a為底數(shù),以b為指數(shù)的冪值staticdoublesqrt(doublea)返回a的平方根staticdoublecbrt(doublea)返回a的立方根staticdoublelog(doublea)返回a的自然對(duì)數(shù),即lna的值staticdoublelog10(doublea)返回以10為底a的對(duì)數(shù)指數(shù)運(yùn)算例如,使用Math類中的方法實(shí)現(xiàn)指數(shù)的運(yùn)算,main()方法中的代碼如下:該程序的運(yùn)行結(jié)果如下:publicstaticvoidmain(String[]args){System.out.println("4的立方值:"+Math.pow(4,3));System.out.println("16的平方根:"+Math.sqrt(16));System.out.println("10為底2的對(duì)數(shù):"+Math.log1O(2));}4的立方值:64.016的平方根:4.010為底2的對(duì)數(shù):0.30102999566398124.Random類介紹第6章Java常用類及接口Random類介紹在Java中要生成一個(gè)指定范圍之內(nèi)的隨機(jī)數(shù)字有兩種方法:一種是調(diào)用Math類的random()方法,一種是使用Random類。Random類提供了豐富的隨機(jī)數(shù)生成方法,可以產(chǎn)生boolean、int、long、float、byte數(shù)組以及double類型的隨機(jī)數(shù),這是它與random()方法最大的不同之處。random()方法只能產(chǎn)生double類型的0~1的隨機(jī)數(shù)。Random類:Random類介紹Random類:Random類位于java.util包中,該類常用的有如下兩個(gè)構(gòu)造方法。Random():該構(gòu)造方法使用一個(gè)和當(dāng)前系統(tǒng)時(shí)間對(duì)應(yīng)的數(shù)字作為種子數(shù),然后使用這個(gè)種子數(shù)構(gòu)造Random對(duì)象。Random(longseed):使用單個(gè)long類型的參數(shù)創(chuàng)建一個(gè)新的隨機(jī)數(shù)生成器。Random類介紹Random類提供的所有方法生成的隨機(jī)數(shù)字都是均勻分布的,也就是說區(qū)間內(nèi)部的數(shù)字生成的概率是均等的,在下表中列出了Random類中常用的方法。方法說明booleannextBoolean()生成一個(gè)隨機(jī)的boolean值,生成true和false的值概率相等doublenextDouble()生成一個(gè)隨機(jī)的double值,數(shù)值介于[0,1.0),含0而不包含1.0intnextlnt()生成一個(gè)隨機(jī)的int值,該值介于int的區(qū)間,也就是-231~231-1。如果需要生成指定區(qū)間的int值,則需要進(jìn)行一定的數(shù)學(xué)變換intnextlnt(intn)生成一個(gè)隨機(jī)的int值,該值介于[0,n),包含0而不包含n。如果想生成指定區(qū)間的int值,也需要進(jìn)行一定的數(shù)學(xué)變換voidsetSeed(longseed)重新設(shè)置Random對(duì)象中的種子數(shù)。設(shè)置完種子數(shù)以后的Random對(duì)象和相同種子數(shù)使用new關(guān)鍵字創(chuàng)建出的Random對(duì)象相同longnextLong()返回一個(gè)隨機(jī)長(zhǎng)整型數(shù)字booleannextBoolean()返回一個(gè)隨機(jī)布爾型值floatnextFloat()返回一個(gè)隨機(jī)浮點(diǎn)型數(shù)字doublenextDouble()返回一個(gè)隨機(jī)雙精度值Random類的成員方法該程序的運(yùn)行結(jié)果下所示:生成的[0,1.0]區(qū)間的小數(shù)是:0.8773165855918825生成的[0,7.0]區(qū)間的小數(shù)是:6.407083074782282生成的[0,10]區(qū)間的整數(shù)是:5生成的[-3,15]區(qū)間的整數(shù)是:4生成一個(gè)隨機(jī)長(zhǎng)整型值:-8462847591661221914生成一個(gè)隨機(jī)布爾型值:false生成一個(gè)隨機(jī)浮點(diǎn)型值:0.6397003生成[0,9]區(qū)間的整數(shù):8Randomr=newRandom();System.out.println("生成的[0,1.0]區(qū)間的小數(shù)是:"+r.nextDouble());System.out.println("生成的[0,7.0]區(qū)間的小數(shù)是:"+r.nextDouble()*7);System.out.println("生成的[0,10]區(qū)間的整數(shù)是:"+r.nextInt(11));System.out.println("生成的[-3,15]區(qū)間的整數(shù)是:"+r.nextInt(19)-3);System.out.println("生成一個(gè)隨機(jī)長(zhǎng)整型值:"+r.nextLong());System.out.println("生成一個(gè)隨機(jī)布爾型值:"+r.nextBoolean());System.out.println("生成一個(gè)隨機(jī)浮點(diǎn)型值:"+r.nextFloat());System.out.println("生成[0,9]區(qū)間的整數(shù):"+r.nextInt(10));下面編寫一個(gè)Java程序,演示如何使用Random類提供的方法來生成隨機(jī)數(shù)。具體代碼如下:Random類的成員方法Math類的random()方法沒有參數(shù),它默認(rèn)會(huì)返回大于等于0.0、小于1.0的double類型隨機(jī)數(shù),即0<=隨機(jī)數(shù)<1.0。對(duì)random()方法返回的數(shù)字稍加處理,即可實(shí)現(xiàn)產(chǎn)生任意范圍隨機(jī)數(shù)的功能。下面使用random()方法實(shí)現(xiàn)隨機(jī)生成一個(gè)2~100偶數(shù)的功能。具體代碼如下:intmin=2;//定義隨機(jī)數(shù)的最小值intmax=102;//定義隨機(jī)數(shù)的最大值//產(chǎn)生一個(gè)2~100的數(shù)ints=(int)min+(int)(Math.random()*(max-min));if(s%2==0){//如果是偶數(shù)就輸出System.out.println("隨機(jī)數(shù)是:"+s);}else{//如果是奇數(shù)就加1后輸出System.out.println("隨機(jī)數(shù)是:"+(s+1));}由于m+(int)(Math.random()*n)語句可以獲取m~m+n的隨機(jī)數(shù),所以2+(int)(Math.random()*(102-2))表達(dá)式可以求出2~100的隨機(jī)數(shù)。在產(chǎn)生這個(gè)區(qū)間的隨機(jī)數(shù)后還需要判斷是否為偶數(shù),這里使用了對(duì)2取余數(shù),如果余數(shù)不是零,說明隨機(jī)數(shù)是奇數(shù),此時(shí)將隨機(jī)數(shù)加1后再輸出。該程序的運(yùn)行結(jié)果如下:隨機(jī)數(shù)是:20Random類練習(xí)主持人在數(shù)字范圍內(nèi)隨機(jī)確定一個(gè)數(shù)字,作為炸彈數(shù)字,玩家輪流猜數(shù)字,誰猜中這個(gè)炸彈就被懲罰。比如范圍是1~100,炸彈是60,然后猜了一個(gè)數(shù)字是50,50不是炸彈,那么現(xiàn)在猜數(shù)字的范圍就縮小到50~100;又猜了一個(gè)數(shù)字80,80也不是炸彈,那么現(xiàn)在又縮小范圍到50~80,每次猜不能猜邊界上的值,直到有人猜中這個(gè)炸彈,然后就受到懲罰。數(shù)字炸彈游戲:5.日期相關(guān)類介紹第6章Java常用類及接口日期相關(guān)類Java與日期相關(guān)的類有三個(gè):Date:具體類java.util.Date;Calendar:抽象類java.util.Calendar,它的派生類java.util.GregorianCalendar;DateFormat:抽象類java.text.DateFormat,它的派生類java.text.SimpeDateFormat;Date類日期相關(guān)類在Java中,日期Date是從1970.01.0100:00:00GMT加上一個(gè)long型的毫秒數(shù)時(shí)間得到的。我們可以從Java的API文檔查找到j(luò)ava.util.Date類的構(gòu)造方法和成員方法。其中如果標(biāo)識(shí)為“Deprecated”(棄用)的表示已經(jīng)過期的,當(dāng)前無法使用。當(dāng)前有效的Date類的構(gòu)造方法有:用不帶參數(shù)的構(gòu)造方法直接實(shí)例化為系統(tǒng)當(dāng)前日期時(shí)間;或者用一個(gè)long型的參數(shù)構(gòu)造方法,它實(shí)例化一個(gè)Date對(duì)象,這個(gè)對(duì)象是從1970.01.0108:00:00加上ms毫秒的日期。Date()或者Date(longms)日期相關(guān)類方法名說明publiclonggetTime()獲取的是日期對(duì)象從1970年一月一日00:00:00到目前的毫秒數(shù)publiclongsetTime(longtime)設(shè)置時(shí)間,給的是毫秒值Date類的常用方法日期相關(guān)類Date類的應(yīng)用示例importjava.util.*;publicclassDateDemo01{publicstaticvoidmain(Stringargs[]){Datedt1=newDate();Datedt10=(Date)dt1.clone();System.out.println("Today\t\tdt1="+dt1);Datedt2=newDate(System.currentTimeMillis()+24*60*60*1000);System.out.println("Tomorrow\tdt2="+dt2); Datedt3=newDate(System.currentTimeMillis()-24*60*60*1000);System.out.println("Yesterday\tdt3="+dt3);System.out.println("dt1.after(dt2):"+dt1.after(dt2)+"\tdt3.before(dt2):"+dt3.before(dt2));System.out.println("Comparedt1:dt10<"+pareTo(dt10)+">\tdt1:dt2<"+pareTo(dt2)+">\tdt1:dt3<"+pareTo(dt3)+">");}}運(yùn)行結(jié)果為:Today dt1=SatNov0422:37:45CST2023Tomorrow dt2=SunNov0522:37:45CST2023Yesterday dt3=FriNov0322:37:45CST2023dt1.after(dt2):false dt3.before(dt2):trueComparedt1:dt10<0> dt1:dt2<-1> dt1:dt3<1>日期相關(guān)類DateFormat類時(shí)間與日期模板結(jié)果"yyyy.MM.ddG'at'HH:mm:ssz"2001.07.04ADat12:08:56PDT"EEE,MMMd,''yy"Wed,Jul4,'01"h:mma"12:08PM"hh'o''clock'a,zzzz"12o'clockPM,PacificDaylightTime在java.text包下的一個(gè)類,它可以把Date類格式化輸出。一般情況下,使用的是它的子類,叫做SimpleFormat類,它可以使用其父類DateFormat的方法。在這個(gè)類中,定義了許多模板字符。利用這些模板字符,程序員可以制定所需要的日期輸出格式。例如:日期相關(guān)類DateFormat類的格式化輸出日期時(shí)間示例importjava.util.*;importjava.text.*;publicclassDateDemo02{publicstaticvoidmain(Stringargs[]){Datedt1=newDate(); Datedt2=newDate(System.currentTimeMillis()+24*60*60*1000); SimpleDateFormatsdf1=SimpleDateFormat("yyyy年MM月dd日EEE,HH:mm:ss:SSS");SimpleDateFormatsdf2=newSimpleDateFormat("yyyy/MM/dd本月第W周EEE,今年的第DDD天" System.out.println("sdf1.format(dt2):"+sdf1.format(dt2)+"\nsdf2.format(dt1):"+sdf2.format(dt1)); }}運(yùn)行結(jié)果為:sdf1.format(dt2):2016年08月25日星期四,18:08:22:454sdf2.format(dt1):2016/08/24本月第4周星期三,今年的第237天單類型導(dǎo)入(single-type-import),例如importjava.io.File;按需類型導(dǎo)入(type-import-on-demand),例如importjava.text.*;日期相關(guān)類Date類中,許多低版本的方法在高版本已經(jīng)過時(shí)了,替代這些方法的是相應(yīng)用Calendar類中的各種方法。Calendar也是java.util包下的一個(gè)類,主要替代Date的一些功能。Calendar類有兩個(gè)構(gòu)造方法:protectedCalendar()protectedCalendar(TimeZone

zone,

Locale

aLocale)均為protected權(quán)限。因此,用戶是不能使用構(gòu)造方法來實(shí)例化Calendar對(duì)象的,而是通過這個(gè)類提供的靜態(tài)方法:static

CalendargetInstance()

來創(chuàng)建對(duì)象的,或者用子類GregorianCalendar的構(gòu)造器:GregorianCalendar()

來實(shí)例化Calendar對(duì)象。Calendar類日期相關(guān)類Calendar類應(yīng)用示例importjava.util.*;publicclassCalendarDemo{publicstaticvoidmain(Stringargs[]){Calendarcd1=newGregorianCalendar();Datedate=newDate(System.currentTimeMillis()+3*24*60*60*1000);cd1.setTime(date);System.out.println("Year:"+cd1.get(cd1.YEAR));System.out.println("Month:"+cd1.get(cd1.MONTH));System.out.println("Day:"+cd1.get(Calendar.DATE));System.out.println("Week:"+cd1.get(cd1.DAY_OF_WEEK));SimpleDateFormatsdf=newSimpleDateFormat("yyyy年MM月dd日EEE,HH:mm:ss:SSS");System.out.println("Currentdate:"+sdf.format(cd1.getTime()));}}可以通過對(duì)象(如cd1)、也可以通過類名Calendar訪問域名,或者日期時(shí)間信息.日期相關(guān)類Calendar類importjava.util.*;publicclassCalendarDemo{publicstaticvoidmain(Stringargs[]){Calendarcd1=newGregorianCalendar();Datedate=newDate(System.currentTimeMillis()+3*24*60*60*1000);cd1.setTime(date);System.out.println("Year:"+cd1.get(cd1.YEAR));System.out.println("Month:"+cd1.get(cd1.MONTH));System.o

溫馨提示

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

評(píng)論

0/150

提交評(píng)論