2.1數(shù)據(jù)類型
數(shù)據(jù)類型指明了變量或表達(dá)式的狀態(tài)和行為。Java的數(shù)據(jù)類型如下所示:
Java不支持C、C++中的指針類型、結(jié)構(gòu)體類型和共用體類型。
本章我們主要介紹簡(jiǎn)單類型。
2.2常量與變量
一、常量
Java中的常量值是用文字串表示的,它區(qū)分為不同的類型,如整型常量123,實(shí)型常量1.23,字符常量'a',布爾常量true、false以及字符串常量"Thisisaconstantstring."。
與C、C++不同,Java中不能通過(guò)#define命令把一個(gè)標(biāo)識(shí)符定義為常量,而是用關(guān)鍵字final來(lái)實(shí)現(xiàn),如
finaldoublePI=3.14159(有關(guān)final的用法見[6.2.3])。
二、變量
變量是Java程序中的基本存儲(chǔ)單元,它的定義包括變量名、變量類型和作用域幾個(gè)部分。
①變量名是一個(gè)合法的標(biāo)識(shí)符,它是字母、數(shù)字、下劃線或美元符"$"的序列,Java對(duì)變量名區(qū)分大小寫,變量名不能以數(shù)字開頭,而且不能為保留字。合法的變量名如:myName、value-1、dollar$等。非法的變量名如:2mail、room#、class(保留字)等,變量名應(yīng)具有一定的含義,以增加程序的可讀性。
②變量類型可以為上面所說(shuō)的任意一種數(shù)據(jù)類型。
③變量的作用域指明可訪問(wèn)該變量的一段代碼。聲明一個(gè)變量的同時(shí)也就指明了變量的作用域。按作用域來(lái)分,變量可以有下面幾種:局部變量、類變量、方法參數(shù)、例外處理參數(shù)。
局部變量在方法或方法的一塊碼中聲明,它的作用域?yàn)樗诘拇a塊(整個(gè)方法或方法中的某塊代碼)。
類變量在類中聲明,而不是在類的某個(gè)方法中聲明,它的作用域是整個(gè)類。
方法參數(shù)傳遞給方法,它的作用域就是這個(gè)方法。
例外處理參數(shù)傳遞給例外處理代碼,它的作用域就是例外處理部分。
在一個(gè)確定的域中,變量名應(yīng)該是的。通常,一個(gè)域用大括號(hào){}來(lái)劃定。
④變量的聲明格式為:
typeidentifier[=value][,identifier[=value]…];
例如:inta,b,c;
doubled1,d2=0.0;
其中,多個(gè)變量間用逗號(hào)隔開,d2=0.0對(duì)實(shí)型變量d2賦初值0.0,只有局部變量和類變量是可以這樣賦初值的,而方法參數(shù)和例外處理參數(shù)的變量值是由調(diào)用者給出的。
2.3整型數(shù)據(jù)
一、整型常量:
與C,C++相同,Java的整常數(shù)有三種形式:
①十進(jìn)制整數(shù),如123,-456,0
②八進(jìn)制整數(shù),以0開頭,如0123表示十進(jìn)制數(shù)83,-011表示十進(jìn)制數(shù)-9。
③十六進(jìn)制整數(shù),以0x或0X開頭,如0x123表示十進(jìn)制數(shù)291,-0X12表示十進(jìn)制數(shù)-18。
整型常量在機(jī)器中占32位,具有int型的值,對(duì)于long型值,則要在數(shù)字后加L或l,如123L表示一個(gè)長(zhǎng)整數(shù),它在機(jī)器中占64位。
二、整型變量:
整型變量的類型有byte、short、int、long四種。下表列出各類型所在內(nèi)存的位數(shù)和其表示范圍。
int類型是最常使用的一種整數(shù)類型。它所表示的數(shù)據(jù)范圍足夠大,而且適合于32位、64位處理器。但對(duì)于大型計(jì)算,常會(huì)遇到很大的整數(shù),超出int類型所表示的范圍,這時(shí)要使用long類型。
由于不同的機(jī)器對(duì)于多字節(jié)數(shù)據(jù)的存儲(chǔ)方式不同,可能是從低字節(jié)向高字節(jié)存儲(chǔ),也可能是從高字節(jié)向低字節(jié)存儲(chǔ),這樣,在分析網(wǎng)絡(luò)協(xié)議或文件格式時(shí),為了解決不同機(jī)器上的字節(jié)存儲(chǔ)順序問(wèn)題,用byte類型來(lái)表示數(shù)據(jù)是合適的。而通常情況下,由于其表示的數(shù)據(jù)范圍很小,容易造成溢出,應(yīng)避免使用。
short類型則很少使用,它限制數(shù)據(jù)的存儲(chǔ)為先高字節(jié),后低字節(jié),這樣在某些機(jī)器中會(huì)出錯(cuò)。
三、整型變量的定義,如:
byteb;//指定變量b為byte型
shorts;//指定變量s為short型
inti;//指定變量i為int型
longl;//指定變量l為long型
2.4浮點(diǎn)型(實(shí)型)數(shù)據(jù)
一、實(shí)型常量
與C,C++相同,Java的實(shí)常數(shù)有兩種表示形式:
①十進(jìn)制數(shù)形式,由數(shù)字和小數(shù)點(diǎn)組成,且必須有小數(shù)點(diǎn),如0.123,.123,123.,123.0
②科學(xué)計(jì)數(shù)法形式。如:123e3或123E3,其中e或E之前必須有數(shù)字,且e或E后面的指數(shù)必須為整數(shù)。
實(shí)常數(shù)在機(jī)器中占64位,具有double型的值。對(duì)于float型的值,則要在數(shù)字后加f或F,如12.3F,它在機(jī)器中占32位,且表示精度較低。
二、實(shí)型變量
實(shí)型變量的類型有float和double兩種,下表列出這兩種類型所占內(nèi)存的位數(shù)和其表示范圍。
數(shù)據(jù)類型所占位數(shù)數(shù)的范圍
float323.4e-038~3.4e+038
double641.7e-308~1.7e+308
雙精度類型double比單精度類型float具有更高的精度和更大的表示范圍,常常使用。
三、實(shí)型變量定義,如
floatf;//指定變量f為float型
doubled;//指定變量d為double型
[注]與C、C++不同,Java中沒(méi)有無(wú)符號(hào)型整數(shù),而且明確規(guī)定了整型和浮點(diǎn)型數(shù)據(jù)所占的內(nèi)存字節(jié)數(shù),這樣就保證了安全性、魯棒性和平臺(tái)無(wú)關(guān)性。
2.5字符型數(shù)據(jù)
一、字符常量
字符常量是用單引號(hào)括起來(lái)的一個(gè)字符,如'a','A'。另外,與C、C++相同,Java也提供轉(zhuǎn)義字符,以反斜杠(\)開頭,將其后的字符轉(zhuǎn)變?yōu)榱硗獾暮x,下表列出了Java中的轉(zhuǎn)義字符。
與C、C++不同,Java中的字符型數(shù)據(jù)是16位無(wú)符號(hào)型數(shù)據(jù),它表示Unicode集,而不僅僅是ASCII集,例如\u0061表示ISO拉丁碼的'a'。
轉(zhuǎn)義字符描述
\ddd1到3位8進(jìn)制數(shù)據(jù)所表示的字符(ddd)
\uxxxx1到4位16進(jìn)制數(shù)所表示的字符(xxxx)
\'單引號(hào)字符
\\反斜杠字符
\r回車
\n換行
\f走紙換頁(yè)
\t橫向跳格
\b退格
二、字符型變量
字符型變量的類型為char,它在機(jī)器中占16位,其范圍為0~65535。字符型變量的定義如:
charc='a';//指定變量c為char型,且賦初值為'a'
與C、C++不同,Java中的字符型數(shù)據(jù)不能用作整數(shù),因?yàn)镴ava不提供無(wú)符號(hào)整數(shù)類型。但是同樣可以把它當(dāng)作整數(shù)數(shù)據(jù)來(lái)操作。
例如:
intthree=3;
charone='1';
charfour=(char)(three+one);//four='4'
上例中,在計(jì)算加法時(shí),字符型變量one被轉(zhuǎn)化為整數(shù),進(jìn)行相加,最后把結(jié)果又轉(zhuǎn)化為字符型。
三、字符串常量
與C、C++相同,Java的字符串常量是用雙引號(hào)("")括起來(lái)的一串字符,如"Thisisastring.\n"。但不同的是,Java中的字符串常量是作為String類的一個(gè)對(duì)象來(lái)處理的,而不是一個(gè)數(shù)據(jù)。有關(guān)類String,我們將在
第七章講述。
2.6布爾型數(shù)據(jù)
布爾型數(shù)據(jù)只有兩個(gè)值,true和false,且它們不對(duì)應(yīng)于任何整數(shù)值。在流控制中常用到它。
布爾型變量的定義如:
booleanb=true;//定義b為布爾型變量,且初值為true
2.7舉例
例2.1.下例中用到了前面提到的數(shù)據(jù)類型,并通過(guò)屏幕顯示它們的值。
publicclassSimpleTypes{
publicstaticvoidmain(Stringargs[]){
byteb=0x55;
shorts=0x55ff;
inti=1000000;
longl=0xfffL;
charc='c';
floatf=0.23F;
doubled=0.7E-3;
booleanbool=true;
System.out.println("b="+b);
System.out.println("s="+s);
System.out.println("i="+i);
System.out.println("c="+c);
System.out.println("f="+f);
System.out.println("d="+d);
System.out.println("bool="+bool);
}
}
編譯并運(yùn)行該程序,輸出結(jié)果為:
C:\>javaSimpleTypes
b=85
s=22015
i=1000000
l=4095
c=c
f=0.23
d=0.0007
bool=true

