




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
本章學(xué)習(xí)目標(biāo):●
掌握基本類型的封裝類的使用●
掌握Object類的使用●
掌握字符串類的使用●
掌握Scanner、Math和日期類的使用●
理解格式化處理的應(yīng)用第六章Java常用類
本章主要介紹Java系統(tǒng)提供的一些程序員在項(xiàng)目開(kāi)發(fā)中經(jīng)常用到的類和方法。掌握了這些基本類與常用方法的應(yīng)用,為以后項(xiàng)目開(kāi)發(fā)和深入學(xué)習(xí)打好基礎(chǔ)。第1節(jié)part基本類型的封裝類Java為其8個(gè)基本數(shù)據(jù)類型提供了對(duì)應(yīng)的封裝類,通過(guò)這些封裝類可以把8個(gè)基本類型的值封裝成對(duì)象進(jìn)行使用。從JDK1.5開(kāi)始,Java允許將基本類型的值直接賦值給對(duì)應(yīng)的封裝類對(duì)象。8個(gè)基本數(shù)據(jù)類型對(duì)應(yīng)的封裝類如表6-1所示?;绢愋偷姆庋b類基本類型的封裝類
基本類型的封裝類除了Integer和Character寫(xiě)法有點(diǎn)特殊例外,其他的基本類型對(duì)應(yīng)的封裝類都是將首字母大寫(xiě)即可。
從JDK1.5之后,Java提供了自動(dòng)裝箱(Autoboxing)和自動(dòng)拆箱(AutoUnboxing)功能,因此,基本類型變量和封裝類之間可以直接賦值,例如:Integerobj=10;intb=obj;
自動(dòng)裝箱和自動(dòng)拆箱大大簡(jiǎn)化了基本數(shù)據(jù)類型和封裝類之間的轉(zhuǎn)換過(guò)程,但進(jìn)行自動(dòng)裝箱和拆箱操作時(shí),必須注意類型匹配,例如Integer只能和int匹配,不能跟boolean或char等其他類型匹配基本類型的封裝類
除此之外,封裝類還可以實(shí)現(xiàn)基本類型變量和字符串之間的轉(zhuǎn)換:基本類型的封裝類2、將基本類型的值轉(zhuǎn)換成字符串有三種方式:●直接使用一個(gè)空字符串來(lái)連接數(shù)值即可?!裾{(diào)用封裝類提供的toString()靜態(tài)方法?!裾{(diào)用String類提供的valueOf()靜態(tài)方法。例如,將基本類型的值轉(zhuǎn)換為字符串Strings1=""+23;Strings2=Integer.toString(100);Strings3=String.valueOf(66);1、將字符串的值轉(zhuǎn)換為基本類型的值有兩種方式:●直接利用封裝類的構(gòu)造方法,即Xxx(Strings)構(gòu)造方法●調(diào)用封裝類提供的parseXxx(Strings)靜態(tài)方法例如:將字符串的值轉(zhuǎn)換為基本類型intnum1=newInteger("10");intnum2=Integer.parseInt("123");如圖6.1所示演示了基本類型變量和字符串之間的轉(zhuǎn)換。基本類型的封裝類下述案例示例了Java基本數(shù)據(jù)類型變量和封裝類之間轉(zhuǎn)換的使用,代碼如下所示?!敬a6.1】FengZhangExample.javapackagecom;publicclassFengZhangExample{publicstaticvoidmain(String[]args){//直接把一個(gè)整數(shù)值賦給Integer對(duì)象IntegerintObj=5;//直接把一個(gè)boolean值賦給一個(gè)Boolean對(duì)象BooleanboolObj=true;
//Integer對(duì)象與整數(shù)進(jìn)行算數(shù)運(yùn)算inta=intObj+10;System.out.println(a);System.out.println(boolObj);
//字符串與基本類型變量之間的轉(zhuǎn)換StringintStr="123";//把一個(gè)特定字符串轉(zhuǎn)換成int變量intit1=Integer.parseInt(intStr);intit2=newInteger(intStr);System.out.println(it1+","+it2);基本類型的封裝類StringfloatStr="4.56f";//把一個(gè)特定字符串轉(zhuǎn)換成float變量floatft1=Float.parseFloat(floatStr);floatft2=newFloat(floatStr);System.out.println(ft1+","+ft2);
//將一個(gè)double類型變量轉(zhuǎn)換為字符串Stringds1=""+3.14;Stringds2=Double.toString(3.15D);Stringds3=String.valueOf(3.16d);System.out.println(ds1+","+ds2+","+ds3);
//將一個(gè)boolean類型變量轉(zhuǎn)換為字符串Stringbs1=""+true;Stringbs2=Boolean.toString(true);Stringbs3=String.valueOf(true);System.out.println(bs1+","+bs2+","+bs3);}}基本類型的封裝類程序運(yùn)行結(jié)果如下:15true123,1234.56,4.563.14,3.15,3.16true,true,true第2節(jié)partObject類Java基礎(chǔ)類庫(kù)提供了一些常用的核心類,包括Object、String、Math等。其中,Object對(duì)象類定義在java.lang包中,是所有類的頂級(jí)父類。在Java體系中,所有類都直接或間接地繼承了Object類。因此,任何Java對(duì)象都可以調(diào)用Object類中的方法,而且任何類型的對(duì)象都可以賦給Object類型的變量。Object類提供了所有類都需要的一些方法,常用的方法及描述如表6-2所示。Object類本節(jié)概述6.2.1equals()方法
兩個(gè)基本類型的變量比較是否相等時(shí)直接使用“==”運(yùn)算符即可,但兩個(gè)引用類型的對(duì)象比較是否相等時(shí)則有兩種方式:使用“==”運(yùn)算符或使用equals()方法。在比較兩個(gè)對(duì)象是否相等時(shí),“==”運(yùn)算符和equals()方法是有區(qū)別的:
●“==”運(yùn)算符比較的是兩個(gè)對(duì)象地址是否相同,即引用的是同一個(gè)對(duì)象。
●equals()方法通??梢杂糜诒容^兩個(gè)對(duì)象的內(nèi)容是否相同。
下述案例分別使用“==”運(yùn)算符和equals()方法來(lái)判斷兩個(gè)對(duì)象是否相等,代碼如下所示。equal()方法6.2.1equals方法【代碼6.2】ObjectEqualsExample.javapackagecom;publicclassObjectEqualsExample{publicstaticvoidmain(String[]args){//定義4個(gè)整型類對(duì)象Integernum1=newInteger(8);Integernum2=newInteger(10);Integernum3=newInteger(8);//將num1對(duì)象賦值給num4Integernum4=num1;System.out.println("num1和自身進(jìn)行比較:");//分別使用==和equals()方法對(duì)num1進(jìn)行自身比較System.out.println("num1==num1是"+(num1==num1));System.out.println("num1.equals(num1)是"+num1.equals(num1));System.out.println("—————————————————");System.out.println("num1和num2兩個(gè)不同值的對(duì)象進(jìn)行比較:");//num1和num2兩個(gè)不同值的對(duì)象進(jìn)行比較System.out.println("num1==num2是"+(num1==num2));System.out.println("num1.equals(num2)是"+num1.equals(num2));System.out.println("—————————————————");6.2.1equals方法System.out.println("num1和num3兩個(gè)相同值的對(duì)象進(jìn)行比較:");//num1和num3兩個(gè)相同值的對(duì)象進(jìn)行比較//num1和num3引用指向的對(duì)象的值一樣,但對(duì)象空間不一樣System.out.println("num1==num3是"+(num1==num3));System.out.println(“num1.equals(num3)是”+num1.equals(num3));System.out.println("——————————————————");System.out.println("num1和num4兩個(gè)同一引用的對(duì)象進(jìn)行比較:");//num2和num4引用指向同一個(gè)對(duì)象空間System.out.println("num2==num4是"+(num1==num4));System.out.println("num2.equals(num4)是"+num1.equals(num4));}}6.2.1equals方法
上述代碼中num1對(duì)象分別跟自身num1、不同值num2、相同值num3以及同一引用num4這幾個(gè)對(duì)象進(jìn)行比較,通過(guò)分析運(yùn)行結(jié)果可以得出:使用“==”運(yùn)算符將嚴(yán)格比較這兩個(gè)變量引用是否相同,即地址是否相同,是否指向內(nèi)存同一空間,只有當(dāng)兩個(gè)變量指向同一個(gè)內(nèi)存地址即同一個(gè)對(duì)象時(shí)才返回true,否則返回false;Integer的equals()方法則比較兩個(gè)對(duì)象的內(nèi)容是否相同,只要兩個(gè)對(duì)象的內(nèi)容值相等,哪怕是兩個(gè)不同的對(duì)象(引用地址不同),依然會(huì)返回true。程序運(yùn)行結(jié)果如下:num1和自身進(jìn)行比較:num1==num1是truenum1.equals(num1)是true—————————————————num1和num2兩個(gè)不同值的對(duì)象進(jìn)行比較:num1==num2是falsenum1.equals(num2)是false—————————————————num1和num3兩個(gè)相同值的對(duì)象進(jìn)行比較:num1==num3是falsenum1.equals(num3)是true—————————————————num1和num4兩個(gè)同一引用的對(duì)象進(jìn)行比較:num2==num4是truenum2.equals(num4)是true6.2.2toString()方法Object類的toString()方法是一個(gè)非常特殊的方法,它是一個(gè)“自我描述”的方法,該方法返回當(dāng)前對(duì)象的字符串表示。當(dāng)使用System.out.println(obj)輸出語(yǔ)句直接打印對(duì)象時(shí),或字符串與對(duì)象進(jìn)行連接操作時(shí),例如:"info"+obj,系統(tǒng)都會(huì)自動(dòng)調(diào)用對(duì)象的toString()方法。Object類中的toString()方法返回包含類名和散列碼的字符串,具體格式如下:
類名@哈希代碼值
下述案例定義了一個(gè)Book.java類,并重寫(xiě)了toString()方法,代碼如下所示。toString()方法6.2.2toString()方法packagecom;publicclassBook{//屬性privateStringbookName;//書(shū)名privatedoubleprice;//價(jià)格privateStringpublisher;//出版社//默認(rèn)構(gòu)造方法publicBook(){}//重載構(gòu)造方法publicBook(StringbookName,doubleprice,Stringpublisher){this.bookName=bookName;this.price=price;this.publisher=publisher;}publicStringgetBookName(){returnbookName;}publicvoidsetBookName(StringbookName){this.bookName=bookName;}6.2.2toString()方法publicdoublegetPrice(){returnprice;}publicvoidsetPrice(doubleprice){this.price=price;}publicStringgetPublisher(){returnpublisher;}publicvoidsetPublisher(Stringpublisher){this.publisher=publisher;}//重寫(xiě)toString()方法publicStringtoString(){returnthis.bookName+",¥"+this.price+","+this.publisher;}}
上述代碼重寫(xiě)了toString()方法,該方法將3個(gè)屬性值連成一個(gè)字符串并返回。6.2.2toString()方法
下述案例編寫(xiě)了一個(gè)測(cè)試類,示例了toString()方法的功能,代碼如下所示。【代碼6.4】BookExample.javapackagecom;publicclassBookExample{publicstaticvoidmain(String[]args){ Bookb1=newBook("《Java面向?qū)ο蟪绦蛟O(shè)計(jì)》",38,"重慶大學(xué)出版社"); System.out.println(b1); Bookb2=newBook("《MySql數(shù)據(jù)庫(kù)程序設(shè)計(jì)》",26,"清華大學(xué)出版社"); Strings=b1+"\n"+b2; System.out.println(s);}}
上述代碼使用System.out.println()直接輸出對(duì)象b1的信息,以及將b1和b2進(jìn)行字符串連接,運(yùn)行出來(lái)結(jié)果如下所示:《Java面向?qū)ο蟪绦蛟O(shè)計(jì)》,¥38.0,重慶大學(xué)出版社《Java面向?qū)ο蟪绦蛟O(shè)計(jì)》,¥38.0,重慶大學(xué)出版社《MySql數(shù)據(jù)庫(kù)程序設(shè)計(jì)》,¥26.0,清華大學(xué)出版社6.2.2toString()方法
將Book類中重寫(xiě)的toString()方法注釋掉,使用Object原來(lái)默認(rèn)的toString()方法,則運(yùn)行結(jié)果如下所示:com.Book@6fd46259com.Book@6fd46259com.Book@6084fa6a
當(dāng)類沒(méi)有重寫(xiě)toString()方法時(shí),系統(tǒng)會(huì)自動(dòng)調(diào)用Object默認(rèn)的toString()方法,顯示的字符串格式是“類名@哈希代碼值”。第3節(jié)part字符串類
字符串就是用雙引號(hào)引起來(lái)的一連串的字符序列,Java提供了String、StringBuffer和StringBuilder三個(gè)類來(lái)封裝字符串,并提供了一系列方法來(lái)操作字符串對(duì)象。String、StringBuffer和StringBuilder三者之間區(qū)別如下:
●String創(chuàng)建的字符串是不可變的,即當(dāng)使用String創(chuàng)建一個(gè)字符串后,該字符串在內(nèi)存中是一個(gè)不可改變的字符序列。如果改變字符串變量的值,其實(shí)際是在內(nèi)存中創(chuàng)建一個(gè)新的字符串,字符串變量將引用新創(chuàng)建的字符串地址,而原來(lái)的字符串在內(nèi)存中依然存在且內(nèi)容不變,直至Java的垃圾回收系統(tǒng)對(duì)其進(jìn)行銷毀。
●StringBuffer創(chuàng)建的字符串是可變的,當(dāng)使用StringBuffer創(chuàng)建一個(gè)字符串后,該字符串的內(nèi)容可以通過(guò)append()、insert()、setCharAt()等方法進(jìn)行改變,而字符串變量所引用的地址一直不變,如果想獲得StringBuffer的最終內(nèi)容,可以通過(guò)調(diào)用它的toString()方法轉(zhuǎn)換成一個(gè)String對(duì)象。
●StringBuilder是JDK1.5新增的一個(gè)類。與StringBuffer類似,也是創(chuàng)建一個(gè)可變的字符串,不同的是StringBuffer是線程安全的,而StringBuilder沒(méi)有實(shí)現(xiàn)線程安全,因此性能較好。通常,如果只需要?jiǎng)?chuàng)建一個(gè)內(nèi)容可變的字符串對(duì)象,不涉及線程安全、同步方面的問(wèn)題,應(yīng)優(yōu)先考慮使用StringBuilder類。字符串類本節(jié)概述6.3.1String類String類6.3.1String類6.3.1String類下述案例示例了String類常用方法的應(yīng)用,代碼如下所示?!敬a6.5】StringExample.javapackagecom;publicclassStringExample{publicstaticvoidmain(String[]args){Stringstr=“I‘mWangFeng,welcometoChongQing!”;System.out.println("字符串內(nèi)容:"+str);System.out.println("字符串長(zhǎng)度:"+str.length());System.out.println("截取從下標(biāo)5開(kāi)始的子字符串:“+str.substring(5));System.out.println("截取從下標(biāo)5開(kāi)始到10結(jié)束的子字符串:”+str.substring(5,10));System.out.println("轉(zhuǎn)換成小寫(xiě):"+str.toLowerCase());System.out.println("轉(zhuǎn)換成大寫(xiě):"+str.toUpperCase());//驗(yàn)證字符串是否全是數(shù)字StringnumStr="1234567a890";booleanflag=false;6.3.1String類for(inti=0;i<numStr.length();i++){if(numStr.charAt(i)>‘9’||numStr.charAt(i)<‘0’){flag=true; break;}}
if(flag){
System.out.println("該字符串有非數(shù)字存在!");}else{
System.out.println("該字符串全是數(shù)字!");}}}6.3.1String類程序運(yùn)行結(jié)果如下:字符串內(nèi)容:I'mWangFeng,welcometoChongQing!字符串長(zhǎng)度:34截取從下標(biāo)5開(kāi)始的子字符串:angFeng,welcometoChongQing!截取從下標(biāo)5開(kāi)始到10結(jié)束的子字符串:angFe轉(zhuǎn)換成小寫(xiě):i'mwangfeng,welcometochongqing!轉(zhuǎn)換成大寫(xiě):I'MWANGFENG,WELCOMETOCHONGQING!該字符串有非數(shù)字存在!
在Java程序中,經(jīng)常會(huì)使用“+”運(yùn)算符連接字符串,但不同情況下字符串連接的結(jié)果也是不同的。使用“+”運(yùn)算符連接字符串時(shí)注意以下三點(diǎn):
●字符串與字符串進(jìn)行“+”連接時(shí):第二個(gè)字符串會(huì)連接到第一個(gè)字符串之后。
●字符串與其他類型進(jìn)行“+”連接時(shí):因字符串在前面,所以其他類型的數(shù)據(jù)都將轉(zhuǎn)換成字符串與前面的字符串進(jìn)行連接。
●其他類型與字符串進(jìn)行“+”連接時(shí):因字符串在后面,其他類型按照從左向右進(jìn)行運(yùn)算,最后再與字符串進(jìn)行連接。6.3.2StringBuffer類StringBuffer類StringBuffer字符緩沖區(qū)類是一種線程安全的可變字符序列,其常用的方法如表6-4所示。6.3.2StringBuffer類6.3.2StringBuffer類下述案例示例了StringBuffer類常用方法的應(yīng)用,代碼如下所示。【代碼6.6】StringBufferExample.javapackagecom;publicclassStringBufferExample{publicstaticvoidmain(String[]args){StringBuffersb=newStringBuffer(“My”);System.out.println("初始長(zhǎng)度:"+sb.length());System.out.println("初始容量是:"+sb.capacity());//追加字符串sb.append("java");System.out.println("追加后:"+sb);//插入sb.insert(0,"hello");System.out.println("插入后:"+sb);//替換sb.replace(5,6,",");System.out.println("替換后:"+sb);//刪除sb.delete(5,6);6.3.2StringBuffer類System.out.println("刪除后:"+sb);//反轉(zhuǎn)sb.reverse();System.out.println("反轉(zhuǎn)后:"+sb);System.out.println("當(dāng)前字符串長(zhǎng)度:"+sb.length());System.out.println("當(dāng)前容量是:"+sb.capacity());//改變StringBuilder的長(zhǎng)度,將只保留前面部分sb.setLength(5);System.out.println("改變長(zhǎng)度后:"+sb);}}程序運(yùn)行結(jié)果如下:初始長(zhǎng)度:2初始容量是:18追加后:Myjava插入后:helloMyjava替換后:hello,Myjava刪除后:helloMyjava反轉(zhuǎn)后:avajyMolleh當(dāng)前字符串長(zhǎng)度:11當(dāng)前容量是:18改變長(zhǎng)度后:avajy6.3.3StringBuilder類StringBuilder類StringBuilder字符串生成器類與StringBuffer類類似,也是創(chuàng)建可變的字符串序列,只不過(guò)沒(méi)有線程安全控制,StringBuilder類常用的方法如表6-5所示。6.3.3StringBuilder類6.3.3StringBuilder類下述案例示例了StringBuilder類常用方法的應(yīng)用,代碼如下所示。【代碼6.7】StringBuilderExample.javapackagecom;publicclassStringBuilderExample{publicstaticvoidmain(String[]args){ StringBuildersb=newStringBuilder("My"); System.out.println("初始長(zhǎng)度:"+sb.length()); System.out.println("初始容量是:"+sb.capacity()); //追加字符串 sb.append("java"); System.out.println("追加后:"+sb); //插入 sb.insert(0,"hello"); System.out.println("插入后:"+sb); //替換 sb.replace(5,6,","); System.out.println("替換后:"+sb); //刪除 sb.delete(5,6); System.out.println("刪除后:"+sb);6.3.3StringBuilder類 //反轉(zhuǎn) sb.reverse(); System.out.println("反轉(zhuǎn)后:"+sb); System.out.println("當(dāng)前字符串長(zhǎng)度:"+sb.length()); System.out.println("當(dāng)前容量是:"+sb.capacity()); //改變StringBuilder的長(zhǎng)度,將只保留前面部分 sb.setLength(5); System.out.println("改變長(zhǎng)度后:"+sb);}}6.3.3StringBuilder類程序運(yùn)行結(jié)果如下:初始長(zhǎng)度:2初始容量是:18追加后:Myjava插入后:helloMyjava替換后:hello,Myjava刪除后:helloMyjava反轉(zhuǎn)后:avajyMolleh當(dāng)前字符串長(zhǎng)度:11當(dāng)前容量是:18改變長(zhǎng)度后:avajy
通過(guò)上述代碼及運(yùn)行結(jié)果可以看出,StringBuilder類除了在構(gòu)造方法上與StringBuffer不同,其他方法的使用都一樣。StringBuilder和StringBuffer都有兩個(gè)方法:length()和capacity(),其中l(wèi)ength()方法表示字符序列的長(zhǎng)度,而capacity()方法表示容量,通常程序無(wú)須關(guān)心其容量。第4節(jié)partScanner類Scanner掃描器類在java.util包中,可以獲取用戶從鍵盤(pán)輸入的不同數(shù)據(jù),以完成數(shù)據(jù)的輸入操作,同時(shí)也可以對(duì)輸入的數(shù)據(jù)進(jìn)行驗(yàn)證。Scanner類常用的方法如表6-6所示。Scanner類Scanner類下述案例示例了Scanner類常用方法的應(yīng)用,代碼如下所示?!敬a6.8】ScannerExample.javapackagecom;importjava.util.Scanner;publicclassScannerExample{
publicstaticvoidmain(String[]args){
//創(chuàng)建Scanner對(duì)象,從鍵盤(pán)接收數(shù)據(jù)
Scannersc=newScanner(System.in);
System.out.print("請(qǐng)輸入
一個(gè)字符串(不帶空格):");
//接收字符串
Strings1=sc.next();
System.out.println("s1="+s1);
System.out.print("請(qǐng)輸入整數(shù):");
//接收整數(shù)
inti=sc.nextInt();
System.out.println("i="+i);
System.out.print("請(qǐng)輸入浮點(diǎn)數(shù):");
Scanner類//接收浮點(diǎn)數(shù) floatf=sc.nextFloat(); System.out.println("f="+f);
System.out.print("請(qǐng)輸入一個(gè)字符串(帶空格):");
//接收字符串,默認(rèn)情況下只能取出空格之前的數(shù)據(jù)
Strings2=sc.next();
System.out.println("s2="+s2);
//設(shè)置讀取的分隔符為回車
sc.useDelimiter("\n");
//接收上次掃描剩下的空格之后的數(shù)據(jù)
Strings3=sc.next();
System.out.println("s3="+s3);
System.out.print("請(qǐng)輸入一個(gè)字符串(帶空格):");
Strings4=sc.next();
System.out.println("s4="+s4);
}}程序運(yùn)行結(jié)果如下:請(qǐng)輸入一個(gè)字符串(不帶空格):xscs1=xsc請(qǐng)輸入整數(shù):34i=34請(qǐng)輸入浮點(diǎn)數(shù):5.6f=5.6請(qǐng)輸入一個(gè)字符串(帶空格):csvbgns2=csvs3=bgn
請(qǐng)輸入一個(gè)字符串(帶空格):567879s4=567879Scanner類
通過(guò)運(yùn)行結(jié)果可以看出,默認(rèn)情況下,next()方法只掃描接收空格之前的內(nèi)容,如果希望連空格一起接收,則可以使用useDelimiter()方法設(shè)置分隔符后再接收。第5節(jié)partMath類Math類包含常用的執(zhí)行基本數(shù)學(xué)運(yùn)算的方法,如初等指數(shù)、對(duì)數(shù)、平方根和三角函數(shù)等。Math類提供的方法都是靜態(tài)的,可以直接調(diào)用,無(wú)需實(shí)例化。Math類常用的方法如表6-7所示。Math類Math類Math類除了提供大量的靜態(tài)方法之外,還提供了兩個(gè)靜態(tài)常量:PI和E,正如其名字所暗示的,分別表示л和e的值。
下述案例示例了Math類中常用方法的使用,代碼如下所示?!敬a6.9】MathExample.javapackagecom;publicclassMathExample{ publicstaticvoidmain(String[]args){ /*---------下面是三角運(yùn)算---------*/ //將弧度轉(zhuǎn)換角度 System.out.println("Math.toDegrees(1.57):"+Math.toDegrees(1.57)); //將角度轉(zhuǎn)換為弧度 System.out.println("Math.toRadians(90):"+Math.toRadians(90)); //計(jì)算反余弦,返回的角度范圍在0.0到pi之間。 System.out.println("Math.acos(1.2):"+Math.acos(1.2)); //計(jì)算反正弦;返回的角度范圍在-pi/2到pi/2之間。 System.out.println("Math.asin(0.8):"+Math.asin(0.8)); //計(jì)算反正切;返回的角度范圍在-pi/2到pi/2之間。 System.out.println("Math.atan(2.3):"+Math.atan(2.3)); //計(jì)算三角余弦。 System.out.println("Math.cos(1.57):"+Math.cos(1.57)); //計(jì)算值的雙曲余弦。 System.out.println("Math.cosh(1.2):"+Math.cosh(1.2));Math類 //計(jì)算正弦 System.out.println("Math.sin(1.57):"+Math.sin(1.57)); //計(jì)算雙曲正弦 System.out.println("Math.sinh(1.2):"+Math.sinh(1.2)); //計(jì)算三角正切 System.out.println("Math.tan(0.8):"+Math.tan(0.8)); //計(jì)算雙曲正切 System.out.println("Math.tanh(2.1):"+Math.tanh(2.1)); /*---------下面是取整運(yùn)算---------*/ //取整,返回小于目標(biāo)數(shù)的最大整數(shù)。 System.out.println("Math.floor(-1.2):"+Math.floor(-1.2)); //取整,返回大于目標(biāo)數(shù)的最小整數(shù)。 System.out.println("Math.ceil(1.2):"+Math.ceil(1.2)); //四舍五入取整 System.out.println("Math.round(2.3):"+Math.round(2.3)); /*---------下面是乘方、開(kāi)方、指數(shù)運(yùn)算---------*/ //計(jì)算平方根。 System.out.println("Math.sqrt(2.3):"+Math.sqrt(2.3)); //計(jì)算立方根。 System.out.println("Math.cbrt(9):"+Math.cbrt(9));Math類 //返回歐拉數(shù)e的n次冪。 System.out.println("Math.exp(2):"+Math.exp(2)); //計(jì)算乘方 System.out.println("Math.pow(3,2):"+Math.pow(3,2)); //計(jì)算自然對(duì)數(shù) System.out.println("Math.log(12):"+Math.log(12)); //計(jì)算底數(shù)為10的對(duì)數(shù)。 System.out.println("Math.log10(9):"+Math.log10(9)); //返回參數(shù)與1之和的自然對(duì)數(shù)。 System.out.println("Math.log1p(9):"+Math.log1p(9)); //計(jì)算絕對(duì)值。 System.out.println("Math.abs(-4.5):"+Math.abs(-4.5)); /*---------下面是大小相關(guān)的運(yùn)算---------*/ //找出最大值 System.out.println("Math.max(2.3,4.5):"+Math.max(2.3,4.5)); //計(jì)算最小值 System.out.println("Math.min(1.2,3.4):"+Math.min(1.2,3.4)); //返回一個(gè)偽隨機(jī)數(shù),該值大于等于0.0且小于1.0。 System.out.println("Math.random():"+Math.random()); }}Math類程序運(yùn)行結(jié)果如下:Math.toDegrees(1.57):89.95437383553926Math.toRadians(90):1.5707963267948966Math.acos(1.2):NaNMath.asin(0.8):0.9272952180016123Math.atan(2.3):1.1606689862534056Math.cos(1.57):7.963267107332633E-4Math.cosh(1.2):1.8106555673243747Math.sin(1.57):0.9999996829318346Math.sinh(1.2):1.5094613554121725Math.tan(0.8):1.0296385570503641Math.tanh(2.1):0.9704519366134539Math.floor(-1.2):-2.0Math類Math.ceil(1.2):2.0Math.round(2.3):2Math.sqrt(2.3):1.51657508881031Math.cbrt(9):2.080083823051904Math.exp(2):7.38905609893065Math.pow(3,2):9.0Math.log(12):2.4849066497880004Math.log10(9):0.9542425094393249Math.log1p(9):2.302585092994046Math.abs(-4.5):4.5Math.max(2.3,4.5):4.5Math.min(1.2,3.4):1.2Math.random():0.4635451159005677第6節(jié)partDate與Calendar類6.6.1Date類Date類用來(lái)表示日期和時(shí)間,該時(shí)間是一個(gè)長(zhǎng)整型(long),精確到毫秒。其常用的方法如表6-8所示。Date類6.6.1Date類下述案例示例了Date類中常用方法的使用,代碼如下所示?!敬a6.10】DateExample.javapackagecom;importjava.util.Date;publicclassDateExample{ publicstaticvoidmain(String[]args){ //以系統(tǒng)當(dāng)前時(shí)間實(shí)例化一個(gè)Date對(duì)象 DatedateNow=newDate(); //輸出系統(tǒng)當(dāng)前時(shí)間 System.out.println("系統(tǒng)當(dāng)前時(shí)間是:"+dateNow.toString()); //以指定值實(shí)例化一個(gè)Date對(duì)象 DatedateOld=newDate(1000000000000L); //輸出date1 System.out.println("date1是:"+dateOld.toString()); //兩個(gè)日期進(jìn)行比較,并輸出 System.out.println("after()是:"+dateNow.after(dateOld)); System.out.println("before()是:"+dateNow.before(dateOld)); System.out.println("compareTo()是:"+dateNpareTo(dateOld)); }}6.6.1Date類
上述代碼中先使用Date類默認(rèn)的、不帶參數(shù)的構(gòu)造方法創(chuàng)建一個(gè)dateNow對(duì)象,該對(duì)象封裝系統(tǒng)當(dāng)前時(shí)間;然后調(diào)用toString()方法將日期轉(zhuǎn)換為字符串并輸出;再使用Date類帶參數(shù)的構(gòu)造方法創(chuàng)建一個(gè)dateOld對(duì)象;然后使用after()、before()和compareTo()這三個(gè)方法進(jìn)行日期比較。程序運(yùn)行結(jié)果如下:
系統(tǒng)當(dāng)前時(shí)間是:WedJul1815:47:10CST2018date1是:SunSep0909:46:40CST2001after()是:truebefore()是:falsecompareTo()是:16.6.2Calendar類Calendar類是一個(gè)抽象類,在java.util包中。使用Calendar類的static方法getInstance()可以初始化一個(gè)日歷對(duì)象.它為特定瞬間與一組YEAR、MONTH、DAY_OF_MONTH、HOUR等日歷字段之間的轉(zhuǎn)換,和操作日歷字段提供了一些方法。瞬間可用毫秒值來(lái)表示,它是距歷元(即格林威治標(biāo)準(zhǔn)時(shí)間1970年1月1日的00:00:00.000,格里高利歷)的偏移量。Calendar類常用方法如表6-9所示。Calendar類6.6.2Calendar類6.6.2Calendar類6.6.2Calendar類下述案例示例了Calendar類常用方法的使用,代碼如下所示?!敬a6.11】CalendarExample.javapackagecom;importjava.util.*;publicclassCalendarExample{
publicstaticvoidmain(Stringargs[]){
Calendarcalendar=Calendar.getInstance();
calendar.setTime(newDate());
//獲取當(dāng)前時(shí)間的具體值
intyear=calendar.get(Calendar.YEAR);
intmonth=calendar.get(Calendar.MONTH)+1;
intday=calendar.get(Calendar.DAY_OF_MONTH);
inthour=calendar.get(Calendar.HOUR_OF_DAY);
intminute=calendar.get(Calendar.MINUTE);
intsecond=calendar.get(Calendar.SECOND);
System.out.print("現(xiàn)在的時(shí)間是:");
System.out.print(""+year+"年"+month+"月"+day+"日");
System.out.println(hour+"時(shí)"+minute+"分"+second+"秒");
longtime1=calendar.getTimeInMillis();6.6.2Calendar類
//將日歷翻到2015年九月一日,注意8表示九月
inty=2015,m=9,d=1;
calendar.set(y,m-1,d);
longtime2=calendar.getTimeInMillis();
//計(jì)算想個(gè)時(shí)間的天數(shù)
longsubDay=(time2-time1)/(1000*60*60*24);
System.out.println(""+newDate(time2));
System.out.println("與"+newDate(time1));
System.out.println("相隔"+subDay+"天");
}}程序運(yùn)行結(jié)果如下所示:現(xiàn)在的時(shí)間是:2018年7月18日16時(shí)10分58秒TueSep0116:10:58CST2015與WedJul1816:10:58CST2018相隔-1051天第7節(jié)part格式化處理
依賴Locale類,Java提供了一系列的格式其(Formatter)來(lái)完成數(shù)字、貨幣、日期和消息的格式化。格式化處理本節(jié)概述6.7.1數(shù)字格式化
在不同的國(guó)家,數(shù)字表示方式是不一樣的,如在中國(guó)表示的“8,888.8”,而在德國(guó)卻表示未“8.888,8”,因此,對(duì)數(shù)字表示將根據(jù)不同的Locale來(lái)格式化。
在java.text包中提供了一個(gè)NumberFormat類,用于完成對(duì)數(shù)字、百分比進(jìn)行格式化和對(duì)字符串對(duì)象進(jìn)行解析。NumberFormat類提供了大量的靜態(tài)方法用于獲取使用指定Locale對(duì)象封裝的NumberFormat實(shí)例。NumberFormat類的常用方法如表6-10所示。數(shù)字格式化6.7.1數(shù)字格式化
下述案例示例了如何使用NumberFormat實(shí)現(xiàn)數(shù)字格式化處理,代碼如下所示?!敬a6.12】NumberFormatExample.javapackagecom;importjava.text.NumberFormat;importjava.util.Locale;publicclassNumberFormatExample{
publicstaticvoidmain(String[]args){
//需要格式化的數(shù)據(jù)
doublevalue=987654.321;
//設(shè)定三個(gè)Locale
LocalecnLocale=newLocale("zh","CN");//中國(guó),中文
LocaleusLocale=newLocale("en","US");//美國(guó),英文
LocaledeLocal3=newLocale("de","DE");//德國(guó),德語(yǔ)
NumberFormatdNf=NumberFormat.getNumberInstance();
NumberFormatpNf=NumberFormat.getPercentInstance();
//得到三個(gè)local對(duì)應(yīng)的NumberFormat對(duì)象
NumberFormatcnNf=NumberFormat.getNumberInstance(cnLocale);
NumberFormatusNf=NumberFormat.getNumberInstance(usLocale);
NumberFormatdeNf=NumberFormat.getNumberInstance(deLocal3);6.7.1數(shù)字格式化
//將上邊的double數(shù)據(jù)格式化輸出
System.out.println("DefaultPercentFormat:"+pNf.format(value));
System.out.println("DefaultNumberFormat:"+dNf.format(value));
System.out.println("ChinaNumberFormat:"+cnNf.format(value));
System.out.println("UnitedNumberFormat:"+usNf.format(value));
System.out.println("GermanNumberFormat:"+deNf.format(value));
try{ System.out.println(dNf.parse("3.14").doubleValue()); System.out.println(dNf.parse("3.14F").doubleValue()); //下述語(yǔ)句拋出異常 System.out.println(dNf.parse("F3.14").doubleValue());
}catch(Exceptione){ System.out.println(e);
}}}6.7.1數(shù)字格式化
上述代碼中,聲明了中文、英文和德語(yǔ)三個(gè)Locale對(duì)象,并使用相應(yīng)的NumberFormat對(duì)指定的數(shù)據(jù)格式化輸出。另外,parse()方法的返回類型是Number,如果給定的數(shù)字文本格式不正確,則該方法會(huì)拋出ParseException異常。程序運(yùn)行結(jié)果如下:DefaultPercentFormat:98,765,432%DefaultNumberFormat:987,654.321ChinaNumberFormat:987,654.321UnitedNumberFormat:987,654.321GermanNumberFormat:987.654,3213.143.14java.text.ParseException:Unparseablenumber:"F3.14"6.7.2貨幣格式化NumberFormat除了能對(duì)數(shù)字、百分比格式化外,還可以對(duì)貨幣數(shù)據(jù)格式化,貨幣格式化通常是在錢數(shù)前面加上類似于“¥”、“$”的貨幣符號(hào),來(lái)區(qū)分貨幣類型。使用NumberFormat的靜態(tài)方法getCurrencyInstance()方法來(lái)獲取格式器。
下面案例使用NumberFormat類來(lái)實(shí)現(xiàn)對(duì)貨幣格式化處理,代碼如下所示。貨幣格式化6.7.2貨幣格式化【代碼6-13】CurrencyFormatExample.javapackagecom;importjava.text.NumberFormat;importjava.util.Locale;publicclassCurrencyFormatExample{ publicstaticvoidmain(String[]args){ //需要格式化的數(shù)據(jù) doublevalue=987654.321; //設(shè)定Locale LocalecnLocale=newLocale("zh","CN"); LocaleusLocale=newLocale("en","US"); //得到local對(duì)應(yīng)的NumberFormat對(duì)象 NumberFormatcnNf=NumberFormat.getCurrencyInstance(cnLocale); NumberFormatusNf=NumberFormat.getCurrencyInstance(usLocale); //將上邊的double數(shù)據(jù)格式化輸出 System.out.println("ChinaCurrencyFormat:"+cnNf.format(value)); System.out.println("UnitedCurrencyFormat:"+usNf.format(value)); }}
程序運(yùn)行結(jié)果如下:ChinaCurrencyFormat:¥987,654.32UnitedCurrencyFormat:$987,654.32
以貨幣格式輸出數(shù)據(jù)時(shí),會(huì)在數(shù)據(jù)前面添加相應(yīng)的貨幣符號(hào),并且在人民幣和美元的表示中,都精確到了“分”,即小數(shù)點(diǎn)后只保留了兩位,以確保數(shù)據(jù)有實(shí)際意義。6.7.3日期格式化
不同國(guó)家其日期格式也是不同的,例如,中文的日期格式為“xxxx年xx月xx日”,而英文的日期格式是“yyyy-mm-dd”。因此,對(duì)日期和時(shí)間也需要根據(jù)不同的Locale來(lái)格式化。Java語(yǔ)言中,日期和時(shí)間的格式化是通過(guò)DateFormat類來(lái)完成的,該類的使用方式與NumberFormat類相似。DateFormat類的常用方法如表6-11所示日期格式化6.7.3日期格式化
其中,dateStyle日期樣式和timeStyle時(shí)間樣式,這兩個(gè)參數(shù)是DateFormat中定義好的靜態(tài)常量,用于控制輸出日期、時(shí)間的顯示形式,常用的樣式控制有:
●DateFormat.FULL:在zh_CN的Locale下,此格式的日期格式取值類似于“2018年7月20日星期五”,時(shí)間格式取值類似于“上午09時(shí)30分12秒CST”。
●DateFormat.LONG:在zh_CN的Locale下,此格式的日期格式取值類似于“2018年7月20日”,時(shí)間格式取值類似于“上午09時(shí)30分12秒”。
●DateFormat.DEFAULT:在zh_CN的Locale下,此格式的日期格式取值類似于“2018-7-20”,時(shí)間格式取值類似于“9:30:12”。
●DateFormat.SHORT:在zh_CN的Locale下,此格式的日期格式取值類似于“18-7-20”,時(shí)間格式取值類似于“上午9:30:”。
下述案例使用了DateFormat類實(shí)現(xiàn)日期時(shí)間格式化處理,代碼如下所示。6.7.3日期格式化【代碼6.14】DateFormatExample.javapackagecom;importjava.text.DateFormat;importjava.util.Date;importjava.util.Locale;publicclassDateFormatExample{publicstaticvoidprint(Datedate,Localelocale){ //得到對(duì)應(yīng)Locale對(duì)象的日期格式化對(duì)象 DateFormatdf1=DateFormat.getDateTimeInstance(DateFormat.FULL, DateFormat.FULL,locale); DateFormatdf2=DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.LONG,locale); DateFormatdf3=DateFormat.getDateTimeInstance(DateFormat.DEFAULT, DateFormat.DEFAULT,locale); DateFormatdf4=DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT,locale); //格式化日期輸出 System.out.println(df1.format(date)); System.out.println(df2.format(date)); System.out.println(df3.format(date)); System.out.println(df4.format(date));}6.7.3日期格式化publicstaticvoidmain(String[]args){ Datenow=newDate(); LocalecnLocale=newLocale("zh","CN"); LocaleusLocale=newLocale("en","US"); System.out.println("中文格式:"); print(now,cnLocale); System.out.println("英文格式:"); print(now,usLocale);}}程序運(yùn)行結(jié)果如下:中文格式:2018年7月20日星期五上午07時(shí)29分05秒CST2018年7月20日上午07時(shí)29分05秒2018-7-207:29:0518-7-20上午7:29英文格式:Friday,July20,20187:29:05AMCSTJuly20,20187:29:05AMCSTJul20,20187:29:05AM7/20/187:29AM6.7.3日期格式化
除了DateFormat類,Java還提供了更加簡(jiǎn)便的日期格式器SimpleDateFormat類,該類是DateFormat的子類,可以更加靈活地對(duì)日期和時(shí)間進(jìn)行格式化。SimpleDateFormat類的使用非常簡(jiǎn)單,通過(guò)預(yù)定義的模式字符構(gòu)造特定的模式串,然后根據(jù)模式串來(lái)創(chuàng)建SimpleDateFormat格式器對(duì)象,從而通過(guò)此格式器完成指定日期時(shí)間的格式化。例如:’D’表示一年中的第幾天,’d’表示一月中的第幾天,’E’代表星期中的第幾天等,其他可以使用的模式字符串可參看Java提供的API幫助文檔,表6-12列舉了一部分日期模式字符。6.7.3日期格式化
通過(guò)模式字符可以構(gòu)建控制日期、時(shí)間格式的模式串,在zh_CN的Locale下,自定義模式串及其對(duì)應(yīng)的日期、時(shí)間格式示例如表6-13所示。
如果需要在模式串中使用的字符(字符串)不被SimpleDateFormat解釋,可以在模式串中將其用單引號(hào)括起來(lái);SimpleDateFormat一般不用于國(guó)際化處理,而是為了以特定模式輸出日期和時(shí)間,以便本地化的使用。
下述案例示例如何使用SimpleDateFormat類實(shí)現(xiàn)日期時(shí)間格式化處理,代碼如下所示。6.7.3日期格式化【代碼6.15】SimpleDateFormatExample.javapackagecom;importjava.text.SimpleDateFormat;importjava.util.Date;publicclassSimpleDateFormatExample{publicstaticvoidmain(String[]args){ Datenow=newDate(); SimpleDateFormatsdf1=newSimpleDateFormat("yyyy-MM-ddHH:mm:ss"); System.out.println(sdf1.format(now)); SimpleDateFormatsdf2= newSimpleDateFormat("yyyy年MM月dd日HH時(shí)mm分ss秒"); System.out.println(sdf2.format(now)); SimpleDateFormatsdf3= newSimpleDateFormat("現(xiàn)在是yyyy年MM月dd日,是今年的第D天"); System.out.pr
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年高中班主任個(gè)人工作方案
- 2025年大班幼師個(gè)人工作方案演講稿
- ECR共同體 2025年全球趨勢(shì)白皮書(shū)
- 《PHP開(kāi)發(fā)技術(shù)》考試題(2)及答案
- PHP程序設(shè)計(jì)項(xiàng)目化教程電子教案14 問(wèn)卷統(tǒng)計(jì)器-文件和目錄操作
- 2025年球節(jié)點(diǎn)金屬網(wǎng)架螺栓項(xiàng)目可行性研究報(bào)告
- 2025年玻璃鋼采光瓦設(shè)備項(xiàng)目可行性研究報(bào)告
- 2025年特優(yōu)大米項(xiàng)目可行性研究報(bào)告
- 2025年煮練聯(lián)合機(jī)項(xiàng)目可行性研究報(bào)告
- 徐州幼兒師范高等??茖W(xué)?!顿Y產(chǎn)評(píng)估B》2023-2024學(xué)年第二學(xué)期期末試卷
- 2025購(gòu)銷商品合同模板
- kmeans聚類算法原理試題及答案
- 2024年山西華陽(yáng)新材料科技集團(tuán)有限公司招聘筆試真題
- 2025年03月雙鴨山市“市委書(shū)記進(jìn)校園”引才活動(dòng)黑龍江能源職業(yè)學(xué)院13人筆試歷年典型考題(歷年真題考點(diǎn))解題思路附帶答案詳解
- 2025年湖南興湘投資控股集團(tuán)有限公司春季校園招聘28人筆試參考題庫(kù)附帶答案詳解
- 隧道二襯臺(tái)車安裝拆除施工方案
- 農(nóng)業(yè)機(jī)械設(shè)備使用與操作指南
- 2025年03月州省氣象部門第二批公開(kāi)招聘應(yīng)屆高校畢業(yè)生34人(第6號(hào))筆試歷年參考題庫(kù)考點(diǎn)剖析附解題思路及答案詳解
- 南通市如東縣事業(yè)單位招聘真題2024
- 圖書(shū)管理員的崗位技能要求與試題及答案
- 自體輸血管理制度與技術(shù)規(guī)范
評(píng)論
0/150
提交評(píng)論