




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第2章數據類型、運算符、
表達式和語句2.1標識符和關鍵字2.2基本數據類型2.3基本數據類型之間的轉換2.4數組2.5運算符與表達式2.6語句2.1標識符和關鍵字
2.2基本數據類型
Java的數據類型如圖2.1所示。圖2.1Java語言數據類型2.2基本數據類型
2.2.1整型數據
整型數據包括整型常量和整型變量。整型數據在機器中用補碼表示,最高位為符號位。
整型常量分為三種:十進制整數、八進制整數和十六進制整數。其中,八進制整數以0開頭;十六進制整數以0x或0X開頭。比如整數128,十進制表示為128,八進制表示為0200,十六進制表示為0x80或0X80。
整型變量分為四種:byte、short、int和long。它們各自所占位數及取值范圍如表2.1所示。
(1)兩個整數相加,結果默認轉化為int,賦值給byte或short時會發生類型轉化問題。
【例2-1】兩個byte類型數據相加。編譯效果如圖2.2所示。圖2.2兩個byte類型數據相加的編譯效果必須將n+m的結果進行顯式轉化,第6行程序改成bytes=?(byte)n+m,編譯才能通過。
(2)在選用整數類型上,一定要注意數的范圍,否則可能由于數的類型選擇不當而造成溢出,例如下面的代碼add就存在著潛在的溢出問題,從而為程序帶來錯誤(bug)。
publicint?add(int?a,int?b){
return?a+b;
}
(3)對于long類型整數常量,書寫時應在數字后加“l”或“L”。2.2.2浮點型數據
浮點型常量分為兩種:float型和double型。使用時要注意:float型常量后必須加“f”或“F”,double型常量后可以加“d”或“D”或什么都不加(缺省默認方式)。浮點型數據有兩種表示方法:
(1)十進制數形式:由數字和小數點組成,且必須有小數點,如0.123,1.23,123.0;
(2)科學計數法形式:如:123e3或123E3,其中e或E之前必須有數字,且e或E后面的指數必須為整數。浮點型變量也分為兩種:float型和double型,其數據特點如表2.2所示。2.2.3布爾型數據
布爾型數據只有兩個值true(真)和false(假),其默認值為false。布爾型變量的定義如:
booleanb=true;
使用時要注意,布爾型數據不能和其他類型數據(包括數值型)進行相互轉換,boolean類型只允許使用boolean值。2.2.4字符型數據
Java使用Unicode字符集,這種字符集中每個字符用二個字節即16位表示。字符型常量是用單引號括起來的一個字符,如?'b','1',或是單引號所引的轉義字符(常見的轉義字符見表2.3),或是形如?'\u????'?的Unicode形式的字符,其中?'????'?應嚴格按照四個十六進制數字進行替換,例如charc='\u31100'?是錯誤的,而charc?='\u2abc'?是正確的。字符型變量只有一種:char類型,它在機器中占16位,其范圍為0~65?535。使用時要注意:字符型變量實際上是一個數字,因此它可以賦值給一個數,例如floatf='a';inti='a'等式子都是正確的。
2.3基本數據類型之間的轉換
2.3.1自動轉換
不同類型數據間的優先關系如下:
低---------------------------------------------------->高
byte→short→char→int→long→float→double
自動轉換是指編譯系統可自動將低優先級數據類型轉換為高優先級數據類型。各種數據類型的轉換規則見表2.4。2.3.2強制類型轉換
高優先級數據要轉換成低優先級數據,需用到強制類型轉換,其轉換格式為
(類型名)(數據或表達式)
例如:
intx;
shorta=(short)x;/*把int型變量x強制轉換為short型*/
2.4數組
2.4.1數組的概念
數組是相同類型的數據按順序組成的一種復合數據類型,通過數組名加數組下標來使用數組中的數據,下標從0
開始。
數組元素的數據類型可以是Java的任何數據類型,例
如:基本類型(int、float、double、char等)、類(class)或接口(interface)等。2.4.2數組的聲明和創建
聲明數組就是要確定數組名、維數和元素的數據類型。
聲明一維數組有兩種方式:
類型標識符數組名[];
類型標識符[]數組名;例如:intabc[];String[]example;myClass[]mc;
聲明二維數組也有兩種方式:
類型標識符數組名[][];
類型標識符[][]數組名;
創建數組要給出數組長度并分配空間。一維數組的創建格式如下:
數組名=new類型標識符[大小];二維數組的創建格式如下:
數組名=new類型標識符[大小][大小];
數組的聲明和創建也可以合為一步,如下所示:
類型標識符數組名[]=new類型標識符[大小];
類型標識符數組名[][]=new類型標識符[大小][大小];2.4.3數組的初始化和賦值
數組的初始化有兩種方式:
(1)靜態初始化:直接在聲明的時候使用初始化表給數組的全部或部分元素賦初值。
例如:
int[]a={3,4,5,6};floatb[5]={1.0,2.0};
(2)動態初始化:使用賦值表達式給數組的各個元素賦值。例如:
inta[]=newint[2];
a[0]=1;
a[1]=2;
a[2]=3;
每個數組都包含一個成員變量length,它是在初始化時設定的數組大小。我們可以在數組名后加.length來訪問該變量。例如,用a.length可以獲取數組a的大小。
【例2-3】一維數組應用舉例:在給定的一維數組中找出最大值和最小值。程序運行結果如圖2.3所示。圖2.3一維數組應用舉例2.5運算符與表達式
對各種類型的數據進行加工的過程稱為運算,表示各
種不同運算的符號稱為運算符,參與運算的數據稱為操作數。Java語言運算符如圖2.4所示。表達式是用運算符把操作數連接起來的式子,可分為算術表達式、關系表達式、邏輯表達式、賦值表達式、條件表達式。
2.5.1算術運算符和算術表達式
算術運算符如表2.5所示。算術表達式是由算術運算符和位運算符將操作數連接組成的表達式,例如:x+y%z。注意:
(1)兩個整數類型的數據做除法時,結果只保留整數部分。
(2)整數和浮點數都能進行取余運算。
(3)“/”運算符,當都為整數時,結果為整數,有一個為浮點,則為浮點數。
(4)自增、自減運算符只適用于變量,且位于運算符的不同側有不同效果。例如假設inti=3,j=4,作j=i+++j+++i運算后,i的值為5,j的值為12。2.5.2關系運算符和關系表達式
關系運算符都是雙目運算符,具體內容如表2.6所示。利用關系運算符連接的式子稱為關系表達式,運算結果是一個布爾型數值:true(為真)或者false(為假)。2.5.3邏輯運算符和邏輯表達式
邏輯運算符見表2.7。利用邏輯運算符將操作數連接的式子稱為邏輯表達式。邏輯表達式參與運算的操作數都是布爾類型的,結果也是布爾類型。注意:
利用“&&”和“||”執行操作時,如果從左邊的表達式中得到的操作數能確定運算結果,則不再對右邊的表達式進行運算;利用“&”和“|”執行操作時,左右兩邊的表達式都會進行運算。采用“&&”和“||”的目的是為了加快運算速度。程序運行結果如圖2.4所示。圖2.4邏輯運算符舉例2.5.4移位運算符
移位運算符都是雙目運算符,具體內容如表2.8所示。注意:
(1)當x是byte、short或int類型數據時,系統總是先計算出n%32的結果m,然后再進行x移位m的運算。
(2)當x是long類型數據時,系統總是先計算出n%64的結
果m,然后再進行x移位m的運算。2.5.5位運算符
位運算符的具體內容見表2.9。
例如:
inti=0xFFFFFFF1;
intj=~i;//最高位取反后為正,j值為14,6^3的結果為52.5.6條件運算符
條件運算符為三目運算符,其具體形式為
布爾表達式1?表達式2:表達式3(表達式2和表達式3的類型必須相同。)
條件運算符的執行順序是:先求解表達式1,若值為true則執行表達式2,此時表達式2的值作為整個條件表達式的值,否則求解表達式3,將表達式3的值作為整個條件表達式的值。程序運行結果如圖2.5所示。圖2.5條件運算符的應用2.5.7賦值運算符和賦值表達式
Java語言中,賦值運算符是“=”。賦值運算符的作用是將賦值運算符右邊的一個數據或一個表達式的值賦給賦值運算符左邊的一個變量。注意賦值號左邊必須是變量(即沒有final修飾的變量)。賦值運算符組成的表達式稱為賦值表達式。賦值運算的另一種形式是復合賦值運算符連接起來的表達式,具體參見表2.10。2.5.8運算符的優先級
運算符的優先級決定了表達式中不同運算執行的先后次序。優先級高的先進行運算,優先級低的后進行運算。在優先級相同的情況下,由結合性決定運算順序。
最基本的規律是:域、括號和數組下標的運算優先級最高,接下來依次是單目運算、雙目運算、三目運算,賦值運算的優先級最低。運算符的優先級具體見表2.11。
2.6語句
2.6.1語句概述
Java程序通過控制語句來執行程序流,完成一定的任務。
Java中的控制語句主要有以下幾類:
(1)分支語句:if-else,switch。
(2)循環語句:while,do-while,for。
(3)跳轉語句:break,continue,return。2.6.2分支語句
分支語句的執行流程為:根據條件表達式的值選擇語句組的執行次序,符合條件表達式的語句組被執行,不符合條件表達式值的語句組被跳過不執行。
條件語句有以下四種基本類型。
1.?if結構
if結構格式如下:
if(布爾表達式){
語句組;
}
2.?if…else結構
if…else結構格式如下:
if(布爾表達式){
語句組1;
}
else{
語句組2;
}
3.嵌套if…else結構
嵌套if…else結構格式如下:
if(布爾表達式1){
語句組1;
}
elseif(布爾表達式2){
語句組2;
}
…
elseif(布爾表達式n){
語句組n;
}
else{
語句組n+1;
}注意:
(1)?if括號中的結果應該為布爾值,否則編譯不會通過,例如如果x與y是int類型,x=y是賦值語句,其結果不是布爾值,不能充當布爾表達式;如果它們的類型本身為boolean,則x=y可以充當if中的條件。
(2)養成if后面無論是一句還是多句代碼,都寫{}的習慣。程序運行結果如圖2.6所示。圖2.6if...else結構的應用注意:
(1)表達式的返回值類型必須是這幾種之一:byte、short、int和char,其他類型都不允許。
(2)?case子句中的常量表達式n必須是常量,而且所有case子句中的值應是不同的。
(3)語句塊不需要用?{}?括起來。
(4)?default子句是可選的。
(5)?break語句用來在執行完一個case分支后,使程序跳出switch語句,即終止switch語句的執行(在一些特殊情況下,多個不同的case值要執行一組相同的操作,這時可以不用break)。
(6)可以使用if…else結構實現switch的所有功能,但是switch結構更加簡練。程序運行結果如圖2.7所示。圖2.7swith結構的應用2.6.3循環語句
1.?while循環
while循環(又稱“當型循環”)的執行流程為:首先判斷是否滿足條件,若滿足則執行循環體,如此重復執行,直到不滿足條件。一般格式如下:
[初始化]
while(布爾表達式){
循環體;
循環變量控制;
}
其流程邏輯關系如圖2.8所示。圖2.8while循環示意圖
2.?do…while循環
do…while循環(又稱“直到型循環”)的執行流程為:首先執行循環體,然后計算布爾表達式,若結果為true,則繼續執行循環體,直到布爾表達式的值為false為止。一般格式如下:
[初始化]
do{
循環體;
循環變量控制;
}while(布爾表達式)
其流程邏輯關系如圖2.9所示。圖2.9do...while循環示意圖
3.?for循環
for循環的執行流程為:首先執行初始化操作,然后判斷終止條件是否滿足,如果滿足,則執行循環體中的語句,最后執行迭代部分。完成一次循環后,重新判斷終止條件。
一般格式如下:
for(初值表達式(初始化);布爾表達式(終止條件);迭代表達式){
循環體;
}
其流程邏輯關系如圖2.10所示。圖2.10for循環示意圖注意:
(1)在“初值表達式”中可以申明作用域為該for循環的變量。
(2)“布爾表達式”為空時,相當于值為true。
(3)“初值表達式”、“布爾表達式”以及“迭代表達式”部分都可以為空語句(但分號不能省),三者均為空的時候,相當于一個無限循環。
(4)“初值表達式”和“迭代表達式”部分都可以使用逗號語句執行多個操作。
(5)如果循環變量在for中定義,變量的作用范圍僅限于循環體內。
(6)?for循環和while循環可以相互轉換。
【例2-8】for循環結構的例子:求1?+?2?+?3?+?...?+?100的值。
publicclassExample2_8{
publicstaticvoidmain(String[]args){
intsum=0;
for(inti=1;i<=100;i++)
sum+=i;
System.out.println(“1+2+3+...+100=”+sum);
}
}程序運行結果如圖2.11所示。圖2.11for循環結構例子該程序等同于以下程序:
publicclassExample2_8{
publicstaticvoidmain(String[]args){
intsum=0;
inti=1;
while(i<=100){
sum+=i;
i=i+1;
}
System.out.println(“1+2+3+...+100=”+sum);
}
}或等同于以下程序:
publicclassExample2_8{
publicstaticvoidmain(String[]args){
intsum=0;
inti=1;
do{
sum+=i;
i=i+1;
}while(i<=100);
System.out.println(“1+2+3+...+100=”+sum);
}
}2.6.4跳轉語句
Java語言提供了四種跳轉語句:break,continue,return和throw。
跳轉語句的功能是改變程序的執行流程。break語句可以獨立使用,而continue語句只能用在循環結構的循環體中。
1.?break語句
break語句的作用是退出switch語句或循環語句,并從緊
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 水穩站股份合同協議書
- 簡短愛情協議書
- 地鐵kpi績效協議書
- 聚餐經費協議書
- 繼續婚姻協議書
- 殯儀館公建民營協議書
- 肉毒注射協議書
- 道和生發協議書
- 聘用店長協議書
- 貸款配資協議書
- 安徽省合肥一中2025屆高三5月回歸教材讀本 解答
- 2025年福建福州左海供應鏈集團有限公司招聘筆試參考題庫附帶答案詳解
- 2024年濟南產業發展投資集團有限公司招聘真題
- 2024年棗莊市滕州市中小學招聘教師筆試真題
- 2025年工程財務分析試題及答案
- 小學校園文化方案
- 財政與金融練習試卷1(共230題)
- 2025年醫院管理培訓考試試題及答案
- 大學生思想政治教育課件教學
- 北京市公路貨運車輛不停車檢測系統設施設備運維定額2025
- 生產經營單位事故隱患內部報告獎勵機制實踐
評論
0/150
提交評論