版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
第3章類的數(shù)據(jù)成員3.1類的數(shù)據(jù)成員概述3.2簡單數(shù)據(jù)類型的使用方法3.3簡單數(shù)據(jù)類型的包裝類3.4字符串數(shù)據(jù)類型的使用方法3.5數(shù)組數(shù)據(jù)類型的使用方法3.6J2SDK幫助文檔的使用3.7Java標識符命名規(guī)范第3章類的數(shù)據(jù)成員學習目標
掌握標識符與關(guān)鍵字的概念;
掌握簡單數(shù)據(jù)類型byte、short、int、long、float、double、
char和boolean等的使用方法;
掌握簡單數(shù)據(jù)類型對應的包裝類的使用方法;
掌握String類型及其常用的操作方法;
掌握數(shù)組的聲明與實例化,理解數(shù)組的一些高級操作;
學會J2SDK幫助文檔的使用方法;
理解軟件開發(fā)中Java語言各種標識符的命名規(guī)則。一個Java語言程序是由一些基本符號組成的字符序列,這些字符序列構(gòu)成一個個類。在第2章中介紹過,類是一種由用戶定義的新型數(shù)據(jù)類型,與整型或?qū)嵭蛿?shù)據(jù)相比,類是一種復雜的數(shù)據(jù)類型,所以也稱為構(gòu)造類型。一個類由表示對象狀態(tài)的屬性和對屬性數(shù)據(jù)進行操作的方法組成,即類是數(shù)據(jù)成員與方法成員的封裝體。本章介紹類的數(shù)據(jù)成員。3.1類的數(shù)據(jù)成員概述數(shù)據(jù)成員是一個類的核心內(nèi)容。設計類的主要內(nèi)容是設計數(shù)據(jù)成員,類中定義的操作也是圍繞著數(shù)據(jù)成員來進行的。同類的對象之所以互不相同,是由于它們有不同的屬性值(即數(shù)據(jù))。如張三和李四都屬于人類,但他們有很多屬性值是不相同的(如姓名、長相、體重、愛好等),所以人們很容易將張三和李四這兩個不同的對象區(qū)分開來。3.1.1數(shù)據(jù)成員的定義格式類的數(shù)據(jù)成員也叫屬性成員,或叫字段(field)。在設計類時,定義數(shù)據(jù)成員的簡單格式為 數(shù)據(jù)成員類型數(shù)據(jù)成員名;例如:intsum;
intmath,english;//注意在程序設計實踐中,一般在一行只定義一個屬性數(shù)據(jù)成員還可在定義時進行賦值初始化,例如:intsum=0;注意:如果一個數(shù)據(jù)成員在定義時進行了賦值初始化,在執(zhí)行構(gòu)造函數(shù)時對該數(shù)據(jù)成員也進行了初始化,則該數(shù)據(jù)成員的值為執(zhí)行構(gòu)造函數(shù)時所賦的值。3.1.2數(shù)據(jù)成員的修飾符數(shù)據(jù)成員的類型前面還可以加修飾符,如第2章介紹的public、private和static。數(shù)據(jù)成員的修飾符可分為存取性修飾符和存在性修飾符兩類。注意:被final修飾的數(shù)據(jù)成員在定義時,一定要賦初值,否則也會出現(xiàn)編譯錯誤。如已有這樣的聲明“finalfloatPI;”,然后在程序的其他地方有賦值語句PI=3.12,這是不允許的。關(guān)于數(shù)據(jù)成員的修飾符問題在第5章中還要詳細介紹。3.2簡單數(shù)據(jù)類型的使用方法數(shù)據(jù)是一個類的核心,類中定義的數(shù)據(jù)要有確定的數(shù)據(jù)類型。數(shù)據(jù)類型可以是簡單類型(如整型、實型等),也可以是復雜類型(如類類型、字符串、數(shù)組等)。本節(jié)介紹簡單數(shù)據(jù)類型。3.2.1簡單數(shù)據(jù)類型簡單數(shù)據(jù)類型在Java語言中也叫原始數(shù)據(jù)類型或基本數(shù)據(jù)類型。Java語言中定義了四類(八種)基本數(shù)據(jù)類型:●整型:byte、short、int和long●浮點型:double和float●字符型:char●邏輯型:boolean每一種數(shù)據(jù)類型有該類型的常量與該類型的變量。每種數(shù)據(jù)類型只能進行一些確定的運算,如邏輯型只進行邏輯運算。注意:所有Java編程語言中的整數(shù)類型都是帶符號的數(shù)。
1.整型整型數(shù)據(jù)類型分為四種:byte、short、int和long。這些不同整型數(shù)據(jù)類型的意義在于它們所占用的內(nèi)存空間大小不同,這也表明它們所能表示的數(shù)值范圍不同。每種整型數(shù)據(jù)類型的取值范圍如表3-1所示。表3-1整數(shù)類型數(shù)據(jù)整數(shù)類型的數(shù)據(jù)可以使用十進制、八進制或十六進制表示,具體表示方法如下:●十進制:用非0開頭的數(shù)值表示,如100和-50等;●八進制:用0開頭的數(shù)值表示,如017等;●十六進制:用0x或0X開頭的數(shù)值表示,數(shù)字10~15分別用字母“A、B、C、D、E和F表示”(也可以使用小寫字母a~f),如0x2F、0Xabc等。注意1:Java缺省的整數(shù)常量類型為int類型,用4個字節(jié)表示。如果要表示long類型整數(shù)常量,則需要給整數(shù)加后綴L或l,表示為長整數(shù)。例如123456L,如果直接寫為123456,則系統(tǒng)會認為是int類型數(shù)據(jù)。注意2:與其他語言(如C語言)不同,Java語言每種整數(shù)類型的長度(即占用的字節(jié)數(shù))在任何系統(tǒng)中都是一樣的。這也是為了保證Java語言的跨平臺性。
2.實型實數(shù)數(shù)據(jù)類型是帶小數(shù)部分的數(shù)據(jù)類型,也叫浮點型。Java語言中包括兩種浮點型數(shù)據(jù):●?float:單精度實數(shù),長度為4字節(jié)(即32位);●?double:雙精度實數(shù),長度為8字節(jié)(即64位)。實型數(shù)據(jù)還可以用科學計數(shù)法表示,如123e3或123E3,其中e或E之前必須有數(shù)字,且e或E后面的指數(shù)必須為整數(shù)。注意1:Java缺省的浮點型常數(shù)為double型。如果要表示float型常量,則要給數(shù)據(jù)加后綴F或f。例如12.34f,若直接寫為12.34,則系統(tǒng)認為是雙精度實數(shù)。在程序中,如果寫floatf=3.14;將產(chǎn)生編譯錯誤。注意2:如果要表示double型,則要給數(shù)據(jù)加后綴D或d(由于系統(tǒng)默認的浮點型常數(shù)為double型,因此也可以不加后綴D或d),如-0.23453D,1.4E+30d。
3.邏輯型邏輯值有兩種狀態(tài),即人們常說的“開”和“關(guān)”、“成立”和“不成立”、“是”和“否”等。在Java語言中,這樣的值用boolean(布爾)類型來表示。boolean型有兩個文字值,即true和false,分別表示“真”和“假”。布爾型變量在程序中的使用方法舉例說明如下:booleanaBooleanVar;//說明aBooleanVar為boolean型變量booleanisStudent=false;//說明變量isStudent是boolean型,并賦以初值false注意:Java語言中不可將布爾類型看成整型值(這與C和C++語言不同)。
4.字符型
Java語言中,字符型是用單引號括起來的一個字符,程序中使用char類型表示。由于Java語言的字符采用Unicode碼,因此一個字符在計算機內(nèi)用16位二進制數(shù)表示,即占兩個字節(jié)。正因為如此,字符型的數(shù)據(jù)在書寫時,可用以\u開頭的4位十六進制數(shù)表示,范圍從?'\u0000'?到?'\uFFFF'。具體一個字符型的量,在程序中可以用下面幾種方式表示:
(1)用Unicode碼表示。如字符型變量letter的值為‘A’,則可以寫為charletter='\u0041';
(2)用ASCII碼表示。對于字符型的量,由于大多數(shù)計算機系統(tǒng)使用ASCII碼表示,而Unicode碼中包含了ASCII碼,因此在Java程序中,為了簡便,大多數(shù)程序員仍使用ASCII字符的書寫習慣,如字符型變量letter的值為'A',則可以寫為charletter='A';它與上面用Unicode碼書寫的語句是等價的。
(3)用整數(shù)表示字符。因為字符型的量在計算機內(nèi)本質(zhì)上保存的是一個兩個字節(jié)的整數(shù),所以字符型變量的取值也可以使用整型常數(shù)(注意不能使用整型的變量),如字符型變量letter的值為'A',則可以寫為charch=65;但要注意,下面的程序片段是錯誤的:inta=65;charch=a;如要正確編譯,只有使用強制類型轉(zhuǎn)換(本節(jié)后面介紹):inta=65;charch=(char)a;注意:在將一個整數(shù)賦給一個字符變量時,整數(shù)的取值范圍要在0~65535之間(即兩個字節(jié)可以表示的無符號數(shù)據(jù)范圍)。如果超出這個范圍,將產(chǎn)生編譯錯誤。
(4)用轉(zhuǎn)義字符。Java語言也允許用轉(zhuǎn)義字符表示一些特殊的字符。之所以叫轉(zhuǎn)義字符,是因為以反斜杠(\)開頭,將其后的字符轉(zhuǎn)變?yōu)榱硗獾暮x。如用字符變量Tab表示制表符,則可以寫為chartab='\t';//而不是字符t表3-2是幾個常用的轉(zhuǎn)義字符。表3-2常用的轉(zhuǎn)義字符
5.數(shù)據(jù)類型轉(zhuǎn)換在同一表達式中,有不同的數(shù)據(jù)類型要參與運算時,要進行數(shù)據(jù)類型轉(zhuǎn)換。
(1)自動類型轉(zhuǎn)換。整型、實型、字符型數(shù)據(jù)可以混合運算,例如:floata=65+'a'+23.23f;運算過程中,不同類型的數(shù)據(jù)會自動轉(zhuǎn)換為同一種數(shù)據(jù)類型(如上面語句中的數(shù)都將轉(zhuǎn)換為float類型),然后進行運算。自動轉(zhuǎn)換的數(shù)據(jù)類型要兼容,并且轉(zhuǎn)換后的數(shù)據(jù)類型比轉(zhuǎn)換前的數(shù)據(jù)類型表示的數(shù)值范圍大。自動轉(zhuǎn)換按低級類型數(shù)據(jù)(指數(shù)據(jù)范圍小、精度低)轉(zhuǎn)換成高級類型數(shù)據(jù)(指數(shù)據(jù)范圍大、精度高)的規(guī)則進行。轉(zhuǎn)換規(guī)則如表3-3所示。表3-3轉(zhuǎn)換規(guī)則注意1:boolean類型量不能與其他類型量之間相互轉(zhuǎn)換。注意2:byte和short類型的數(shù)據(jù)計算結(jié)果為int型。
(2)強制類型轉(zhuǎn)換。在兩種情況下,需要使用強制類型轉(zhuǎn)換:●高級別數(shù)據(jù)類型要轉(zhuǎn)換成低級別數(shù)據(jù)類型?!駷榱颂岣哌\算結(jié)果的精度。如有程序段:inta=15;intb=7;floatc=a/b; //運算結(jié)果為c=2.0floatd=(float)a/b; //運算結(jié)果為c=2.142857強制類型轉(zhuǎn)換的一般格式為:
(類型名)表達式如有程序段:
inti=356;
byteb;
b=(byte)i;//強制轉(zhuǎn)換后丟失一部分數(shù)據(jù),使得b的值為100注意:使用強制類型轉(zhuǎn)換可能會導致數(shù)值溢出或數(shù)據(jù)精度的下降,應盡量避免使用。3.2.2數(shù)據(jù)的運算符數(shù)據(jù)的運算符表示對數(shù)據(jù)要進行的運算方式。運算符按其要求的操作數(shù)個數(shù)分為:●一元運算符:參加運算的操作數(shù)有一個;●二元運算符:參加運算的操作數(shù)有兩個;●三元運算符:參加運算的操作數(shù)有三個。運算符按其功能分為七類:算術(shù)運算符、關(guān)系運算符、邏輯運算符、位運算符、條件運算符、賦值運算符以及一些其他的運算符。
1.算術(shù)運算符算術(shù)運算符用于對整型數(shù)和實型數(shù)進行運算,按其要求的操作數(shù)的個數(shù)分為一元運算符和二元運算符兩類。
(1)一元運算符(++、--)。一元運算符可以位于操作數(shù)的前面,如++x或--x,也可以位于操作數(shù)的后面,如x++、x--等。無論一元運算符位于操作數(shù)的前面或后面,操作數(shù)完成運算后,都把結(jié)果賦給操作數(shù)變量。注意:++x或x++整體參加表達式運算時,表達式的值是不一樣的,這與C語言類似。
(2)二元運算符。二元運算符有+、-、*、/和%,如兩個操作數(shù)都是整型,則結(jié)果為整型,否則為實型。注意1:%運算符表示求整除的余數(shù),它要求兩邊的操作數(shù)均為整型,結(jié)果也為整型。注意2:對于/運算,如果兩個操作數(shù)是整數(shù)時,則結(jié)果也為整數(shù),如17/5=3,5/12=0。如果操作數(shù)中有一個是實數(shù),則運算結(jié)果為實數(shù)。
2.關(guān)系運算符
Java語言的關(guān)系運算符共有七種:==、!=、<、<=、>、>=和instanceof。關(guān)系運算符用于關(guān)系表達式中,一個關(guān)系表達式的結(jié)果類型為布爾型,即關(guān)系式成立為true,不成立為false。對象運算符instanceof用來判斷一個對象是否屬于某種類類型,如"Hello"instanceofString結(jié)果為true,表示"Hello"是一個字符串類型的量。注意1:除了整型數(shù)和實型數(shù)可以混合出現(xiàn)在關(guān)系運算符兩邊外,在一個關(guān)系運算符兩邊的數(shù)據(jù)類型應保持一致。注意2:因為一個實數(shù)在內(nèi)存中只能用近似值來存儲,所以應該避免將兩個實數(shù)進行“==”比較。如下面的判斷語句:
if(23.12121f==23.121211f)
System.out.print("23.12121=23.121211");讀者可上機測試一下是否會輸出“23.12121=23.121211”。
3.邏輯運算符邏輯運算符有六個,它們是:!(非)、&(與)、|(或)、^(異或,即運算符兩邊的值相異時為true,相同時為false)、&&(短路與)和||(短路或)。
&又稱為無條件與運算符,|又稱為無條件或運算符。使用&和|運算符可以保證不管左邊的操作數(shù)是true還是false,總要計算右邊操作數(shù)的值。例如:計算false&(12>23)運算式的結(jié)果時,盡管從第1個操作數(shù)的值false就可以得出該表達式的結(jié)果為false,但系統(tǒng)還是要進行(12>23)的運算。運算符&&和||可以提高邏輯運算的速度。例如,在計算(12>34)&&(a>b)時,因為12>34為false,所以可以直接得出表達式的結(jié)果為false,不再需要計算運算符&&右邊的a>b。在計算12>4)||(34>23)時,因為12>4為true,所以可以直接得出表達式的結(jié)果為true,不再需要計算運算符||右邊的34>23。因此在邏輯表達式中,應盡量使用&&和||運算符,以提高運算速度。注意:邏輯運算符要求操作數(shù)和結(jié)果值都是布爾型量。
4.賦值運算符賦值運算符用來把“=”右邊表達式的值賦給左邊的變量,即將右邊表達式的值存放在變量名所表示的存儲單元中,這樣的語句又叫賦值語句。它的語法格式如下:變量名=表達式;復合賦值運算符有+=(加等于)、-=(減等于)、*=(乘等于)、/=(除等于)、%=(余數(shù)等于)等。注意:賦值號兩邊的數(shù)據(jù)類型不同時,如果將數(shù)據(jù)類型長度較短的量賦給數(shù)據(jù)類型長度較長的變量,則可以進行自動類型轉(zhuǎn)換,否則要進行強制類型轉(zhuǎn)換。例如:byteMyByte=10;intMyInteger=-1;MyInterger=MyByte;MyByte=(byte)MyInteger;
5.條件運算符條件運算符是“?:”,它要求有三個操作數(shù),其格式如下:<布爾表達式>?<表達式1>:<表達式2>第一個操作數(shù)必須是布爾表達式,其他兩個操作數(shù)可以是數(shù)值型或布爾型表達式。條件運算符的含義是:當<布爾表達式>的值為真時,結(jié)果為<表達式1>的值,否則為<表達式2>的值。例如:inta=12;intb=34;intmax=(a>b)?a:b;則程序運行后,max變量中存放a和b中較大的一個數(shù)。
6.位運算符位運算是對操作數(shù)以二進制位為單位進行的運算,位運算的操作數(shù)和結(jié)果都是整型量。位運算有七個,它們是:~、&、|、^、<<(左移)、>>(右移)、>>>(不帶符號的右移)。例如:
inta=12;
intb=7;
intc=a&b;//1100&0111=0100c=4
intc=a|b;//1100|0111=1111c=15
intc=a^b;//1100|0111=1011c=11
intc=a<<2;//1100→110000c=48
intc=a>>2;//1100→0011c=3
7.其他運算符●?()?和?[]?運算符:括號運算符()的優(yōu)先級是所有運算符中最高的,它可以改變表達式運算的先后順序。在有些情況下,它可以表示方法或函數(shù)的調(diào)用。括號運算符[]是數(shù)組運算符(見3.5節(jié))?!瘢\算符:用于訪問對象的成員屬性或成員方法?!?new運算符:用于創(chuàng)建一個新的對象。
8.運算符的優(yōu)先級運算符的優(yōu)先級由高到低的規(guī)律是:
.()[]→單目運算→算術(shù)運算→關(guān)系運算→邏輯運算→?:→=詳細情況見表3-4。表3-4運算符的優(yōu)先級別3.2.3【案例3-1】解方程
1.案例描述設計表示一元一次方程(ax+b=0)的類,并能根據(jù)a的系數(shù)情況求解方程。
2.案例效果案例程序的執(zhí)行效果如圖3-1所示。圖中從第2行開始,輸出了4個不同方程及其解的情況。圖3-1案例3-1的顯示效果
3.技術(shù)分析為了求解一元一次方程ax+b=0,要定義一個表示一元一次方程的類,其數(shù)據(jù)是a和b,可以進行的操作是判斷方程是否有解,如果有解,則求方程的解,并輸出方程式和解的情況。根據(jù)以上分析,設計的表示一元一次方程的類應該有兩個私有數(shù)據(jù)成員a和b(對于私有數(shù)據(jù),一般應有設置器setXXX和讀取器getXXX),有判斷方程是否有解、求解和輸出方程與解的方法成員。因此,該類的設計要點是:class方程{
私有數(shù)據(jù)a;
私有數(shù)據(jù)b;
構(gòu)造方法
a的設置器a的讀取器
b的設置器b的讀取器判斷方程是否有解的方法求方程解的方法輸出方程與解的方法}
4.程序解析下面是根據(jù)上面的分析設計的一元一次方程類Equation,程序中定義的TestEquation類對Equation類進行了測試。程序如下:01//**************************************02//案例:3.1程序名:TestEquation.java03//功能:表示一元一次方程ax+b=0類04//****************************************0506//一元一次方程類07classEquation{08 //方程的兩個系數(shù)定義為私有成員09 privatefloata;10 privatefloatb;11 12 //無參數(shù)的構(gòu)造方法13publicEquation(){}14 15 //有參數(shù)的構(gòu)造方法16 publicEquation(floata,floatb){17 this.a=a;18 this.b=b;19 }20 21 //系數(shù)a的設置器22 publicvoidsetA(floata){23 this.a=a;24 }25 26 //系數(shù)a的獲取器27 publicfloatgetA(){28 returna;29 }30 31 //系數(shù)b的設置器32 publicvoidsetB(floatb){33 this.b=b;34 }35 36 //系數(shù)b的獲取器37 publicfloatgetB(){38 returnb;39 }40 41 //判斷方程是否有根的私有方法42 privatebooleanhasRoot(){43 returna!=0;44 }45 46 //求方程根的私有方法47 privatefloatroot(){48 return(-b)/a;49 }50 51 //輸出方程式和根的公有方法52 publicvoidshowEquation(){53 if(hasRoot()){54 if(b>0)55 System.out.println("\n方程式是:"+a+"x+"+b+“
=0,\t其解為x="+root());56 elseif(b<0)57 System.out.println("\n方程式是:"+a+"x-"+
Math.abs(b)+"=0,\t其解為x="+root());58 else59 System.out.println(“\n方程式是:”+a+“x=0,\t\t其解為x="+0);60 }61 else62 System.out.println(“\n因為系數(shù)a=0,\t\t方程式無效!");63 }64}6566
classTestEquation{67 publicstaticvoidmain(Stringargs[]){68 //建立一個方程對象e1,其方程式為1.4x+2.8=069 Equatione1=newEquation(1.4f,2.8f);70 //調(diào)用showEquation方法,輸出e1對象表示的一元一次方程式和根71 e1.showEquation();72 73 //建立一個方程對象e2,其方程的系數(shù)a和b的初始值都為074 Equatione2=newEquation();75 //將系數(shù)b設置為4,即對象e2表示的方程式為0x-4
=0,是一個無效的方程76 e2.setB(-4);77 //調(diào)用showEquation方法,輸出e2對象表示的一元一次方程式和根78 e2.showEquation();79 80 //改變e2對象的系數(shù)a,將其設置為e1對象的系數(shù)b,即對象e2表示的方程式變?yōu)?.8x-4=081 e2.setA(e1.getB());82 e2.showEquation();83 84 //改變e2對象的系數(shù)b,將其設置為0,即對象e2表示的方程式變?yōu)?.8x=085 e2.setB(0);86 e2.showEquation();87 }88}該程序有著比較詳細的注釋,讀者參考注釋,應該很容易讀懂程序。程序中使用了實型數(shù)據(jù)和布爾型數(shù)據(jù),有簡單的關(guān)系運算與算術(shù)運算。關(guān)于this關(guān)鍵詞的含義在下面有詳細的說明。在程序的55行、57行、59行和62行等多處使用了轉(zhuǎn)義符\n和\t,轉(zhuǎn)義符\n在程序中起到換行的作用,轉(zhuǎn)義符\t在程序中起到輸出制表符的作用(類似于按Tab鍵的功能)。因此,程序在輸出一個方程后即換到下一行,并能將方程的解對齊輸出,如圖3-1所示。第57行使用了一個對數(shù)據(jù)求絕對值的數(shù)學函數(shù)Math.abs。類Math中定義的方法都是靜態(tài)的。最后要說明的是,在面向?qū)ο蟪绦蛟O計中,如果屬性和方法是在類的內(nèi)部使用,則應該說明為private的,以防止外部訪問,避免因?qū)Τ绦虻姆欠ú僮鞫钩绦虺鲥e。如42行判斷方程是否有根的方法privatebooleanhasRoot()和47行求方程根的方法privatefloatroot(),都因只在類Equation的內(nèi)部使用,所以定義為私有方法。而類的構(gòu)造方法、設置器、獲取器和輸出方程與解的方法,由于在類的外部要使用,因而被定義為公共的(public)。在面向?qū)ο蟪绦蛟O計中,對外的接口全部應用public修飾,即定義為公共的。3.2.4【相關(guān)知識】this關(guān)鍵字的功能在案例3-1的程序中的多個方法中使用了關(guān)鍵詞this,如16~19行的代碼中,給方程的系數(shù)a和b提供初值的構(gòu)造方法:16 publicEquation(floata,floatb){17 this.a=a;18 this.b=b;19 }這里的參數(shù)floata和floatb是構(gòu)造方法Equation(floata,floatb)的局部變量,其有效范圍(也叫作用域)是方法Equation(floata,floatb)的內(nèi)部,因此,在Equation類中定義的方程系數(shù)a和b(在案例3-1的第09行和第10行)在方法Equation(floata,floatb)中被隱藏了。也就是說,在該方法中直接用a和b,則表示使用的是方法參數(shù)中定義的局部變量a和b。當一個對象在調(diào)用Equation(floata,floatb)方法時,如果要使用屬于該對象的屬性a和b(也就是在類中定義的a和b),則要在屬性a和b前面加一個表示對象中a和b的標記,這個標記就是this關(guān)鍵字。在Java語言中,this代表當前對象,主要用來以“this.成員”的方式引用當前對象的成員。如在案例程序3-1的85行,有一個方法調(diào)用“e2.setB(0);”,因為是通過e2對象去調(diào)用方法setB(),所以表明當前對象是e2,即這里的this代表e2對象。被調(diào)用的方法setB()的程序段如下:32 publicvoidsetB(floatb){33 this.b=b;34 }則33行的this就代表了對象e2,因此“this.b=b;”就表示將給e2對象的系數(shù)b賦一個值,這個值就是由實參提供的局部變量b的值。其實,在類中定義的方法,如果使用了屬性字段,則在屬性字段的前面都有一個默認的this,如程序的第28行有一條“returna;”語句,本質(zhì)為“returnthis.a;”,表示返回當前對象的a值,只是由于在27行定義的方法“publicfloatgetA()”中,沒有使用局部變量a,直接寫a不會造成混亂,所以省略了a前面的this。當然,也可以在程序中避免使用this,如該類的構(gòu)造方法也可以寫成如下的形式:16 publicEquation(floatp,floatq){17 a=p;18 b=q;19 }這種形式很好理解,但它不符合面向?qū)ο蟮木幊烫攸c。所以,建議還是使用案例3-1中定義的方式。
this還有一種用法,就是調(diào)用該類的其他構(gòu)造方法,其格式是:this([參數(shù)]);如果沒有參數(shù),則調(diào)用無參的構(gòu)造方法??聪旅娴氖纠绦颍?1classPoint{02 intx;03 inty;04 05 Point(intx){06 this.x=x;07 }08 09 Point(intx,inty){10 this(x);11 this.y=y;12 }13}程序的第10行使用this調(diào)用了該類的帶一個參數(shù)的構(gòu)造方法“Point(intx)”。注意1:如果在一個類的構(gòu)造方法中,使用this調(diào)用了該類的其他構(gòu)造方法,則this調(diào)用只能放在程序的第一行。如果將上述示例程序的第10行和第11行進行交換,則程序?qū)l(fā)生編譯錯誤。注意2:一個類的靜態(tài)方法體中不能使用this關(guān)鍵詞。3.3簡單數(shù)據(jù)類型的包裝類在面向?qū)ο蟪绦蛟O計中“一切皆對象”,而前一節(jié)介紹的簡單數(shù)據(jù)類型就不是以對象的形式出現(xiàn)的,這從本質(zhì)上來說不符合面向?qū)ο蟪绦蛟O計的思想。但是,簡單數(shù)據(jù)類型易于理解,可以簡化程序的書寫,所以簡單數(shù)據(jù)類型在Java語言中有其存在的合理性。盡管如此,有時在程序中還是要使用以對象形式表示的簡單數(shù)據(jù)類型(如一個方法只能接收以對象為參數(shù)的調(diào)用),Java語言已經(jīng)考慮到了這個問題,對每一種簡單數(shù)據(jù)類型都提供了一個與之對應的類,這就是所謂簡單數(shù)據(jù)類型的包裝類,本節(jié)將介紹這些包裝類的知識。3.3.1包裝類的使用在Java語言類庫中,為每一種簡單數(shù)據(jù)類型提供了一個與之對應的類。從本質(zhì)上來說,這些類就是包裝了一個簡單類型的數(shù)據(jù),并提供了一些對數(shù)據(jù)進行操作(主要是類型轉(zhuǎn)換)的方法。
1.簡單數(shù)值類型的包裝類簡單數(shù)值類型有double、float、byte、int、long和short共6種,它們對應的包裝類如表3-5所示。表3-5簡單數(shù)值類型的包裝類基本數(shù)據(jù)類型的包裝類還提供了很多非常有用的方法:
(1)將一個包裝類對象轉(zhuǎn)換為任意一種簡單數(shù)據(jù)。
Byte、Double、Float、Integer、Long和Short類都能使用表3-6所示的方法,將其包裝的數(shù)值轉(zhuǎn)化為byte、double、float、int、long和short等簡單數(shù)據(jù)類型中的任何一種。表3-6包裝類轉(zhuǎn)換為簡單數(shù)據(jù)的方法如將整數(shù)2包裝為一個整型類對象:IntegerI=newInteger(2);使用下面的語句可將其賦給一個實型變量:floatf=I.floatValue();//f=2.0
(2)使用toString()方法可以將一個包裝類中的數(shù)據(jù)轉(zhuǎn)化為字符串。如將實數(shù)232.34包裝為一個實型類對象:FloatF=newFloat(232.34f);使用下面的語句可將其賦給一個字符串變量:Stringstr=F.toString();
(3)可以將一個由數(shù)字組成的字符串轉(zhuǎn)化為簡單類型數(shù)據(jù)。如將字符串"232"?轉(zhuǎn)化為一個整數(shù):inti=Integer.parseInt("232");由于這些轉(zhuǎn)換方法都是靜態(tài)方法(即類方法,以static修飾),因此在程序中可以通過類名直接使用,例如:
floatf=Float.parseFloat("232.12");
doubled=Double.parseDouble("267832.1772");
shorts=Short.parseShort("232");
longl=Long.parseLong("24532");
byteb=Byte.parseByte("24");
(4)將一個十進制整數(shù)轉(zhuǎn)化為其他數(shù)制表示的字符串。
Integer類中定義了將一個十進制整數(shù)轉(zhuǎn)化為其他數(shù)制表示的字符串的方法:●?toBinaryString(inti):以二進制無符號整數(shù)形式返回一個整數(shù)參數(shù)的字符串表示形式;●?toHexString(inti):以十六進制無符號整數(shù)形式返回一個整數(shù)參數(shù)的字符串表示形式;●?toOctalString(inti):以八進制無符號整數(shù)形式返回一個整數(shù)參數(shù)的字符串表示形式。此外,Byte、Double、Float、Integer、Long和Short類都提供了其所對應的簡單數(shù)據(jù)類型所能表示的最大值和最小值的字段(即類的數(shù)據(jù)成員),字段名分別為MAX_VALUE和MIN_VALUE,這些字段均為靜態(tài)的(以static修飾)。如下面的語句可分別輸出float型數(shù)據(jù)和short型數(shù)據(jù)的最大值和最小值:
System.out.println(Float.MAX_VALUE);
System.out.println(Float.MIN_VALUE);
System.out.println(Short.MAX_VALUE);
System.out.println(Short.MIN_VALUE);
2.布爾類型的包裝類Boolean
Boolean類將基本類型為boolean的值包裝在一個對象中。一個Boolean類型的對象只包含一個類型為boolean的字段。此外,此類還為boolean和String的相互轉(zhuǎn)換提供了許多方法,如:●?parseBoolean(Strings):將字符串參數(shù)分析為boolean值;●?toString():返回表示該布爾值的String對象。
3.字符類型的包裝類Character
Character類在對象中包裝了一個基本類型為char的值。此外,該類提供了一些方法,以確定字符的類別(小寫字母、數(shù)字等),并提供了將字母由大寫轉(zhuǎn)換成小寫或由小寫轉(zhuǎn)換成大寫的方法。常用的方法有:●?charValue():返回此Character對象包裝的字符值;●?isLowerCase(charch):確定指定字符是否為小寫字母;●?isUpperCase(charch):確定指定字符是否為大寫字母;●?isDigit(charch):指定字符是否為數(shù)字;●?isLetter(charch):指定字符是否為字母。舉例如下:
System.out.println(Character.isLowerCase('A'));//輸出false
System.out.println(Character.isUpperCase('A'));//輸出true
System.out.println(Character.isDigit('A'));//輸出false
System.out.println(Character.isLetter('A'));//輸出true3.3.2創(chuàng)建包裝類對象創(chuàng)建包裝類對象非常簡單,歸納起來有如下幾種方法:
(1)使用每個包裝類的構(gòu)造方法直接創(chuàng)建。例如:
Booleanb3=newBoolean(true);
Characterc3=newCharacter('a');
Integeri3=newInteger(2);
(2)?Java的每個包裝類都提供了一個叫valueOf()的靜態(tài)方法,使用該靜態(tài)方法可以很方便地產(chǎn)生包裝類的對象。例如:Booleanb4=Boolean.valueOf(true);Characterc4=Character.valueOf('a');
(3)使用JDK5.0的“自動打包”功能創(chuàng)建。在JDK5.0以后的版本中,為了簡化包裝類的使用,提供了從基本數(shù)據(jù)類型到包裝類對象的自動轉(zhuǎn)化功能,這就是所謂的“自動打包”。例如:Integeri4=3;Booleanb4=true;同時,也提供了從包裝對象到基本數(shù)據(jù)類型的自動轉(zhuǎn)化功能,這就是所謂的“自動解包”。例如:Floatf4=3.34f;System.out.println(f4*34);按照Java語言的語法,一個對象f4是不能與一個整數(shù)34相乘的,但“自動解包”功能可以將對象f4中包裝的實型數(shù)3.34取出,然后完成與另外一個數(shù)相乘的運算。3.3.3【案例3-2】數(shù)制轉(zhuǎn)換器
1.案例描述編寫一個將十進制整數(shù)轉(zhuǎn)換為其他進制整數(shù)的類。程序執(zhí)行時,輸入一個整數(shù)后,將其分別轉(zhuǎn)換為二進制、八進制和十六進制后輸出。
2.案例效果案例程序執(zhí)行的效果如圖3-2所示(注意,窗口中第1行所示的內(nèi)容)。在執(zhí)行程序時,從命令行輸入的十進制數(shù)為99,第2次執(zhí)行程序時輸入的十進制數(shù)為78446。圖3-2案例3-2的執(zhí)行結(jié)果
3.技術(shù)分析編寫該程序時,可以自己定義一個包裝整數(shù)的類,在類中定義一個私有成員,存放將要轉(zhuǎn)換的整數(shù),設計一個用于將十進制整數(shù)轉(zhuǎn)換為二進制、八進制和十六進制數(shù)的方法。
4.程序解析下面是案例3-2的程序代碼。01//*****************************************02//案例:3.2程序名:IntWrap.java03//功能:將一個整數(shù)以不同的數(shù)制輸出04//*******************************************0506publicclassIntWrap{07 privateinti;08 09 publicIntWrap(){}10 11 publicIntWrap(inti){12 this.i=i;13 }14 15 publicStringshowNumber(){16 return"\n二進制:"+Integer.toBinaryString(i)+17 "\n八進制:"+Integer.toOctalString(i)+18 "\n十六進制:"+Integer.toHexString(i);19 }20 21 publicstaticvoidmain(Stringargs[]){22 //從命令行輸入的整數(shù),被自動保存在字符串數(shù)組args中,其中第1個字符串保存在args[0]中23 intt=Integer.parseInt(args[0]);24 IntWrapc=newIntWrap(t);25 System.out.println("十進制:"+t+c.showNumber());26 }27}該程序比較簡單,請讀者自己分析。3.3.4【相關(guān)知識】包本節(jié)介紹了簡單數(shù)據(jù)類型的包裝類,這些類是Java語言標準類庫中已經(jīng)定義好的,可以在程序中直接使用。為了方便用戶編程,Java語言不但定義了簡單數(shù)據(jù)類型的包裝類,還定義了大量的、各種功能的其他類,這些類的組織與管理是Java語言中一個很重要的內(nèi)容。
1.為什么要使用包首先,不同功能的類可能使用了相同的類名,這樣會引起混亂。如一個類的類名為Table,一個編程人員用它表示一個有關(guān)表格類的類名,而另一個編程人員用它表示一個有關(guān)桌子的類。其次,如果將標準類庫中的幾千個類放在同一個文件夾中,則不便于用戶查找與使用。因此,在Java語言中,標準類庫中的類都被放在一個個包中,也就是說每一個類都屬于一個特定的包,如簡單數(shù)據(jù)類型的包裝類位于java.lang包中。
2.什么是包包(Package)是將一組相關(guān)類組織起來的集合。使用包的好處是:
(1)使得功能相關(guān)的類易于查找和使用(同一包中的類通常是功能相關(guān)的)。
(2)避免了命名的沖突(不同包中,可以有同名的類)。
(3)提供一種訪問權(quán)限的控制機制(一些訪問權(quán)限以包為訪問范圍,在第5章中介紹)。包在操作系統(tǒng)下其實與文件目錄相對應,如圖3-3所示的簡單數(shù)據(jù)類型的包裝類在java.lang包中,則對應操作系統(tǒng)下相應java目錄中的lang目錄,在lang目錄中有Boolean、Byte等類。圖3-3包結(jié)構(gòu)示意圖
3.包的創(chuàng)建創(chuàng)建一個包很簡單,只需在定義了類的源程序文件的第一行使用package語句即可。其格式為
package包名;程序中使用了該語句后,在當前文件夾下就應該創(chuàng)建與該包名對應的目錄結(jié)構(gòu),以存放這個包中定義的所有類編譯后的字節(jié)代碼文件(.class文件)。例如,在下面的Java程序中定義了兩個類A和B(類的內(nèi)容可以為空,這在Java程序中是允許的):01packagea.b.c;02classA{03 publicstaticvoidmain(Stringargs[]){04 System.out.println("packageexample.");05 }06}07classB{}程序文件名為A.java時,直接使用下面的編譯命令將不能創(chuàng)建與包名對應的目錄結(jié)構(gòu):javacA.java在這種情況下,需要用戶手工創(chuàng)建與包名對應的目錄結(jié)構(gòu),并將編譯后的字節(jié)代碼文件復制到相應的目錄中。使用下面帶參數(shù)“-d”的編譯命令:javac-d.A.java在編譯通過后,會自動建立與包名對應的目錄結(jié)構(gòu),并將字節(jié)代碼文件放入包中,如圖3-4所示。圖3-4包結(jié)構(gòu)圖使用包時要注意以下問題:
(1)編譯包的命令為“javac-d要創(chuàng)建包的父目錄?*.java”(該例中用“.”代替程序文件所在的當前目錄)。
(2)包名中的層次要用“.”分隔。
(3)一個包創(chuàng)建好后,在執(zhí)行時要帶包名。如執(zhí)行上面程序的命令為:javaa.b.c.A
(4)前面所有的案例中都沒有創(chuàng)建包(即省略了package語句),則Java系統(tǒng)認為類在默認包中,即當前目錄。所以,可以認為任何一個Java類都在某個包中。
(5)?package語句只能是一個源程序文件中的第1條語句(程序中的注釋和空行除外)。也可以這樣說,一個源程序文件中只能有一條package語句。
(6)在工程實踐中,包名常用公司名或公司的網(wǎng)址,這樣可以保證全世界Java程序員設計的類不會發(fā)生命名沖突,如com.sun.swing、com.borland.jdbc等。
4.包中類的引用方法在一個程序中若要使用另一個包中的類,則可以使用如下兩種方式:
(1)長類名方式(longname)。長類名方式要在類名前加上包名稱,其格式如下:包名.類名如要使用MyPackage包中的Circle類,則可以使用MyPackage.Circle。
(2)短類名方式(shortname)。短類名方式需要在程序的前面加上import語句,其格式如下:import包名.類名;或使用如下格式:import包名.*;前一種格式只引入了一個指定的類。如在程序的開始部分使用了下面的import語句,則程序中只能使用MyPackage包中的Circle類:importMyPackage.Circle;如果在程序中要使用MyPackage包里的任何一個類,則可以使用如下的語句:importMyPackage.*;注意:java.lang包中的類在程序中會被自動引入,不需要使用import語句。3.4字符串數(shù)據(jù)類型的使用方法
Java語言中的復雜數(shù)據(jù)類型,其實就是類類型。前面介紹過,類是一種新型數(shù)據(jù)類型,在面向?qū)ο蟪绦蛟O計中,經(jīng)常會遇到一個類的成員變量屬于某種類類型的情況。前面介紹的案例中多次使用到了String類型,String類型就是一種常用的類類型。3.4.1字符串的創(chuàng)建與操作
1.字符串的概念字符串是由Unicode字符集中的字符組成的字符序列,如“Thisisanapple.”。在Java語言中,字符串不是基本數(shù)據(jù)類型,而是一個類。由于在程序中經(jīng)常使用字符串這種類類型,因此在Java語言中已經(jīng)定義了字符串類型,類名為String,用戶可以在程序中直接使用String類型定義一個字符串。
2.創(chuàng)建字符串由于字符串也是對象,因此創(chuàng)建一個String類的實例可以用如下的格式:格式1:StringstrName1=newString("Thisisanapple.");也可以寫成如下的簡單格式:格式2:StringstrName2="Thisisanapple.";在Java語言中,可以創(chuàng)建一個空字符串:StringstrName3="";表示strName3字符串的長度為0,即不包含任何字符。字符串變量其實是一個對象類型的變量。任何一個對象類型的變量,都保存著一個內(nèi)存地址,這個地址指向存放該實例對象數(shù)據(jù)的內(nèi)存區(qū),如對于“格式1”中創(chuàng)建字符串的過程,可以用圖3-5表示。圖3-5創(chuàng)建字符串對象的過程執(zhí)行格式1語句的過程是,聲明一個字符串變量strName1,Java虛擬機就為該變量分配一個用于保存指向字符串常量的內(nèi)存地址(這個內(nèi)存地址也叫一個引用),如圖3-5(a)所示,目前該內(nèi)存的內(nèi)容為空。在創(chuàng)建字符串的語句newString("Thisisanapple.")執(zhí)行后,Java虛擬機先在內(nèi)存中創(chuàng)建一個字符串常量"Thisisanapple.",如圖3-5(b)所示(圖中假設分配給該字符串常量的內(nèi)存地址從十六進制數(shù)0X1AFB開始),然后讓字符串變量strName1指向"Thisisanapple."對象,即將地址0X1AFB填入strName1變量中,完成格式1中語句的執(zhí)行過程。
"Thisisanapple."對象在內(nèi)存中創(chuàng)建后,其值不能被改變,也就是說,其中的任何一個字符不能被改動,即創(chuàng)建的是一個字符串常量。格式2創(chuàng)建字符串變量strName2的過程是,在聲明字符串變量strName2后,Java虛擬機就查找內(nèi)存中有沒有一個"Thisisanapple."字符串常量,如果有,則讓它直接指向該常量。由于格式1中已經(jīng)創(chuàng)建了"Thisisanapple."字符串常量,因此strName2也指向了"Thisisanapple."字符串常量,如圖3-5(b)中strName2實線所指的內(nèi)容。如果在程序中又執(zhí)行了一條如下的語句:strName2="HelloJava.";則由于在內(nèi)存中沒有"HelloJava."字符串常量,因此Java虛擬機就創(chuàng)建一個"HelloJava."字符串常量,然后strName2對象會指向這個新的字符串常量,如圖3-5(b)虛線所指的內(nèi)容。由以上分析可知,String類型的對象所指向的字符串內(nèi)容不能被改變(如"Thisisanapple."對象中,不能修改其中任何一個字符),所以,有些資料將String類型的字符串叫常量字符串。但要注意,String類型的對象變量本身可以根據(jù)程序執(zhí)行的情況指向不同的字符串常量,如上面提到的strName2,在不同的時刻指向了不同的字符串常量,前面指向了"Thisisanapple."對象,后面指向了"HelloJava."對象。
3.字符串常用的方法
(1)字符串連接。字符串連接用“+”或concat(Srtingstr)。例如:strName3=strName1+"isthenameofan"+strName2;strName3=strName3.concat("welcome");
(2)求字符串的長度。求字符串的長度用length()。例如:intnumLength=strName2.length();
(3)取子串。取一個字符串的子串用substring()。它有兩種格式:●?Stringsubstring(intbeginIndex);該方法返回一個新字符串,此字符串從指定的beginIndex處開始,一直到字符串結(jié)束?!?Stringsubstring(intbeginIndex,intendIndex);該方法返回一個新字符串,此字符串從指定的beginIndex處開始,一直到endIndex-1處的字符結(jié)束,因此,該子字符串的長度為endIndex-beginIndex。例如:
Strings1="computer";
Strings2=s1.substring(3); //s2為"puter"
Strings3=s1.substring(3,6); //s3為"put"
(4)字符串比較。比較兩個字符串常用如下的兩種方法:●?intcompareTo(StringanotherString);如果參數(shù)字符串等于此字符串,則返回0值;如果按字典順序此字符串小于字符串參數(shù),則返回一個小于0的值;如果按字典順序此字符串大于字符串參數(shù),則返回一個大于0的值。如果在比較字符串時不考慮字母的大小寫,則可以使用如下的方法:●?booleanequalsIgnoreCase(StringanotherString);將此String與參數(shù)中所給的另一個String進行比較,比較時不考慮字母的大小寫。如果兩個字符串的長度相等,并且兩個字符串中的相應字符都相同(忽略大小寫),則認為這兩個字符串是相等的。例如:
System.out.println("put".equalsIgnoreCase("PUT"));//輸出的結(jié)果為true
(5)判斷字符串的前綴和后綴。判斷字符串的前綴和后綴是否與參數(shù)中指定的字符串相同:
booleanstartsWith(Stringprefix);
booleanendsWith(Stringsuffix);例如:System.out.println("computer".startsWith("com")); //輸出true
(6)查找字符串中的一個字符(找到則返回出現(xiàn)的位置,沒找到則返回-1)。
intindexOf((int)ch); //(int)為強制類型轉(zhuǎn)換
intindexOf((int)ch,intfromIndex);
//從fromIndex位置開始查找intlastIndexOf((int)ch); //從字符串的結(jié)尾開始向前查找intlastIndexOf((int)ch,intfromIndex);
//從fromIndex位置開始向前查找
(7)查找字符串中的一個子串(找到返回出現(xiàn)的位置,沒找到返回-1)。
intindexOf(Stringstr);
intindexOf(Stringstr,intfromIndex);
//從fromIndex位置開始查找
intlastIndexOf(Stringstr);
//從字符串的結(jié)尾開始向前查找
intlastIndexOf(Stringstr,intfromIndex);
//從fromIndex位置開始向前查找
(8)其他的一些常用方法。
charcharAt(intindex);//取得指定位置的字符
Stringreplace(charoldChar,charnewChar);
//返回結(jié)果為一個用新字符替換舊字符后的字符串,
//原字符串對象不變
StringtoLowerCase();
//返回值為將此字符串中的所有字母都轉(zhuǎn)換為小寫
//后的字符串,原字符串對象不變
StringtoUpperCase();
//返回值為將此字符串中的所有字母都轉(zhuǎn)換為大寫
//后的字符串,原字符串對象不變
Stringtrim();//取掉字符串前后的空格并生成新串在String類中提供了很多非常有用的方法,這里只列舉了一些比較常用的,目的是為了說明在Java語言的類庫中所定義的大部分類都提供了功能齊全的操作方法。使用時一定要查找JDK幫助文檔,關(guān)于幫助文檔的用法見3.6節(jié)。注意1:與C語言和C++?語言不同,String不以?\0作為結(jié)束標志。注意2:字符串中第1個字符的序號為0,而不是1。3.4.2【案例3-3】身份證號碼中的秘密
1.案例描述一個身份證號碼中包含著本人所在地區(qū)、出生日期、性別等重要信息。在開發(fā)一個軟件的過程中,要從身份證號碼中取出一個人的生日和性別信息。
2.案例效果案例程序的執(zhí)行效果如圖3-6所示。圖中第3行輸出了一個身份證號碼,第4行和第5行分別輸出了該身份證號碼中所包含的生日和性別信息。圖3-6案例3-3的執(zhí)行結(jié)果
3.技術(shù)分析由于身份證號碼是由數(shù)字組成的字符串,且長度固定,個人的有關(guān)信息被包含在這個字符串中。可以使用本節(jié)介紹的有關(guān)字符串操作的方法取出身份證中包含的有關(guān)信息。該程序的主要問題是設計一個身份證號碼類,該類中要定義一個私有數(shù)據(jù)成員(即身份證號碼)、一個從身份證號碼中取出生日的方法和一個從身份證號碼中取出性別的方法。
4.程序解析下面是案例3-3的程序代碼。01//*****************************************02//案例:3.3程序名:TestIdentityCard.java03//功能:從一個身份證號碼中取出個人信息04//*****************************************0506//身份證號類07classIdentityCard{08 privateStringidentityNumber;09 10 //無參數(shù)的構(gòu)造方法11 publicIdentityCard(){}12 13 //有參數(shù)的構(gòu)造方法14 publicIdentityCard(StringidentityNumber){15 this.identityNumber=identityNumber;16 }17 18 //身份證號碼設置器19 publicvoidsetIdentityNumber(StringidentityNumber){20 this.identityNumber=identityNumber;21 }22 23 //身份證號碼獲取器 24 publicStringgetIdentityNumber(){25 returnidentityNumber;26 }27 28 //獲得生日的方法29 publicStringgetBirthday(){30 returnidentityNumber.substring(6,10)+"年"+31 identityNumber.substring(10,12)+"月"+32 identityNumber.substring(12,14)+"日";33 }34 35 //獲得性別的方法36 publicchargetSex(){37 inttemp=identityNumber.codePointAt(identityNumber.length()-1)-0x0030;38 if((temp%2)==0)39 return'男';40 else41 return'女';42 }43}4445//測試類46classTestIdentityCard{47 publicstaticvoidmain(Stringargs[]){48 IdentityCardMyID=new
IdentityCard();49 System.out.println("身份證號碼為:"+MyID.getIdentityNumber());50 System.out.println("生日:"+MyID.getBirthday());51 System.out.println("性別:"+MyID.getSex());52 53 }54}程序中,第07~43行定義了一個身份證號碼類,該類在08行定義了一個私有成員變量identityNumber,表示身份證號碼。在getBirthday方法中,30行、31行和32行分別使用了String類取子串的方法subString,取出生日中的年、月、日。在36行定義了求性別的方法,使用了String類的codePointAt方法(注意只有JDK1.5后的版本才可使用),該方法返回指定位置處的字符,但返回值是Unicode碼表示的整數(shù),因為字符0的Unicode碼為十六進制數(shù)0030,所以37行的表達式中要減去該數(shù),將一個字符表示的數(shù)字轉(zhuǎn)換為對應的整數(shù),該方法中假設身份證號碼的最后一位表示性別。3.4.3【相關(guān)知識】在程序中使用可變字符串在java.lang包中定義的StringBuffer類比String類更靈活,可以在存放字符串的緩沖區(qū)中添加、插入或追加新內(nèi)容,也就是說字符串的內(nèi)容可以改變。下面介紹StringBuffer類的使用方法。
1.?StringBuffer的構(gòu)造方法
(1)?publicStringBuffer()。該方法構(gòu)造一個沒有字符的字符串緩沖區(qū),緩沖區(qū)的初始容量為16個字符。例如:StringBufferstrBuf=newStringBuffer();
(2)?publicStringBuffer(intlength)。該方法構(gòu)造了一個沒有字符的字符串緩沖區(qū),緩沖區(qū)的初始容量由length確定(這里的長度為12)。例如:StringBufferstrBuf=newStringBuffer(12);
(3)?publicStringBuffer(Stringstring)。以給定參數(shù)string構(gòu)造一個字符串緩沖區(qū),初始容量為字符串string的長度再加16個字符。例如:StringBufferstrb=newStringBuffer("java");該語句創(chuàng)建了一個容量為20的字符串緩沖區(qū),緩沖區(qū)中存放的字符串為"java"。
2.在可變字符串中追加和插入新內(nèi)容
(1)在字符串末尾追加新內(nèi)容。StringBuffer中有13個重載的append方法(指JDK1.5),該方法可以在字符串末尾追加新內(nèi)容,加入的內(nèi)容可以是boolean、char、double、float、int、long、string等類型的新內(nèi)容。例如:StringBuffersb=newStringBuffer("java");System.out.println(sb.append(true));執(zhí)行這兩行語句后,sb的內(nèi)容變?yōu)?javatrue",并將該字符串輸出。
(2)在字符串中插入新內(nèi)容。StringBuffer中有12個重載的insert方法(指JDK1.5),該方法可以在字符串中插入新內(nèi)容。將一個字符插入一個字符串的指定位置可以使用如下格式的方法:insert(intoffset,charc);第1個參數(shù)offset指出將要插入字符的位置,插入后此序列的長度將增加1。其他常用的插入方法有:●?StringBufferinsert(intoffset,doubled);
//將double參數(shù)的字符串表示形式插入此序列中●?StringBufferinsert(intoffset,floatf);?
//將float參數(shù)的字符串表示形式插入此序列中●?StringBufferinsert(intoffset,inti);
//將int參數(shù)的字符串表示形式插入此序列中●?StringBufferinsert(intoffset,longl);??
//將long參數(shù)的字符串表示
溫馨提示
- 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度智能停車系統(tǒng)車庫交易合同2篇
- 二零二五年度家政服務與家庭旅游策劃合同3篇
- 二零二五年度叉車維修保養(yǎng)與維修設備租賃合同2篇
- 2025年度綜合體物業(yè)房使用及公共設施維護協(xié)議3篇
- 二零二五年度大棚養(yǎng)殖廢棄物資源化利用合作協(xié)議2篇
- 二零二五年度文化旅游項目借款及旅游資源擔保服務協(xié)議3篇
- 二零二五年度保障性住房置換合同范本
- 二零二五年度ISO9001質(zhì)量管理體系認證咨詢與實施合同3篇
- 二零二五年度加油站油品供應與信息化建設合同3篇
- 船舶管系課程設計
- 河南省鄭州高新技術(shù)產(chǎn)業(yè)開發(fā)區(qū)2023-2024學年三年級上學期1月期末科學試題
- 女裝行業(yè)退貨率分析
- 領(lǐng)導溝通的藝術(shù)
- 純視覺方案算法
- 道士述職報告
- 綠色貸款培訓課件
- 2024年七年級語文上學期期末作文題目及范文匯編
- 云南省昆明市五華區(qū)2023-2024學年九年級上學期期末英語試卷+
- 2023年生產(chǎn)運營副總經(jīng)理年度總結(jié)及下一年計劃
- 2023年中考語文標點符號(頓號)練習(含答案)
- 施工圖審查招標文件范文
評論
0/150
提交評論