![《Java程序設計教程》課件第六章:Java常用類_第1頁](http://file4.renrendoc.com/view12/M09/2D/16/wKhkGWZ38nGAeNWGAAICb9HcXPI755.jpg)
![《Java程序設計教程》課件第六章:Java常用類_第2頁](http://file4.renrendoc.com/view12/M09/2D/16/wKhkGWZ38nGAeNWGAAICb9HcXPI7552.jpg)
![《Java程序設計教程》課件第六章:Java常用類_第3頁](http://file4.renrendoc.com/view12/M09/2D/16/wKhkGWZ38nGAeNWGAAICb9HcXPI7553.jpg)
![《Java程序設計教程》課件第六章:Java常用類_第4頁](http://file4.renrendoc.com/view12/M09/2D/16/wKhkGWZ38nGAeNWGAAICb9HcXPI7554.jpg)
![《Java程序設計教程》課件第六章:Java常用類_第5頁](http://file4.renrendoc.com/view12/M09/2D/16/wKhkGWZ38nGAeNWGAAICb9HcXPI7555.jpg)
版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
本章學習目標:●
掌握基本類型的封裝類的使用●
掌握Object類的使用●
掌握字符串類的使用●
掌握Scanner、Math和日期類的使用●
理解格式化處理的應用第六章Java常用類
本章主要介紹Java系統(tǒng)提供的一些程序員在項目開發(fā)中經(jīng)常用到的類和方法。掌握了這些基本類與常用方法的應用,為以后項目開發(fā)和深入學習打好基礎。第1節(jié)part基本類型的封裝類Java為其8個基本數(shù)據(jù)類型提供了對應的封裝類,通過這些封裝類可以把8個基本類型的值封裝成對象進行使用。從JDK1.5開始,Java允許將基本類型的值直接賦值給對應的封裝類對象。8個基本數(shù)據(jù)類型對應的封裝類如表6-1所示?;绢愋偷姆庋b類基本類型的封裝類
基本類型的封裝類除了Integer和Character寫法有點特殊例外,其他的基本類型對應的封裝類都是將首字母大寫即可。
從JDK1.5之后,Java提供了自動裝箱(Autoboxing)和自動拆箱(AutoUnboxing)功能,因此,基本類型變量和封裝類之間可以直接賦值,例如:Integerobj=10;intb=obj;
自動裝箱和自動拆箱大大簡化了基本數(shù)據(jù)類型和封裝類之間的轉換過程,但進行自動裝箱和拆箱操作時,必須注意類型匹配,例如Integer只能和int匹配,不能跟boolean或char等其他類型匹配基本類型的封裝類
除此之外,封裝類還可以實現(xiàn)基本類型變量和字符串之間的轉換:基本類型的封裝類2、將基本類型的值轉換成字符串有三種方式:●直接使用一個空字符串來連接數(shù)值即可?!裾{(diào)用封裝類提供的toString()靜態(tài)方法。●調(diào)用String類提供的valueOf()靜態(tài)方法。例如,將基本類型的值轉換為字符串Strings1=""+23;Strings2=Integer.toString(100);Strings3=String.valueOf(66);1、將字符串的值轉換為基本類型的值有兩種方式:●直接利用封裝類的構造方法,即Xxx(Strings)構造方法●調(diào)用封裝類提供的parseXxx(Strings)靜態(tài)方法例如:將字符串的值轉換為基本類型intnum1=newInteger("10");intnum2=Integer.parseInt("123");如圖6.1所示演示了基本類型變量和字符串之間的轉換。基本類型的封裝類下述案例示例了Java基本數(shù)據(jù)類型變量和封裝類之間轉換的使用,代碼如下所示。【代碼6.1】FengZhangExample.javapackagecom;publicclassFengZhangExample{publicstaticvoidmain(String[]args){//直接把一個整數(shù)值賦給Integer對象IntegerintObj=5;//直接把一個boolean值賦給一個Boolean對象BooleanboolObj=true;
//Integer對象與整數(shù)進行算數(shù)運算inta=intObj+10;System.out.println(a);System.out.println(boolObj);
//字符串與基本類型變量之間的轉換StringintStr="123";//把一個特定字符串轉換成int變量intit1=Integer.parseInt(intStr);intit2=newInteger(intStr);System.out.println(it1+","+it2);基本類型的封裝類StringfloatStr="4.56f";//把一個特定字符串轉換成float變量floatft1=Float.parseFloat(floatStr);floatft2=newFloat(floatStr);System.out.println(ft1+","+ft2);
//將一個double類型變量轉換為字符串Stringds1=""+3.14;Stringds2=Double.toString(3.15D);Stringds3=String.valueOf(3.16d);System.out.println(ds1+","+ds2+","+ds3);
//將一個boolean類型變量轉換為字符串Stringbs1=""+true;Stringbs2=Boolean.toString(true);Stringbs3=String.valueOf(true);System.out.println(bs1+","+bs2+","+bs3);}}基本類型的封裝類程序運行結果如下:15true123,1234.56,4.563.14,3.15,3.16true,true,true第2節(jié)partObject類Java基礎類庫提供了一些常用的核心類,包括Object、String、Math等。其中,Object對象類定義在java.lang包中,是所有類的頂級父類。在Java體系中,所有類都直接或間接地繼承了Object類。因此,任何Java對象都可以調(diào)用Object類中的方法,而且任何類型的對象都可以賦給Object類型的變量。Object類提供了所有類都需要的一些方法,常用的方法及描述如表6-2所示。Object類本節(jié)概述6.2.1equals()方法
兩個基本類型的變量比較是否相等時直接使用“==”運算符即可,但兩個引用類型的對象比較是否相等時則有兩種方式:使用“==”運算符或使用equals()方法。在比較兩個對象是否相等時,“==”運算符和equals()方法是有區(qū)別的:
●“==”運算符比較的是兩個對象地址是否相同,即引用的是同一個對象。
●equals()方法通??梢杂糜诒容^兩個對象的內(nèi)容是否相同。
下述案例分別使用“==”運算符和equals()方法來判斷兩個對象是否相等,代碼如下所示。equal()方法6.2.1equals方法【代碼6.2】ObjectEqualsExample.javapackagecom;publicclassObjectEqualsExample{publicstaticvoidmain(String[]args){//定義4個整型類對象Integernum1=newInteger(8);Integernum2=newInteger(10);Integernum3=newInteger(8);//將num1對象賦值給num4Integernum4=num1;System.out.println("num1和自身進行比較:");//分別使用==和equals()方法對num1進行自身比較System.out.println("num1==num1是"+(num1==num1));System.out.println("num1.equals(num1)是"+num1.equals(num1));System.out.println("—————————————————");System.out.println("num1和num2兩個不同值的對象進行比較:");//num1和num2兩個不同值的對象進行比較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兩個相同值的對象進行比較:");//num1和num3兩個相同值的對象進行比較//num1和num3引用指向的對象的值一樣,但對象空間不一樣System.out.println("num1==num3是"+(num1==num3));System.out.println(“num1.equals(num3)是”+num1.equals(num3));System.out.println("——————————————————");System.out.println("num1和num4兩個同一引用的對象進行比較:");//num2和num4引用指向同一個對象空間System.out.println("num2==num4是"+(num1==num4));System.out.println("num2.equals(num4)是"+num1.equals(num4));}}6.2.1equals方法
上述代碼中num1對象分別跟自身num1、不同值num2、相同值num3以及同一引用num4這幾個對象進行比較,通過分析運行結果可以得出:使用“==”運算符將嚴格比較這兩個變量引用是否相同,即地址是否相同,是否指向內(nèi)存同一空間,只有當兩個變量指向同一個內(nèi)存地址即同一個對象時才返回true,否則返回false;Integer的equals()方法則比較兩個對象的內(nèi)容是否相同,只要兩個對象的內(nèi)容值相等,哪怕是兩個不同的對象(引用地址不同),依然會返回true。程序運行結果如下:num1和自身進行比較:num1==num1是truenum1.equals(num1)是true—————————————————num1和num2兩個不同值的對象進行比較:num1==num2是falsenum1.equals(num2)是false—————————————————num1和num3兩個相同值的對象進行比較:num1==num3是falsenum1.equals(num3)是true—————————————————num1和num4兩個同一引用的對象進行比較:num2==num4是truenum2.equals(num4)是true6.2.2toString()方法Object類的toString()方法是一個非常特殊的方法,它是一個“自我描述”的方法,該方法返回當前對象的字符串表示。當使用System.out.println(obj)輸出語句直接打印對象時,或字符串與對象進行連接操作時,例如:"info"+obj,系統(tǒng)都會自動調(diào)用對象的toString()方法。Object類中的toString()方法返回包含類名和散列碼的字符串,具體格式如下:
類名@哈希代碼值
下述案例定義了一個Book.java類,并重寫了toString()方法,代碼如下所示。toString()方法6.2.2toString()方法packagecom;publicclassBook{//屬性privateStringbookName;//書名privatedoubleprice;//價格privateStringpublisher;//出版社//默認構造方法publicBook(){}//重載構造方法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;}//重寫toString()方法publicStringtoString(){returnthis.bookName+",¥"+this.price+","+this.publisher;}}
上述代碼重寫了toString()方法,該方法將3個屬性值連成一個字符串并返回。6.2.2toString()方法
下述案例編寫了一個測試類,示例了toString()方法的功能,代碼如下所示?!敬a6.4】BookExample.javapackagecom;publicclassBookExample{publicstaticvoidmain(String[]args){ Bookb1=newBook("《Java面向對象程序設計》",38,"重慶大學出版社"); System.out.println(b1); Bookb2=newBook("《MySql數(shù)據(jù)庫程序設計》",26,"清華大學出版社"); Strings=b1+"\n"+b2; System.out.println(s);}}
上述代碼使用System.out.println()直接輸出對象b1的信息,以及將b1和b2進行字符串連接,運行出來結果如下所示:《Java面向對象程序設計》,¥38.0,重慶大學出版社《Java面向對象程序設計》,¥38.0,重慶大學出版社《MySql數(shù)據(jù)庫程序設計》,¥26.0,清華大學出版社6.2.2toString()方法
將Book類中重寫的toString()方法注釋掉,使用Object原來默認的toString()方法,則運行結果如下所示:com.Book@6fd46259com.Book@6fd46259com.Book@6084fa6a
當類沒有重寫toString()方法時,系統(tǒng)會自動調(diào)用Object默認的toString()方法,顯示的字符串格式是“類名@哈希代碼值”。第3節(jié)part字符串類
字符串就是用雙引號引起來的一連串的字符序列,Java提供了String、StringBuffer和StringBuilder三個類來封裝字符串,并提供了一系列方法來操作字符串對象。String、StringBuffer和StringBuilder三者之間區(qū)別如下:
●String創(chuàng)建的字符串是不可變的,即當使用String創(chuàng)建一個字符串后,該字符串在內(nèi)存中是一個不可改變的字符序列。如果改變字符串變量的值,其實際是在內(nèi)存中創(chuàng)建一個新的字符串,字符串變量將引用新創(chuàng)建的字符串地址,而原來的字符串在內(nèi)存中依然存在且內(nèi)容不變,直至Java的垃圾回收系統(tǒng)對其進行銷毀。
●StringBuffer創(chuàng)建的字符串是可變的,當使用StringBuffer創(chuàng)建一個字符串后,該字符串的內(nèi)容可以通過append()、insert()、setCharAt()等方法進行改變,而字符串變量所引用的地址一直不變,如果想獲得StringBuffer的最終內(nèi)容,可以通過調(diào)用它的toString()方法轉換成一個String對象。
●StringBuilder是JDK1.5新增的一個類。與StringBuffer類似,也是創(chuàng)建一個可變的字符串,不同的是StringBuffer是線程安全的,而StringBuilder沒有實現(xiàn)線程安全,因此性能較好。通常,如果只需要創(chuàng)建一個內(nèi)容可變的字符串對象,不涉及線程安全、同步方面的問題,應優(yōu)先考慮使用StringBuilder類。字符串類本節(jié)概述6.3.1String類String類6.3.1String類6.3.1String類下述案例示例了String類常用方法的應用,代碼如下所示?!敬a6.5】StringExample.javapackagecom;publicclassStringExample{publicstaticvoidmain(String[]args){Stringstr=“I‘mWangFeng,welcometoChongQing!”;System.out.println("字符串內(nèi)容:"+str);System.out.println("字符串長度:"+str.length());System.out.println("截取從下標5開始的子字符串:“+str.substring(5));System.out.println("截取從下標5開始到10結束的子字符串:”+str.substring(5,10));System.out.println("轉換成小寫:"+str.toLowerCase());System.out.println("轉換成大寫:"+str.toUpperCase());//驗證字符串是否全是數(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類程序運行結果如下:字符串內(nèi)容:I'mWangFeng,welcometoChongQing!字符串長度:34截取從下標5開始的子字符串:angFeng,welcometoChongQing!截取從下標5開始到10結束的子字符串:angFe轉換成小寫:i'mwangfeng,welcometochongqing!轉換成大寫:I'MWANGFENG,WELCOMETOCHONGQING!該字符串有非數(shù)字存在!
在Java程序中,經(jīng)常會使用“+”運算符連接字符串,但不同情況下字符串連接的結果也是不同的。使用“+”運算符連接字符串時注意以下三點:
●字符串與字符串進行“+”連接時:第二個字符串會連接到第一個字符串之后。
●字符串與其他類型進行“+”連接時:因字符串在前面,所以其他類型的數(shù)據(jù)都將轉換成字符串與前面的字符串進行連接。
●其他類型與字符串進行“+”連接時:因字符串在后面,其他類型按照從左向右進行運算,最后再與字符串進行連接。6.3.2StringBuffer類StringBuffer類StringBuffer字符緩沖區(qū)類是一種線程安全的可變字符序列,其常用的方法如表6-4所示。6.3.2StringBuffer類6.3.2StringBuffer類下述案例示例了StringBuffer類常用方法的應用,代碼如下所示?!敬a6.6】StringBufferExample.javapackagecom;publicclassStringBufferExample{publicstaticvoidmain(String[]args){StringBuffersb=newStringBuffer(“My”);System.out.println("初始長度:"+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);//反轉sb.reverse();System.out.println("反轉后:"+sb);System.out.println("當前字符串長度:"+sb.length());System.out.println("當前容量是:"+sb.capacity());//改變StringBuilder的長度,將只保留前面部分sb.setLength(5);System.out.println("改變長度后:"+sb);}}程序運行結果如下:初始長度:2初始容量是:18追加后:Myjava插入后:helloMyjava替換后:hello,Myjava刪除后:helloMyjava反轉后:avajyMolleh當前字符串長度:11當前容量是:18改變長度后:avajy6.3.3StringBuilder類StringBuilder類StringBuilder字符串生成器類與StringBuffer類類似,也是創(chuàng)建可變的字符串序列,只不過沒有線程安全控制,StringBuilder類常用的方法如表6-5所示。6.3.3StringBuilder類6.3.3StringBuilder類下述案例示例了StringBuilder類常用方法的應用,代碼如下所示?!敬a6.7】StringBuilderExample.javapackagecom;publicclassStringBuilderExample{publicstaticvoidmain(String[]args){ StringBuildersb=newStringBuilder("My"); System.out.println("初始長度:"+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類 //反轉 sb.reverse(); System.out.println("反轉后:"+sb); System.out.println("當前字符串長度:"+sb.length()); System.out.println("當前容量是:"+sb.capacity()); //改變StringBuilder的長度,將只保留前面部分 sb.setLength(5); System.out.println("改變長度后:"+sb);}}6.3.3StringBuilder類程序運行結果如下:初始長度:2初始容量是:18追加后:Myjava插入后:helloMyjava替換后:hello,Myjava刪除后:helloMyjava反轉后:avajyMolleh當前字符串長度:11當前容量是:18改變長度后:avajy
通過上述代碼及運行結果可以看出,StringBuilder類除了在構造方法上與StringBuffer不同,其他方法的使用都一樣。StringBuilder和StringBuffer都有兩個方法:length()和capacity(),其中l(wèi)ength()方法表示字符序列的長度,而capacity()方法表示容量,通常程序無須關心其容量。第4節(jié)partScanner類Scanner掃描器類在java.util包中,可以獲取用戶從鍵盤輸入的不同數(shù)據(jù),以完成數(shù)據(jù)的輸入操作,同時也可以對輸入的數(shù)據(jù)進行驗證。Scanner類常用的方法如表6-6所示。Scanner類Scanner類下述案例示例了Scanner類常用方法的應用,代碼如下所示?!敬a6.8】ScannerExample.javapackagecom;importjava.util.Scanner;publicclassScannerExample{
publicstaticvoidmain(String[]args){
//創(chuàng)建Scanner對象,從鍵盤接收數(shù)據(jù)
Scannersc=newScanner(System.in);
System.out.print("請輸入
一個字符串(不帶空格):");
//接收字符串
Strings1=sc.next();
System.out.println("s1="+s1);
System.out.print("請輸入整數(shù):");
//接收整數(shù)
inti=sc.nextInt();
System.out.println("i="+i);
System.out.print("請輸入浮點數(shù):");
Scanner類//接收浮點數(shù) floatf=sc.nextFloat(); System.out.println("f="+f);
System.out.print("請輸入一個字符串(帶空格):");
//接收字符串,默認情況下只能取出空格之前的數(shù)據(jù)
Strings2=sc.next();
System.out.println("s2="+s2);
//設置讀取的分隔符為回車
sc.useDelimiter("\n");
//接收上次掃描剩下的空格之后的數(shù)據(jù)
Strings3=sc.next();
System.out.println("s3="+s3);
System.out.print("請輸入一個字符串(帶空格):");
Strings4=sc.next();
System.out.println("s4="+s4);
}}程序運行結果如下:請輸入一個字符串(不帶空格):xscs1=xsc請輸入整數(shù):34i=34請輸入浮點數(shù):5.6f=5.6請輸入一個字符串(帶空格):csvbgns2=csvs3=bgn
請輸入一個字符串(帶空格):567879s4=567879Scanner類
通過運行結果可以看出,默認情況下,next()方法只掃描接收空格之前的內(nèi)容,如果希望連空格一起接收,則可以使用useDelimiter()方法設置分隔符后再接收。第5節(jié)partMath類Math類包含常用的執(zhí)行基本數(shù)學運算的方法,如初等指數(shù)、對數(shù)、平方根和三角函數(shù)等。Math類提供的方法都是靜態(tài)的,可以直接調(diào)用,無需實例化。Math類常用的方法如表6-7所示。Math類Math類Math類除了提供大量的靜態(tài)方法之外,還提供了兩個靜態(tài)常量:PI和E,正如其名字所暗示的,分別表示л和e的值。
下述案例示例了Math類中常用方法的使用,代碼如下所示?!敬a6.9】MathExample.javapackagecom;publicclassMathExample{ publicstaticvoidmain(String[]args){ /*---------下面是三角運算---------*/ //將弧度轉換角度 System.out.println("Math.toDegrees(1.57):"+Math.toDegrees(1.57)); //將角度轉換為弧度 System.out.println("Math.toRadians(90):"+Math.toRadians(90)); //計算反余弦,返回的角度范圍在0.0到pi之間。 System.out.println("Math.acos(1.2):"+Math.acos(1.2)); //計算反正弦;返回的角度范圍在-pi/2到pi/2之間。 System.out.println("Math.asin(0.8):"+Math.asin(0.8)); //計算反正切;返回的角度范圍在-pi/2到pi/2之間。 System.out.println("Math.atan(2.3):"+Math.atan(2.3)); //計算三角余弦。 System.out.println("Math.cos(1.57):"+Math.cos(1.57)); //計算值的雙曲余弦。 System.out.println("Math.cosh(1.2):"+Math.cosh(1.2));Math類 //計算正弦 System.out.println("Math.sin(1.57):"+Math.sin(1.57)); //計算雙曲正弦 System.out.println("Math.sinh(1.2):"+Math.sinh(1.2)); //計算三角正切 System.out.println("Math.tan(0.8):"+Math.tan(0.8)); //計算雙曲正切 System.out.println("Math.tanh(2.1):"+Math.tanh(2.1)); /*---------下面是取整運算---------*/ //取整,返回小于目標數(shù)的最大整數(shù)。 System.out.println("Math.floor(-1.2):"+Math.floor(-1.2)); //取整,返回大于目標數(shù)的最小整數(shù)。 System.out.println("Math.ceil(1.2):"+Math.ceil(1.2)); //四舍五入取整 System.out.println("Math.round(2.3):"+Math.round(2.3)); /*---------下面是乘方、開方、指數(shù)運算---------*/ //計算平方根。 System.out.println("Math.sqrt(2.3):"+Math.sqrt(2.3)); //計算立方根。 System.out.println("Math.cbrt(9):"+Math.cbrt(9));Math類 //返回歐拉數(shù)e的n次冪。 System.out.println("Math.exp(2):"+Math.exp(2)); //計算乘方 System.out.println("Math.pow(3,2):"+Math.pow(3,2)); //計算自然對數(shù) System.out.println("Math.log(12):"+Math.log(12)); //計算底數(shù)為10的對數(shù)。 System.out.println("Math.log10(9):"+Math.log10(9)); //返回參數(shù)與1之和的自然對數(shù)。 System.out.println("Math.log1p(9):"+Math.log1p(9)); //計算絕對值。 System.out.println("Math.abs(-4.5):"+Math.abs(-4.5)); /*---------下面是大小相關的運算---------*/ //找出最大值 System.out.println("Math.max(2.3,4.5):"+Math.max(2.3,4.5)); //計算最小值 System.out.println("Math.min(1.2,3.4):"+Math.min(1.2,3.4)); //返回一個偽隨機數(shù),該值大于等于0.0且小于1.0。 System.out.println("Math.random():"+Math.random()); }}Math類程序運行結果如下: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類用來表示日期和時間,該時間是一個長整型(long),精確到毫秒。其常用的方法如表6-8所示。Date類6.6.1Date類下述案例示例了Date類中常用方法的使用,代碼如下所示?!敬a6.10】DateExample.javapackagecom;importjava.util.Date;publicclassDateExample{ publicstaticvoidmain(String[]args){ //以系統(tǒng)當前時間實例化一個Date對象 DatedateNow=newDate(); //輸出系統(tǒng)當前時間 System.out.println("系統(tǒng)當前時間是:"+dateNow.toString()); //以指定值實例化一個Date對象 DatedateOld=newDate(1000000000000L); //輸出date1 System.out.println("date1是:"+dateOld.toString()); //兩個日期進行比較,并輸出 System.out.println("after()是:"+dateNow.after(dateOld)); System.out.println("before()是:"+dateNow.before(dateOld)); System.out.println("compareTo()是:"+dateNpareTo(dateOld)); }}6.6.1Date類
上述代碼中先使用Date類默認的、不帶參數(shù)的構造方法創(chuàng)建一個dateNow對象,該對象封裝系統(tǒng)當前時間;然后調(diào)用toString()方法將日期轉換為字符串并輸出;再使用Date類帶參數(shù)的構造方法創(chuàng)建一個dateOld對象;然后使用after()、before()和compareTo()這三個方法進行日期比較。程序運行結果如下:
系統(tǒng)當前時間是:WedJul1815:47:10CST2018date1是:SunSep0909:46:40CST2001after()是:truebefore()是:falsecompareTo()是:16.6.2Calendar類Calendar類是一個抽象類,在java.util包中。使用Calendar類的static方法getInstance()可以初始化一個日歷對象.它為特定瞬間與一組YEAR、MONTH、DAY_OF_MONTH、HOUR等日歷字段之間的轉換,和操作日歷字段提供了一些方法。瞬間可用毫秒值來表示,它是距歷元(即格林威治標準時間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());
//獲取當前時間的具體值
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)在的時間是:");
System.out.print(""+year+"年"+month+"月"+day+"日");
System.out.println(hour+"時"+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();
//計算想個時間的天數(shù)
longsubDay=(time2-time1)/(1000*60*60*24);
System.out.println(""+newDate(time2));
System.out.println("與"+newDate(time1));
System.out.println("相隔"+subDay+"天");
}}程序運行結果如下所示:現(xiàn)在的時間是:2018年7月18日16時10分58秒TueSep0116:10:58CST2015與WedJul1816:10:58CST2018相隔-1051天第7節(jié)part格式化處理
依賴Locale類,Java提供了一系列的格式其(Formatter)來完成數(shù)字、貨幣、日期和消息的格式化。格式化處理本節(jié)概述6.7.1數(shù)字格式化
在不同的國家,數(shù)字表示方式是不一樣的,如在中國表示的“8,888.8”,而在德國卻表示未“8.888,8”,因此,對數(shù)字表示將根據(jù)不同的Locale來格式化。
在java.text包中提供了一個NumberFormat類,用于完成對數(shù)字、百分比進行格式化和對字符串對象進行解析。NumberFormat類提供了大量的靜態(tài)方法用于獲取使用指定Locale對象封裝的NumberFormat實例。NumberFormat類的常用方法如表6-10所示。數(shù)字格式化6.7.1數(shù)字格式化
下述案例示例了如何使用NumberFormat實現(xiàn)數(shù)字格式化處理,代碼如下所示?!敬a6.12】NumberFormatExample.javapackagecom;importjava.text.NumberFormat;importjava.util.Locale;publicclassNumberFormatExample{
publicstaticvoidmain(String[]args){
//需要格式化的數(shù)據(jù)
doublevalue=987654.321;
//設定三個Locale
LocalecnLocale=newLocale("zh","CN");//中國,中文
LocaleusLocale=newLocale("en","US");//美國,英文
LocaledeLocal3=newLocale("de","DE");//德國,德語
NumberFormatdNf=NumberFormat.getNumberInstance();
NumberFormatpNf=NumberFormat.getPercentInstance();
//得到三個local對應的NumberFormat對象
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()); //下述語句拋出異常 System.out.println(dNf.parse("F3.14").doubleValue());
}catch(Exceptione){ System.out.println(e);
}}}6.7.1數(shù)字格式化
上述代碼中,聲明了中文、英文和德語三個Locale對象,并使用相應的NumberFormat對指定的數(shù)據(jù)格式化輸出。另外,parse()方法的返回類型是Number,如果給定的數(shù)字文本格式不正確,則該方法會拋出ParseException異常。程序運行結果如下: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除了能對數(shù)字、百分比格式化外,還可以對貨幣數(shù)據(jù)格式化,貨幣格式化通常是在錢數(shù)前面加上類似于“¥”、“$”的貨幣符號,來區(qū)分貨幣類型。使用NumberFormat的靜態(tài)方法getCurrencyInstance()方法來獲取格式器。
下面案例使用NumberFormat類來實現(xiàn)對貨幣格式化處理,代碼如下所示。貨幣格式化6.7.2貨幣格式化【代碼6-13】CurrencyFormatExample.javapackagecom;importjava.text.NumberFormat;importjava.util.Locale;publicclassCurrencyFormatExample{ publicstaticvoidmain(String[]args){ //需要格式化的數(shù)據(jù) doublevalue=987654.321; //設定Locale LocalecnLocale=newLocale("zh","CN"); LocaleusLocale=newLocale("en","US"); //得到local對應的NumberFormat對象 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)); }}
程序運行結果如下:ChinaCurrencyFormat:¥987,654.32UnitedCurrencyFormat:$987,654.32
以貨幣格式輸出數(shù)據(jù)時,會在數(shù)據(jù)前面添加相應的貨幣符號,并且在人民幣和美元的表示中,都精確到了“分”,即小數(shù)點后只保留了兩位,以確保數(shù)據(jù)有實際意義。6.7.3日期格式化
不同國家其日期格式也是不同的,例如,中文的日期格式為“xxxx年xx月xx日”,而英文的日期格式是“yyyy-mm-dd”。因此,對日期和時間也需要根據(jù)不同的Locale來格式化。Java語言中,日期和時間的格式化是通過DateFormat類來完成的,該類的使用方式與NumberFormat類相似。DateFormat類的常用方法如表6-11所示日期格式化6.7.3日期格式化
其中,dateStyle日期樣式和timeStyle時間樣式,這兩個參數(shù)是DateFormat中定義好的靜態(tài)常量,用于控制輸出日期、時間的顯示形式,常用的樣式控制有:
●DateFormat.FULL:在zh_CN的Locale下,此格式的日期格式取值類似于“2018年7月20日星期五”,時間格式取值類似于“上午09時30分12秒CST”。
●DateFormat.LONG:在zh_CN的Locale下,此格式的日期格式取值類似于“2018年7月20日”,時間格式取值類似于“上午09時30分12秒”。
●DateFormat.DEFAULT:在zh_CN的Locale下,此格式的日期格式取值類似于“2018-7-20”,時間格式取值類似于“9:30:12”。
●DateFormat.SHORT:在zh_CN的Locale下,此格式的日期格式取值類似于“18-7-20”,時間格式取值類似于“上午9:30:”。
下述案例使用了DateFormat類實現(xiàn)日期時間格式化處理,代碼如下所示。6.7.3日期格式化【代碼6.14】DateFormatExample.javapackagecom;importjava.text.DateFormat;importjava.util.Date;importjava.util.Locale;publicclassDateFormatExample{publicstaticvoidprint(Datedate,Localelocale){ //得到對應Locale對象的日期格式化對象 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);}}程序運行結果如下:中文格式:2018年7月20日星期五上午07時29分05秒CST2018年7月20日上午07時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還提供了更加簡便的日期格式器SimpleDateFormat類,該類是DateFormat的子類,可以更加靈活地對日期和時間進行格式化。SimpleDateFormat類的使用非常簡單,通過預定義的模式字符構造特定的模式串,然后根據(jù)模式串來創(chuàng)建SimpleDateFormat格式器對象,從而通過此格式器完成指定日期時間的格式化。例如:’D’表示一年中的第幾天,’d’表示一月中的第幾天,’E’代表星期中的第幾天等,其他可以使用的模式字符串可參看Java提供的API幫助文檔,表6-12列舉了一部分日期模式字符。6.7.3日期格式化
通過模式字符可以構建控制日期、時間格式的模式串,在zh_CN的Locale下,自定義模式串及其對應的日期、時間格式示例如表6-13所示。
如果需要在模式串中使用的字符(字符串)不被SimpleDateFormat解釋,可以在模式串中將其用單引號括起來;SimpleDateFormat一般不用于國際化處理,而是為了以特定模式輸出日期和時間,以便本地化的使用。
下述案例示例如何使用SimpleDateFormat類實現(xiàn)日期時間格式化處理,代碼如下所示。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時mm分ss秒"); System.out.println(sdf2.format(now)); SimpleDateFormatsdf3= newSimpleDateFormat("現(xiàn)在是yyyy年MM月dd日,是今年的第D天"); System.out.pr
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 單親低保申請書范文
- 提高圖像處理速度的具體辦法
- 2024-2025學年廣東省廣州市高三(上)調(diào)研地理試卷(12月份)
- 維保合同范本(2篇)
- 給公司員工做飯的勞務費合同(2篇)
- 一建《建設工程項目管理》試題庫資料練習含【答案】卷24
- 外研版高中英語選擇性必修第四冊UNIT3 Period6課件
- Module 3 Unit 5 Let me show you our new school綜合練習 教科版(含答案)
- 2025年凍熟淡水蝦項目可行性研究報告
- 2025年中國企業(yè)孵化器行業(yè)市場深度分析及投資戰(zhàn)略研究報告
- 二零二五版洗煤廠與礦業(yè)公司合作洗煤業(yè)務合同3篇
- 2025年湖南高速鐵路職業(yè)技術學院高職單招高職單招英語2016-2024歷年頻考點試題含答案解析
- 2024年亳州市蒙城縣縣級公立醫(yī)院招聘筆試真題
- 策略與博弈杜塔中文版
- GA/T 1280-2024銀行自助設備安全性規(guī)范
- 2024預防流感課件完整版
- 2025屆陜西省師范大學附屬中學高三第一次模擬考試數(shù)學試卷含解析
- 人教版七年級音樂教學計劃
- 人教版九上《Unit 9 I like music that I can dance to》 (2)作業(yè)設計
- 2025屆江蘇省常州市高級中學高三第二次模擬考試語文試卷含解析
- GB/T 44895-2024市場和社會調(diào)查調(diào)查問卷編制指南
評論
0/150
提交評論