




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
掌握J(rèn)ava語言的基本語法成分及其語法結(jié)構(gòu)是進(jìn)行Java程序設(shè)計(jì)的前提條件。本章主要介紹標(biāo)識(shí)符、數(shù)據(jù)類型、運(yùn)算符、表達(dá)式、Java編碼規(guī)范和格式等內(nèi)容。第二章Java程序設(shè)計(jì)基礎(chǔ)一、標(biāo)識(shí)符與數(shù)據(jù)類型二、變量與常量三、語句、表達(dá)式和運(yùn)算符四、數(shù)據(jù)類型之間的轉(zhuǎn)換五、注釋六、關(guān)鍵字七、Java編碼規(guī)范與編碼格式第一節(jié)標(biāo)識(shí)符與數(shù)據(jù)類型符號(hào)是構(gòu)成程序的基本單位,Java語言采用的是Unicode(統(tǒng)一字符編碼標(biāo)準(zhǔn))字符集,這是一種十六位的字符編碼標(biāo)準(zhǔn),通常使用的七位編碼ASCII字符集只相當(dāng)于Unicode的前128個(gè)字符。整個(gè)Unicode字符集包含65?535個(gè)字符,字母和漢字的長度是一樣的。這樣不會(huì)因?yàn)槭褂貌煌南到y(tǒng)而造成符號(hào)表示方法的不統(tǒng)一,為Java的跨平臺(tái)打下了基礎(chǔ)。Java開發(fā)環(huán)境可以本地化,以適應(yīng)多個(gè)不同的本地環(huán)境。發(fā)布最廣的Java開發(fā)工具包JDK版本被本地化為美國英語。它在ASCII字符和Unicode字符間進(jìn)行即時(shí)轉(zhuǎn)換,即美國英語版的JDK默認(rèn)為讀寫ASCII文件。第一節(jié)標(biāo)識(shí)符與數(shù)據(jù)類型標(biāo)識(shí)符與數(shù)據(jù)類型數(shù)據(jù)是記錄概念和事物的符號(hào)表示,數(shù)據(jù)在計(jì)算機(jī)中總是以某種特定的格式存放在計(jì)算機(jī)的存儲(chǔ)器中,不同的數(shù)據(jù)占用存儲(chǔ)單元的多少而不同,而且不同的數(shù)據(jù)其操作方式也不盡相同。Java語言中的數(shù)據(jù)類型可分為基本類型、復(fù)合類型和空類型(null)。第一節(jié)標(biāo)識(shí)符與數(shù)據(jù)類型在程序設(shè)計(jì)語言中存在的任何一個(gè)成分(如變量、常量、屬性、方法、類、接口等)都需要有一個(gè)名字表示,這個(gè)名字就是標(biāo)識(shí)符。也可以說,程序員對(duì)程序中的每個(gè)成分命名時(shí)使用的命名符號(hào)就是標(biāo)識(shí)符(identifier)。Java語言中,標(biāo)識(shí)符是以字母、下劃線(_)、美元符(?$?)開始的一個(gè)字符序列,后面可以跟字母、下劃線、美元符和數(shù)字,如圖2.1所示。例如,identifier、userName、User_Name、_sys_val、$change為合法的標(biāo)識(shí)符,而2mail(數(shù)字不能開頭)、room#?(#不是標(biāo)識(shí)符的構(gòu)成元素)、class(關(guān)鍵字不能作為表示符)、$total(空格不是標(biāo)識(shí)符的構(gòu)成元素)為非法的標(biāo)識(shí)符。第一節(jié)Java的概述一、標(biāo)識(shí)符圖2.1標(biāo)識(shí)符組成標(biāo)識(shí)符是大小寫敏感的,即要區(qū)分大小寫,也就是說Class與class是不同的。Java語言的數(shù)據(jù)類型有簡單類型和復(fù)合類型(用戶根據(jù)需要用基本數(shù)據(jù)類型經(jīng)過組合而形成的類型)。簡單數(shù)據(jù)類型包括以下八種:整數(shù)類型(Integer):byte、short、int、long。浮點(diǎn)類型(Floating):float、double。字符類型(Textual):char。布爾類型(Logical):boolean。第一節(jié)Java的概述二、數(shù)據(jù)類型(1)整型常量:十進(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。第一節(jié)Java的概述1.整型數(shù)據(jù)(2)整型變量如表2.1所示第一節(jié)Java的概述數(shù)據(jù)類型所占位數(shù)數(shù)
的
范
圍byte8-27~27-1short16-215~215-1int32-231~231-1long64-263~263-1(1)實(shí)型常量:十進(jìn)制數(shù)形式。由數(shù)字和小數(shù)點(diǎn)組成,且必須有小數(shù)點(diǎn),如0.123,1.23,123.0。科學(xué)計(jì)數(shù)法形式。如:123e3或123E3,其中e或E之前必須有數(shù)字,且e或E后面的指數(shù)必須為整數(shù)。
float型的值,必須在浮點(diǎn)常量后加f或F,如1.23f。浮點(diǎn)常量后不加任何字符或加D或加d表示雙精度數(shù),即double型的值。第一節(jié)Java的概述2.浮點(diǎn)型(實(shí)型)數(shù)據(jù)(2)實(shí)型變量如表2.2所示。第一節(jié)Java的概述數(shù)據(jù)類型所占位數(shù)數(shù)
的
范
圍float323.4e-38~3.4e+38double641.7e-38~1.7e+38(1)字符型常量:字符型常量是用單引號(hào)括起來的一個(gè)字符,如?'a'、'A'。(2)字符型變量:類型為char,它在機(jī)器中占16位,其范圍為0~65?535。字符型變量的定義如下:charc='a'; /*指定變量c為char型,且賦初值為?'a'*/第一節(jié)Java的概述3.字符型數(shù)據(jù)布爾型數(shù)據(jù)只有兩個(gè)值true和false,且它們不對(duì)應(yīng)于任何整數(shù)值。布爾型變量的定義:booleanb=true;與C++?不同,true和false不對(duì)應(yīng)于1和0。數(shù)據(jù)類型的例子:【示例2.1】輸出Java課考試最高分為98.5,輸出最高分學(xué)員姓名為張三,輸出最高分學(xué)員性別為男。第一節(jié)Java的概述4.布爾型數(shù)據(jù)參考代碼如圖2.2所示。第二節(jié)Java語言概述第二節(jié)變量與常量常量有字面(Literal)常量和符號(hào)常量兩種形式。第二節(jié)變量與常量變量與常量一、常量1.字面常量字面常量是指其數(shù)值意義如同字面所表示的一樣,例如2.1.2節(jié)所舉各種數(shù)據(jù)類型的常量,如:123,'a',還有字符串常量,如:"javaprogramming"。符號(hào)常量是用Java標(biāo)識(shí)符表示的一個(gè)常量,用保留字final來實(shí)現(xiàn),例如:finalintNUM=100;finaldoublePI=3.141593;符號(hào)常量定義的一般格式如下:finaltypeSpecifiervarName=value[,varName[=value]…];<final><數(shù)據(jù)類型><符號(hào)常量標(biāo)識(shí)符>=<常量值>;第二節(jié)變量與常量2.符號(hào)常量變量是Java程序中的基本存儲(chǔ)單元,它包括變量名、變量類型和作用域三部分。電腦一般使用內(nèi)存來記憶計(jì)算時(shí)所使用的數(shù)據(jù),內(nèi)存空間與變量的關(guān)系可由入住旅館的過程來說明。旅館入住時(shí)對(duì)房間的需求各不相同,應(yīng)根據(jù)需求為旅客分配房間類型,指定房間號(hào),旅客才能順利入??!同樣,數(shù)據(jù)各式各樣,要先根據(jù)數(shù)據(jù)的需求(即類型)為它申請(qǐng)一塊合適的內(nèi)存空間,再給這塊內(nèi)存空間指定一個(gè)變量名,這樣才能正常訪問數(shù)據(jù)存儲(chǔ)的位置,兩個(gè)過程的對(duì)應(yīng)如圖2.3所示。第二節(jié)變量與常量二、變量圖2.3入住旅館與內(nèi)存存儲(chǔ)數(shù)據(jù)的對(duì)應(yīng)使用變量的步驟如下:第一步:聲明變量,即“根據(jù)數(shù)據(jù)類型在內(nèi)存申請(qǐng)空間”。第二步:賦值,即“將數(shù)據(jù)存儲(chǔ)至對(duì)應(yīng)的內(nèi)存空間”。說明:第一步和第二步可以合并。第三步:使用變量,即“取出數(shù)據(jù)使用”。第二節(jié)變量與常量第三步:使用變量,即“取出數(shù)據(jù)使用”。使用變量時(shí),可能會(huì)出現(xiàn)以下常見錯(cuò)誤:變量未賦值,如圖2.4所示的運(yùn)行代碼及結(jié)果。
(a)運(yùn)行代碼(b)運(yùn)行結(jié)果第二節(jié)變量與常量(2)變量名命名不符合要求,如圖2.5所示的運(yùn)行代碼及結(jié)果。第二節(jié)變量與常量(a)運(yùn)行代碼(b)運(yùn)行結(jié)果(3)變量名重名,如圖2.6所示的運(yùn)行代碼及結(jié)果。第二節(jié)變量與常量(a)運(yùn)行代碼(b)運(yùn)行結(jié)果Java語言所處理的任何對(duì)象(變量、標(biāo)識(shí)符常量、類、實(shí)例等)都遵從先聲明后使用的原則。聲明的作用有兩點(diǎn):一是確認(rèn)對(duì)象的標(biāo)識(shí)符,以便系統(tǒng)為它指定存儲(chǔ)地址和識(shí)別它,這是“按名訪問”的原則;二是為該對(duì)象指定數(shù)據(jù)類型,以便系統(tǒng)為它分配足夠的存儲(chǔ)單元。變量經(jīng)聲明后,便可以對(duì)它進(jìn)行賦值和使用,若使用前沒有賦值,則在編譯時(shí)會(huì)指出語法錯(cuò)誤。這也是Java語言安全性的體現(xiàn)。第二節(jié)變量與常量三、變量的作用域變量的作用域指明可訪問該變量的一段代碼,聲明一個(gè)變量的同時(shí)也就指明了變量的作用域。按作用域來分,變量可以有:局部變量、類變量(也稱成員變量)、方法參數(shù)和異常處理參數(shù)。在一個(gè)確定的域中,變量名應(yīng)該是唯一的。局部變量在方法或方法的一個(gè)塊代碼中聲明,則它的作用域?yàn)樗诘拇a塊(整個(gè)方法或方法中的某塊代碼)。類變量在類中聲明,而不是在類的某個(gè)方法中聲明,則它的作用域是整個(gè)類。方法參數(shù)傳遞給方法,它的作用域就是這個(gè)方法。異常處理參數(shù)傳遞給異常處理代碼,它的作用域就是異常處理部分。第二節(jié)變量與常量若不給變量賦初值,則變量默認(rèn)值如表2.3所示。第二節(jié)變量與常量四、變量的默認(rèn)值數(shù)據(jù)類型默認(rèn)值(初始值)booleanfalsechar'\000'(空字符)byte0(byte)short0(short)int0long0Lfloat0.0Fdouble0.0第三節(jié)Java語言概述第三節(jié)語句、表達(dá)式和運(yùn)算符Java語言中對(duì)數(shù)據(jù)的處理過程稱為運(yùn)算,用于表示運(yùn)算的符號(hào)稱為運(yùn)算符(也稱操作符),它由一至三個(gè)字符結(jié)合而成,在Java語言中被視為一個(gè)符號(hào),如“=”、“<=”、“<<=”。按照運(yùn)算符要求操作數(shù)個(gè)數(shù)的多少,Java運(yùn)算符可以分為三類:一元運(yùn)算符、二元運(yùn)算符、三元運(yùn)算符,如“++”、“*”、“?:”。三元運(yùn)算符只有一個(gè),即條件運(yùn)算符。表達(dá)式是由操作數(shù)和運(yùn)算符按一定的語法形式組成的符號(hào)序列。一個(gè)常量或一個(gè)變量名字是最簡單的表達(dá)式,其值即該常量或變量的值;表達(dá)式的值還可以用作其他運(yùn)算的操作數(shù),形成更復(fù)雜的表達(dá)式。語句是構(gòu)成程序的最基本單位,程序運(yùn)行的過程就是執(zhí)行一條條語句的過程。語句可以是各類表達(dá)式,也可以是其他語句。第三節(jié)語句、表達(dá)式和運(yùn)算符語句、表達(dá)式和運(yùn)算符Java語言中,賦值運(yùn)算符是“=”,左邊必須是變量。在賦值運(yùn)算符“=”之前加上其他運(yùn)算符,則構(gòu)成復(fù)合賦值運(yùn)算符,如“=”、“+=”、“-=”、“*=”、“/=”都是賦值運(yùn)算符。復(fù)合賦值運(yùn)算符如表2.4所示。第三節(jié)語句、表達(dá)式和運(yùn)算符一、賦值運(yùn)算符與賦值表達(dá)式復(fù)合賦值運(yùn)算符舉例等
效
于+=x+=yx=x+y*=x*=yx=x*y%=x%=yx=x%y&=x&=yx=x&y<<=x<<=yx=x<<y>>>=x>>>=yx=x>>>y-=x-=yx=x-y/=x/=yx=x/y∧=x∧=yx=x∧y|=x|=yx=x|y>>=x>>=yx=x>>y語句是程序的基本執(zhí)行單位,一個(gè)程序由若干條語句組成。Java語言的語句,在其末尾有一個(gè)分號(hào)“;”作為標(biāo)記,其語法和語義與C和C++?中的很相似,但有一個(gè)例外,goto語句被取消了。Java語言的語句可分為四大類:聲明語句、表達(dá)式語句、流程控制語句和異常處理語句。在2.2節(jié)需要掌握的是聲明語句,在本節(jié)中要掌握的是表達(dá)式語句,流程控制語句和異常處理語句將在后面的章節(jié)講述。也有文獻(xiàn)或教材將Java語言的語句分為簡單語句和復(fù)合語句。簡單語句是語句的基本構(gòu)建塊;復(fù)合語句是那些包含其他語句的語句。簡單語句包括表達(dá)式語句、局部變量聲明、break語句、continue語句和return語句。復(fù)合語句包括語句塊、選擇語句、循環(huán)語句以及執(zhí)行語句。第三節(jié)語句、表達(dá)式和運(yùn)算符二、語句算術(shù)運(yùn)算符是指能夠進(jìn)行算術(shù)運(yùn)算的符號(hào),它有:+、-、*、/、%?(取余數(shù))、++?(自增1)、--?(自減1)、-?(取反)。例如:二元運(yùn)算符:3+2,a-b;一元運(yùn)算符:i++?(等效于i=i+1),--i?(等效于i=i-1),-a?(等效于a=-a)。第三節(jié)語句、表達(dá)式和運(yùn)算符三、算術(shù)運(yùn)算符關(guān)系運(yùn)算符是指能夠?qū)\(yùn)算數(shù)進(jìn)行關(guān)系運(yùn)算的符號(hào),共有6個(gè),即?>、<、>=、<=、==、!=。利用關(guān)系運(yùn)算符連接的式子稱為關(guān)系表達(dá)式。關(guān)系運(yùn)算實(shí)際上就是常說的比較運(yùn)算,結(jié)果是邏輯值(true或false)。第三節(jié)語句、表達(dá)式和運(yùn)算符四、關(guān)系運(yùn)算符【示例2.2】從控制臺(tái)輸入學(xué)員王浩3門課程成績,編寫程序來實(shí)現(xiàn)以下運(yùn)算。(1)?Java課和SQL課的成績差。(2)?3門課的平均分。運(yùn)行代碼及結(jié)果如圖2.7所示。第三節(jié)語句、表達(dá)式和運(yùn)算符(a)運(yùn)行代碼(b)運(yùn)行結(jié)果邏輯運(yùn)算符是指能夠進(jìn)行邏輯運(yùn)算的符號(hào),即邏輯非(!)、邏輯與(&&)、邏輯或(||)。它與關(guān)系運(yùn)算符的不同之處是關(guān)系運(yùn)算符的運(yùn)算結(jié)果是布爾值,而邏輯運(yùn)算的運(yùn)算數(shù)和運(yùn)算結(jié)果都是布爾值。例如:flag=true;!(flag);flag&&false;第三節(jié)語句、表達(dá)式和運(yùn)算符五、邏輯運(yùn)算符位運(yùn)算是對(duì)整數(shù)的二進(jìn)制表示的每一位進(jìn)行操作,位運(yùn)算的操作數(shù)和結(jié)果都是整型量。位運(yùn)算符包括右移(>>)、左移(<<)、不帶符號(hào)的右移(>>>)、位與(&)、位或(?|?)、位異或(?^?)、位反(?~?)。例如,a?=?10011101,b?=?00111001,則有如下結(jié)果:a<<3=?11101000,a>>3=?11110011,a>>>3?=?00010011a&b?=?00011001,a|b?=?10111101,~a?=?01100010,a^b?=?10100100第三節(jié)語句、表達(dá)式和運(yùn)算符六、位運(yùn)算符其他運(yùn)算符包括條件運(yùn)算符(?:)、分量運(yùn)算符(·)、下標(biāo)運(yùn)算符([])、實(shí)例運(yùn)算符(instanceof)、內(nèi)存分配運(yùn)算符(new)、強(qiáng)制類型轉(zhuǎn)換運(yùn)算符(類型)、方法調(diào)用運(yùn)算符(())等。例如:result=(sum==0?1:num/sum);
System.out.println("helloworld");intarray1[]=newint[4];條件運(yùn)算符是Java中唯一的一個(gè)三元運(yùn)算符,其使用格式如下:布爾表達(dá)式?結(jié)果表達(dá)式1:結(jié)果表達(dá)式2;在實(shí)際應(yīng)用中,常常將條件運(yùn)算符與賦值運(yùn)算符結(jié)合起來構(gòu)成賦值表達(dá)式,例如:x=(a>b?a:b);? //若a>b,則x=a;否則x=b第三節(jié)語句、表達(dá)式和運(yùn)算符七、其他運(yùn)算符(1)不同類型數(shù)據(jù)間的優(yōu)先關(guān)系如下:低------------------------------------------->高byte、short、char→int→long→float→double(2)運(yùn)算符的優(yōu)先次序。表達(dá)式的運(yùn)算按照運(yùn)算符的優(yōu)先順序從高到低進(jìn)行,同級(jí)運(yùn)算符從左到右進(jìn)行,如表2.5所示。第三節(jié)語句、表達(dá)式和運(yùn)算符八、運(yùn)算符的優(yōu)先級(jí)優(yōu)先級(jí)運(yùn)算符描述1.
[]
()域運(yùn)算,數(shù)組下標(biāo),分組括號(hào)2++
--
!
~
instanceof一元運(yùn)算3new(type)分配空間,強(qiáng)制類型轉(zhuǎn)換4*
/
%乘,除,求余5+
-加,減6>>
>>>
<<右移,不帶符號(hào)位右移,左移7>
<
>=
<=大于,小于,大于等于,小于等于8=
=
!=相等,不相等9&按位與10^按位異或11|按位或12&&邏輯與13||邏輯或14?:條件運(yùn)算符15=
+=
-=
*=
/=
%=
^=賦值運(yùn)算16&=
|=
<<=
>>=
>>>=按位賦值運(yùn)算例如,下述條件語句分四步完成:Result=sum==0?1:num/sum;第1步:(num/sum);第2步:sum==0;第3步:?1:(num/sum));第4步:Result=。第三節(jié)語句、表達(dá)式和運(yùn)算符第四節(jié)Java語言概述第四節(jié)數(shù)據(jù)類型之間的轉(zhuǎn)換整型、實(shí)型、字符型數(shù)據(jù)可以混合運(yùn)算。運(yùn)算中,不同類型的數(shù)據(jù)先轉(zhuǎn)化為同一類型,即把精度較低的類型轉(zhuǎn)換為精度較高的類型,然后進(jìn)行運(yùn)算,這種轉(zhuǎn)換稱為自動(dòng)類型轉(zhuǎn)換,如表2.6所示。int類型的常量可以直接賦值給byte、short、char類型的變量。第四節(jié)數(shù)據(jù)類型之間的轉(zhuǎn)換數(shù)據(jù)類型之間的轉(zhuǎn)換一、自動(dòng)類型轉(zhuǎn)換操作數(shù)1類型操作數(shù)2類型轉(zhuǎn)換后的類型byte、short、charintintbyte、short、char、intlonglongbyte、short、char、int、longfloatfloatbyte、short、char、int、long、floatdoubledouble【示例2.3】某班第一次Java考試平均分為81.29,第二次比第一次多2分,計(jì)算第二次考試平均分?運(yùn)行代碼及結(jié)果如圖2.8所示。第四節(jié)數(shù)據(jù)類型之間的轉(zhuǎn)換(a)運(yùn)行代碼(b)運(yùn)行結(jié)果高級(jí)數(shù)據(jù)要轉(zhuǎn)換成低級(jí)數(shù)據(jù),需要用到強(qiáng)制類型轉(zhuǎn)換,如下:inti;byteb=(byte)i; /*把int型變量i強(qiáng)制轉(zhuǎn)換為byte型*/轉(zhuǎn)換格式:(類型名)表達(dá)式強(qiáng)制類型轉(zhuǎn)換只是得到一個(gè)所需類型的中間變量,原來變量的類型并不發(fā)生變化。boolean類型的數(shù)據(jù)不能進(jìn)行自動(dòng)和強(qiáng)制類型轉(zhuǎn)換。第四節(jié)數(shù)據(jù)類型之間的轉(zhuǎn)換二、強(qiáng)制類型轉(zhuǎn)換【示例2.4】去年Apple筆記本所占市場份額是20,今年增長的市場份額是9.8,求今年所占份額?運(yùn)行代碼如圖2.9所示。第四節(jié)數(shù)據(jù)類型之間的轉(zhuǎn)換如果要進(jìn)行強(qiáng)制類型轉(zhuǎn)換的對(duì)象不是單個(gè)數(shù)據(jù)或變量,而是一個(gè)包含多項(xiàng)的表達(dá)式,則表達(dá)式必須用括號(hào)括起來,否則結(jié)果有誤。轉(zhuǎn)換格式:(類型名)(表達(dá)式)第四節(jié)數(shù)據(jù)類型之間的轉(zhuǎn)換三、表達(dá)式的類型轉(zhuǎn)換整型、實(shí)型、字符型數(shù)據(jù)可以混合運(yùn)算。運(yùn)算中,不同類型的數(shù)據(jù)先轉(zhuǎn)化為同一類型,即把精度較低的類型轉(zhuǎn)換為精度較高的類型,然后進(jìn)行運(yùn)算,這種轉(zhuǎn)換稱為自動(dòng)類型轉(zhuǎn)換,如表2.6所示。第四節(jié)數(shù)據(jù)類型之間的轉(zhuǎn)換數(shù)據(jù)類型之間的轉(zhuǎn)換一、自動(dòng)類型轉(zhuǎn)換第五節(jié)Java語言概述第五節(jié)注釋Java程序里主要有兩種類型的注釋。第一種是傳統(tǒng)的、C語言風(fēng)格的注釋,是從C++繼承而來的。這些注釋用一個(gè)“/*”起頭,隨后是注釋內(nèi)容,并可跨越多行,最后用一個(gè)“*/”結(jié)束,這種注釋方法叫做“多行注釋”。注意:許多程序員為閱讀方便,在連續(xù)注釋內(nèi)容的每一行都用一個(gè)“*”開頭,所以經(jīng)常能看到像下面這樣的注釋:第五節(jié)注釋注釋/*這是*一段注釋,*它跨越了多個(gè)行*/但請(qǐng)記住,進(jìn)行編譯時(shí),“/*”和“*/”之間的內(nèi)容都會(huì)被忽略,所以上述注釋與下面這段注釋并沒有什么不同:/*這是一段注釋,它跨越了多個(gè)行*/第五節(jié)注釋第二種類型的注釋也起源于C++。這種注釋叫做“單行注釋”,以一個(gè)“//”起頭,表示這一行的所有內(nèi)容都是注釋。這種類型的注釋更常用,因?yàn)樗鼤鴮憰r(shí)更方便。沒有必要在鍵盤上尋找“/”,再尋找“*”(只需按兩次同樣的鍵),而且不必在注釋結(jié)尾時(shí)加一個(gè)結(jié)束標(biāo)記。下面便是這類注釋的一個(gè)例子://這是一條單行注釋第五節(jié)注釋運(yùn)行代碼如圖2.10所示。還有一種注釋是多行注釋的變形,叫做“文檔注釋”,格式如下:/***/運(yùn)行代碼如圖2.11所示??捎胘avadoc.exe提取程序文件中的文檔注釋來制作HTML幫助文件。第五節(jié)注釋
第六節(jié)Java語言概述第六節(jié)關(guān)鍵字關(guān)鍵字又稱為保留字,它具有專門的意義和用途,不能當(dāng)作一般的標(biāo)識(shí)符使用。下面這些標(biāo)識(shí)符是Java語言中的所有保留字:abstractbreakbytebooleancatchcaseclasscharcontinuedefaultdoubledoelseextendsfalsefinalfloatforfinallyifimportimplementsintinterfaceinstanceoflonglengthnativenewnullpackageprivateprotectedpublicreturnswitchsynchronizedshortstaticsupertrytruethisthrowthrowsthreadsafetransientvoidwhileJava語言中的保留字均用小寫字母表示。第六節(jié)關(guān)鍵字關(guān)鍵字第七節(jié)Java語言概述第七節(jié)Java編碼規(guī)范
與編碼格式一個(gè)完整的Java源程序應(yīng)該包括下列部分:package語句; //該部分至多只有一句,必須放在源程序的第一句import語句; /*該部分可以有若干import語句或者沒有,必須放在所有的類定義之前*/publicclassDefinition; //公共類定義部分,至多只有一個(gè)公共類的定義//Java語言規(guī)定該Java源程序的文件名必須與該公共類名完全一致classDefinition; //類定義部分,可以有0個(gè)或者多個(gè)類定義interfaceDefinition; //接口定義部分,可以有0個(gè)或者多個(gè)接口定義第七節(jié)Java編碼規(guī)范與編碼格式Java編碼規(guī)范與編碼格式例如,一個(gè)Java源程序可以是如下結(jié)構(gòu),該源程序命名為HelloWorldApp.java:ackagejavawork.helloworld; /*把編譯生成的所有.class文件放到包javawork.helloworld中*/importjava.awt.*;
//告訴編譯器本程序中用到系統(tǒng)的AWT包importjavawork.newcentury; /*告訴編譯器本程序中用到用戶自定義的包javawork.newcentury*/publicclassHelloWorldApp{...} /*公共類HelloWorldApp的定義,名字與文件名相同*/第七節(jié)Java編碼規(guī)范與編碼格式classTheFirstClass{...} //第一個(gè)普通類TheFirstClass的定義classTheSecondClass{...} //第二個(gè)普通類TheSecondClass的定義... //其他普通類的定義interfaceTheFirstInterface{...} /*第一個(gè)接口TheFirstInterface的定義*/... //其他接口定義第七節(jié)Java編碼規(guī)范與編碼格式package語句:由于Java編譯器為每個(gè)類生成一個(gè)字節(jié)碼文件,且文件名與類名相同,因此同名的類有可能發(fā)生沖突。為了解決這一問題,Java提供包來管理類名空間,包實(shí)際提供了一種命名機(jī)制和可見性限制機(jī)制。而在Java的系統(tǒng)類庫中,把功能相似的類放到一個(gè)包(Package)中。例如,所有的圖形界面的類都放在Java.awt這個(gè)包中,與網(wǎng)絡(luò)功能有關(guān)的類都放到這個(gè)包中。用戶自己編寫的類(指.class文件)也應(yīng)該按照功能放在由自己命名的相應(yīng)的包中,如上例中的javawork.helloworld就是一個(gè)包。第七節(jié)Java編碼規(guī)范與編碼格式包在實(shí)際的實(shí)現(xiàn)過程中是與文件系統(tǒng)相對(duì)應(yīng)的,如javawork.helloworld所對(duì)應(yīng)的目錄是path\javawork\helloworld,而path是在編譯該源程序時(shí)指定的。比如在命令行中編譯上述HelloWorldApp.java文件時(shí),可以在命令行中輸入“javac-df:\javaprojectHelloWorldApp.java”,則編譯生成的HelloWorldApp.class文件將放在目錄f:\javaproject\javawork\helloworld\目錄下面,此時(shí)f:\javaprojcet相當(dāng)于path。但是如果在編譯時(shí)不指定path,則生成的?.class文件將放在編譯時(shí)命令行所在當(dāng)前目錄的下面。比如在命令行目錄f:\javaproject下輸入編譯命令“javacHelloWorldApp.java”,則生成的HelloWorldApp.class文件將放在目錄f:\javaproject下面,此時(shí)的package語句沒起作用。第七節(jié)Java編碼規(guī)范與編碼格式但是,如果程序中包含了package語句,則在運(yùn)行時(shí)就必須包含包名。例如,HelloWorldApp.java程序的第一行語句是packagep1.p2;編譯的時(shí)候在命令行下輸入“javac-dpathHelloWorldApp.java”,則HelloWorldApp.class將放在目錄path\p1\p2的下面,這時(shí)候運(yùn)行該程序時(shí)有以下兩種方式。第一種:在命令行下的path目錄下輸入字符“javap1.p2.HelloWorldApp”。第二種:在環(huán)境變量classpath中加入目錄path,則運(yùn)行時(shí)在任何目錄下輸入“javap1.p2.HelloWorldApp”即可。第七節(jié)Java編碼規(guī)范與編碼格式import語句:如果在源程序中用到了除java.lang這個(gè)包以外的類,無論是系統(tǒng)的類還是自己定義的包中的類,都必須用import語句標(biāo)識(shí),以便通知編譯器在編譯時(shí)找到相應(yīng)的類文件。例如,上例中的java.awt是系統(tǒng)的包,而javawork.newcentury是用戶自定義的包。比如程序中用到了類Button,而Button是屬于包java.awt的,在編譯時(shí)編譯器將從目錄classpath\java\awt中去尋找類Button,classpath是事先設(shè)定的環(huán)境變量,如可以設(shè)為classpath=.;d:\jdk1.3\lib\。classpath也可以稱為類路徑,需要提醒大家注意的是,在classpath中往往包含多個(gè)路徑,用分號(hào)隔開。例如,classpath=.;d:\jdk1.3\lib\中的第一個(gè)分號(hào)之前的路徑是一個(gè)點(diǎn),表示當(dāng)前目錄,分號(hào)后面的路徑是d:\jdk1.3\lib\,表示系統(tǒng)的標(biāo)準(zhǔn)類庫目錄。在編譯過程中尋找類時(shí),先從環(huán)境變量classpath的第一個(gè)目錄開始往下找,如先從第七節(jié)Java編碼規(guī)范與編碼格式前目錄往下找java.awt中的類Button時(shí),編譯器找不著,然后從環(huán)境變量classpath的第二個(gè)目錄開始往下找,就是從系統(tǒng)的標(biāo)準(zhǔn)類庫目錄d:\jdk1.3\lib開始往下找java.awt的Button這個(gè)類,最后就可找到。如果要從一個(gè)包中引入多個(gè)類,則在包名后加上“.*”表示。如果程序中用到了用戶自己定義的包中的類,假如在上面程序中要用到j(luò)avawork.newcentury包中的類HelloWorldApp,而javawork.newcentury所對(duì)應(yīng)的目錄是f:\javaproject\javawork\newcentury,classpath仍舊是classpath=.;d:\jdk1.3\lib\,則編譯器在編譯時(shí)將首先從當(dāng)前目錄尋找包javawork.newcentury,結(jié)果沒有找到,然后從環(huán)境變量classpath的第二個(gè)目錄d:\jdk1.3\lib\開始往下找,但是仍然沒有找到。原因在于包javawork.newcentury是放在目錄f:\javaproject下面。第七節(jié)Java編碼規(guī)范與編碼格式因此,需要重新設(shè)定環(huán)境變量classpath,設(shè)為classpath=.;d:\jdk1.3\lib\;f:\javaproject\,于是編譯器從f:\javaproject開始找包javawork.newcentury,就可以找到。源文件的命名規(guī)則:如果在源程序中包含有公共類的定義,則該源文件名必須與該公共類的名字完全一致,字母的大小寫也必須一樣。這是Java語言的一個(gè)嚴(yán)格的規(guī)定,如果不遵守,在編譯時(shí)就會(huì)出錯(cuò)。因此,在一個(gè)Java源程序中至多只能有一個(gè)公共類的定義。如果源程序中不包含公共類的定義,則該文件名可以任意取名;如果在一個(gè)源程序中有多個(gè)類定義,則在編譯時(shí)將為每個(gè)類生成一個(gè)?.class文件。第七節(jié)Java編碼規(guī)范與編碼格式制作者:xxxxx第三章Java流程控制語句Java程序通過控制語句來執(zhí)行程序流,完成一定的任務(wù)。程序流是由若干個(gè)語句組成的,語句可以是單一的一條語句,也可以是用大括號(hào)括起來的一個(gè)復(fù)合語句。Java中的控制語句有以下幾類:分支語句:if-else,switch。循環(huán)語句:while,do-while,for。與程序轉(zhuǎn)移有關(guān)的跳轉(zhuǎn)語句:break,continue,return。例外處理語句:try-catch-finally,throw。注釋語句://,/**/,/***/。第一節(jié)分支語句if語句是選擇結(jié)構(gòu)中最基本的語句。if語句有兩種形式:if和if-else。if語句有選擇地執(zhí)行語句,只有當(dāng)表達(dá)式條件為真(true)時(shí)執(zhí)行程序。if-else在表達(dá)式條件為真(true)與假(false)時(shí)各執(zhí)行不同的程序序列。第一節(jié)分之語句一、if語句if-else語句的基本形式如下:if(布爾表達(dá)式){//根據(jù)布爾表達(dá)式的真假?zèng)Q定執(zhí)行不同的語句語句序列1//條件為真}[else{語句序列2//條件為假}]第一節(jié)分之語句1.if-else語句其中,布爾表達(dá)式一般為條件表達(dá)式或邏輯表達(dá)式。當(dāng)布爾表達(dá)式的值為true時(shí),執(zhí)行語句序列1;當(dāng)布爾表達(dá)式的值為false時(shí),執(zhí)行語句序列2。第一節(jié)分之語句(a)運(yùn)行代碼【示例3.1】如果張浩的Java成績大于90分,張浩就能獲得一個(gè)MP4作為獎(jiǎng)勵(lì)。運(yùn)行代碼及結(jié)果如圖3.1所示。第一節(jié)分之語句(a)運(yùn)行代碼第一節(jié)分之語句(a)運(yùn)行代碼圖3.1運(yùn)行代碼及結(jié)果第一節(jié)分之語句復(fù)雜條件下的if選擇結(jié)構(gòu)如表3.1所示。第一節(jié)分之語句【示例3.2】如果張浩的Java成績大于98分且音樂成績大于80分,或者Java成績等于100分且音樂成績大于70分,張浩就能獲得一個(gè)MP4作為獎(jiǎng)勵(lì)。運(yùn)行代碼及結(jié)果如圖3.2所示。(a)運(yùn)行代碼第一節(jié)分之語句(b)運(yùn)行結(jié)果圖3.2運(yùn)行代碼及結(jié)果在實(shí)際處理中,常會(huì)有許多條件需要判斷,因此要用到多個(gè)if,甚至在一個(gè)if中還有多個(gè)if,故稱做嵌套if。第一節(jié)分之語句2.嵌套if語句嵌套if語句的語法格式如下:if(布爾表達(dá)式A){語句序列Aif(布爾表達(dá)式B){語句序列B1}else{語句序列B2}第一節(jié)分之語句…}else{if(布爾表達(dá)式C){語句序列C1}else{語句序列C2}}第一節(jié)分之語句else子句不能單獨(dú)作為語句來使用,它必須和if配對(duì)使用。else總是與離它最近的if配對(duì)??梢允褂么罄ㄌ?hào)來改變if-else的配對(duì)關(guān)系。第一節(jié)分之語句第一節(jié)分之語句【示例3.3】如果張浩的Java成績大于98分,老師就獎(jiǎng)勵(lì)他一個(gè)MP4,否則老師就罰他編碼。運(yùn)行代碼及結(jié)果如圖3.2所示。運(yùn)行代碼及結(jié)果如圖3.3所示。(a)運(yùn)行代碼第一節(jié)分之語句(b)運(yùn)行結(jié)果圖3.3運(yùn)行代碼及結(jié)果若出現(xiàn)的情況有兩種以上,則可用if-elseif-else語句。if-elseif-else語句的語法格式如下:if(布爾表達(dá)式1){語句序列1}elseif(布爾表達(dá)式2){語句序列2}第一節(jié)分之語句3.if-elseif-else語句elseif(布爾表達(dá)式N){語句序列N}else{語句序列M}第一節(jié)分之語句3.if-elseif-else語句程序執(zhí)行時(shí),首先判斷布爾表達(dá)式1的值,若為真,則順序執(zhí)行語句序列1,if語句結(jié)束;若為假,則判斷布爾表達(dá)式2的值,布爾表達(dá)式2的值若為真,則順序執(zhí)行語句序列2,if語句結(jié)束;布爾表達(dá)式2的值若為假,則判斷布爾表達(dá)式3的值……若所有的布爾表達(dá)式的值都為假,則執(zhí)行語句序列M,if語句結(jié)束。第一節(jié)分之語句第一節(jié)分之語句【示例3.4】我想買車,買什么車決定于我在銀行有多少存款。如果我的存款超過500萬,我就買凱迪拉克;否則,如果我的存款超過100萬,我就買帕薩特;否則,如果我的存款超過50萬,我就買伊蘭特;否則,如果我的存款超過10萬,我就買奧拓;否則,我買捷安特。第一節(jié)分之語句運(yùn)行代碼如圖3.4所示。圖3.4運(yùn)行代碼第一節(jié)分之語句嵌套if選擇結(jié)構(gòu)如下:if(條件1){if(條件2){代碼塊1}else{代碼塊2}}else{代碼塊3}第一節(jié)分之語句【示例3.3】如果張浩的Java成績大于98分,老師就獎(jiǎng)勵(lì)他一個(gè)MP4,否則老師就罰他編碼。運(yùn)行代碼及結(jié)果如圖3.2所示。運(yùn)行代碼及結(jié)果如圖3.3所示。(a)運(yùn)行代碼第一節(jié)分之語句【示例3.5】學(xué)校舉行運(yùn)動(dòng)會(huì),百米賽跑跑入10秒內(nèi)的學(xué)生才有資格進(jìn)入決賽。首先要判斷是否能夠進(jìn)入決賽;在確定進(jìn)入決賽的情況下,再判斷是進(jìn)入男子組還是進(jìn)入女子組。運(yùn)行代碼如圖3.5所示。圖3.5運(yùn)行代碼在if語句中,布爾表達(dá)式的值只有兩種:true和false。若情況更多時(shí),就需要另外一種可提供更多選擇的語句:switch語句。第一節(jié)分之語句二、switch語句根據(jù)一個(gè)整數(shù)表達(dá)式的值,switch語句可從一系列代碼中選出一段執(zhí)行。它的格式如下:switch(表達(dá)式){case常量1:語句序列1;break;case常量2:語句序列2;break;第一節(jié)分之語句case常量N:語句序列N;break;[default:語句序列M;break;]}第一節(jié)分之語句說明:(1)表達(dá)式的類型可以為byte、short、int、char。多分支語句把表達(dá)式的值與每個(gè)case子句中的常量進(jìn)行對(duì)比,如果匹配成功,則執(zhí)行該case子句后面的語句序列。(2)?case子句中的“常量N”必須是常量,而且所有case子句中的常量應(yīng)是不同的。(3)?default子句是可選的。(4)?break語句執(zhí)行完一個(gè)case分支后,使程序跳出switch語句,即終止switch語句的執(zhí)行。在一些特殊情況下,多個(gè)不同的case值要執(zhí)行一組相同的操作,這時(shí)可以不用break。第一節(jié)分之語句【示例3.6】韓嫣參加計(jì)算機(jī)編程大賽,如果獲得第一名,將參加麻省理工大學(xué)組織的1個(gè)月夏令營;如果獲得第二名,將獎(jiǎng)勵(lì)惠普筆記本電腦一部;如果獲得第三名,將獎(jiǎng)勵(lì)移動(dòng)硬盤一個(gè);否則,沒有任何獎(jiǎng)勵(lì)。第一節(jié)分之語句第一節(jié)分之語句運(yùn)行代碼如圖3.6所示。圖3.6運(yùn)行代碼第一節(jié)分之語句使用switch語句時(shí),常見的一些錯(cuò)誤如下:(1)?case分支后忘記寫break,如圖3.7所示的運(yùn)行代碼及輸出結(jié)果。圖3.7運(yùn)行代碼及輸出結(jié)果第一節(jié)分之語句(2)?case子句的常量相同,如圖3.8所示的運(yùn)行代碼。圖3.8運(yùn)行代碼第一節(jié)分之語句(3)?default沒有放在末尾,如圖3.9所示的運(yùn)行代碼及輸出結(jié)果。圖3.9運(yùn)行代碼及輸出結(jié)果第一節(jié)分之語句(4)?switch表達(dá)式的值不是整型或字符型,如圖3.10所示的運(yùn)行代碼。圖3.10運(yùn)行代碼第二節(jié)循環(huán)語句循環(huán)語句的作用是反復(fù)執(zhí)行一段語句序列,直到滿足終止循環(huán)的條件為止。一個(gè)循環(huán)一般包含以下四部分:(1)初始化部分:用來設(shè)置循環(huán)的一些初始條件,一般只執(zhí)行一次。(2)終止部分:通常是一個(gè)布爾表達(dá)式,每一次循環(huán)都要對(duì)該表達(dá)式求值,以驗(yàn)證是否滿足終止條件。(3)循環(huán)體部分:被反復(fù)執(zhí)行的一段語句序列,可以是一個(gè)單一語句,也可以是一個(gè)復(fù)合語句。(4)迭代部分:在當(dāng)前循環(huán)結(jié)束,下一次循環(huán)開始執(zhí)行之前執(zhí)行的語句,常常用來更新影響終止條件的變量,使循環(huán)最終結(jié)束。第二節(jié)循環(huán)語句while語句的語法格式如下:[初始化部分]while(布爾表達(dá)式){//終止部分循環(huán)體部分[迭代部分]}第二節(jié)循環(huán)語句一、while語句在循環(huán)剛開始時(shí),會(huì)計(jì)算一次布爾表達(dá)式的值。而對(duì)于后來每一次額外的循環(huán),都會(huì)在開始前重新計(jì)算一次。當(dāng)布爾表達(dá)式的值為true時(shí),執(zhí)行循環(huán)體部分和迭代部分,然后再判斷布爾表達(dá)式的值。如果布爾表達(dá)式的值為false,則退出循環(huán);否則,重復(fù)上面的過程。第二節(jié)循環(huán)語句【示例3.7】為了幫助張浩盡快提高成績,老師給他安排了每天的學(xué)習(xí)任務(wù),其中,上午閱讀教材學(xué)習(xí)理論部分,下午上機(jī)編程掌握代碼部分。老師每天檢查學(xué)習(xí)成果,如果不合格,則繼續(xù)進(jìn)行。第二節(jié)循環(huán)語句第二節(jié)循環(huán)語句運(yùn)行代碼及結(jié)果如圖3.11所示。(a)運(yùn)行代碼(b)運(yùn)行結(jié)果圖3.3運(yùn)行代碼及結(jié)果do-while語句的語法格式如下:[初始化部分]do{循環(huán)體部分[迭代部分]}while(布爾表達(dá)式);//終止部分第二節(jié)循環(huán)語句二、do-while語句while和do-while唯一的區(qū)別就是do-while肯定會(huì)執(zhí)行一次。也就是說,至少會(huì)將其中的語句“過一遍”—即便表達(dá)式第一次計(jì)算為false。而在while循環(huán)語句中,若條件第一次就為false,那么不會(huì)執(zhí)行其中的語句。在實(shí)際應(yīng)用中,while比do-while更常用一些。第二節(jié)循環(huán)語句第二節(jié)循環(huán)語句【示例3.8】經(jīng)過幾天的學(xué)習(xí),老師布置給張浩一道測試題,讓他先上機(jī)編寫程序,然后老師檢查是否合格。如果不合格,則繼續(xù)編寫。運(yùn)行代碼如圖3.12所示。圖3.12運(yùn)行代碼for語句是循環(huán)語句中使用最為靈活、最為廣泛的一個(gè)。for語句在第一次反復(fù)之前要進(jìn)行初始化。隨后,它會(huì)進(jìn)行條件測試,而且在每一次反復(fù)的時(shí)候,進(jìn)行某種形式的“步進(jìn)”(Stepping)。for語句的語法格式如下:for([初始表達(dá)式];[布爾表達(dá)式];[步進(jìn)]){循環(huán)體部分}無論初始表達(dá)式、布爾表達(dá)式,還是步進(jìn),都可以置空。每次反復(fù)前,都要測試布爾表達(dá)式。若獲得的結(jié)果是false,就會(huì)繼續(xù)執(zhí)行緊跟在for后面的那行代碼。在每次循環(huán)的末尾,會(huì)計(jì)算一次步進(jìn)。第二節(jié)循環(huán)語句三、for語句說明:(1)?for語句執(zhí)行時(shí),首先執(zhí)行初始化操作,然后判斷終止條件是否滿足,如果滿足,則執(zhí)行循環(huán)體中的語句,最后執(zhí)行迭代部分。完成一次循環(huán)后,重新判斷終止條件。(2)初始化、終止以及迭代部分都可以為空語句(但分號(hào)不能省),三者均為空的時(shí)候,相當(dāng)于一個(gè)無限循環(huán)。(3)在初始化部分和迭代部分可以使用逗號(hào)語句來進(jìn)行多個(gè)操作。逗號(hào)語句是用逗號(hào)分隔的語句序列,如:for(i=0,j=10;i<j;i++,j--){…}第二節(jié)循環(huán)語句第二節(jié)循環(huán)語句【示例3.9】循環(huán)輸入某同學(xué)S1結(jié)業(yè)考試的5門課成績,并計(jì)算平均分。運(yùn)行代碼及結(jié)果如圖3.13所示。(a)運(yùn)行代碼第二節(jié)循環(huán)語句(b)運(yùn)行結(jié)果圖3.13運(yùn)行代碼及結(jié)果第二節(jié)循環(huán)語句使用for語句時(shí),常見的一些錯(cuò)誤如下:(1)變量未賦初值,如圖3.14所示的運(yùn)行代碼。圖3.14運(yùn)行代碼第二節(jié)循環(huán)語句(2)缺少循環(huán)條件,造成死循環(huán),如圖3.15所示的運(yùn)行代碼。圖3.15運(yùn)行代碼第二節(jié)循環(huán)語句(3)循環(huán)變量的值無變化,造成死循環(huán),如圖3.16所示的運(yùn)行代碼。圖3.16運(yùn)行代碼第二節(jié)循環(huán)語句(4)表達(dá)式全省略,造成死循環(huán),如圖3.17所示的運(yùn)行代碼及結(jié)果。(a)運(yùn)行代碼第二節(jié)循環(huán)語句(b)運(yùn)行結(jié)果圖3.17運(yùn)行代碼及結(jié)果綜上所述的循環(huán)語句有while、do-while、for。當(dāng)需要多次重復(fù)執(zhí)行一個(gè)或多個(gè)任務(wù)的問題時(shí)可考慮使用循環(huán)語句來解決。上述三種循環(huán)語句都有四個(gè)必不可少的部分:初始化部分、布爾表達(dá)式、循環(huán)體部分、迭代部分,具體區(qū)別如下:(1)語法格式不同,如圖3.18所示。第二節(jié)循環(huán)語句四、循環(huán)語句對(duì)比圖3.17運(yùn)行代碼及結(jié)果(2)執(zhí)行順序不同。while語句:先判斷,再執(zhí)行。do-while語句:先執(zhí)行,再判斷。for語句:先判斷,再執(zhí)行。(3)適用情況不同。循環(huán)次數(shù)確定的情況,通常選用for語句;循環(huán)次數(shù)不確定的情況,通常選用while和do-while語句。第二節(jié)循環(huán)語句第三節(jié)跳轉(zhuǎn)語句Java支持三種跳轉(zhuǎn)語句:break,continue和return。這些語句把控制轉(zhuǎn)移到程序的其他部分,下面對(duì)每一種語句進(jìn)行討論。第三節(jié)跳轉(zhuǎn)語句在switch語句中,break語句用來終止switch語句的執(zhí)行,使程序從switch語句后的第一條語句開始執(zhí)行。break語句的第二種使用情況就是跳出它所指定的塊,并從緊跟該塊的第一條語句處執(zhí)行。第三節(jié)跳轉(zhuǎn)語句一、break語句break語句的語法格式如下:break[標(biāo)號(hào)];break有兩種形式:不帶標(biāo)號(hào)和帶標(biāo)號(hào)。標(biāo)號(hào)必須位于break語句所在的封閉語句塊的開始處。第三節(jié)跳轉(zhuǎn)語句【示例3.10】循環(huán)錄入某學(xué)生5門課的成績并計(jì)算平均分。如果某分?jǐn)?shù)錄入為負(fù),則停止錄入并提示錄入錯(cuò)誤。思路:循環(huán)錄入成績,判斷錄入正確性:錄入錯(cuò)誤,使用break語句立刻跳出循環(huán);否則,累加求和。第三節(jié)跳轉(zhuǎn)語句運(yùn)行代碼如圖3.19所示。第三節(jié)跳轉(zhuǎn)語句圖3.19運(yùn)行代碼continue語句只用于循環(huán)結(jié)構(gòu)中。它的語法格式如下:continue[標(biāo)號(hào)];不帶標(biāo)號(hào)的continue語句的作用是終止當(dāng)前循環(huán)結(jié)構(gòu)的本次循環(huán),直接開始下一次循環(huán);帶標(biāo)號(hào)的continue語句的作用是把程序直接轉(zhuǎn)到標(biāo)號(hào)所指定的代碼段的下一次循環(huán)。第三節(jié)跳轉(zhuǎn)語句二、continue語句【示例3.11】循環(huán)錄入Java課的學(xué)生成績,統(tǒng)計(jì)分?jǐn)?shù)大于等于80分的學(xué)生比例。運(yùn)行代碼及結(jié)果如圖3.20所示。第三節(jié)跳轉(zhuǎn)語句(a)運(yùn)行代碼第三節(jié)跳轉(zhuǎn)語句(b)運(yùn)行結(jié)果圖3.20運(yùn)行代碼及結(jié)果return語句的作用是從當(dāng)前方法中退出,返回到調(diào)用該方法的語句處,并從緊跟該語句的下一條語句繼續(xù)執(zhí)行程序。返回語句有以下兩種格式:returnexpression;或return;第三節(jié)跳轉(zhuǎn)語句三、return語句掌握J(rèn)ava語言的基本語法成分及其語法結(jié)構(gòu)是進(jìn)行Java程序設(shè)計(jì)的前提條件。本章主要介紹標(biāo)識(shí)符、數(shù)據(jù)類型、運(yùn)算符、表達(dá)式、Java編碼規(guī)范和格式等內(nèi)容。第六章異常處理一、異常和異常處理二、異常處理語句三、創(chuàng)建用戶自定義異常類第一節(jié)異常和異常處理異常是程序運(yùn)行過程中由于硬件設(shè)備問題或者軟件設(shè)計(jì)缺陷而產(chǎn)生的不正常情況,如文件找不到、網(wǎng)絡(luò)連接失敗、非法參數(shù)等。異常是一個(gè)事件,它發(fā)生在程序運(yùn)行期間,干擾了正常的指令流程。它主要幫助我們?cè)赿ebug的過程中解決下面三個(gè)問題。什么出錯(cuò)?哪里出錯(cuò)?為什么出錯(cuò)?第一節(jié)異常和異常處理異常和異常處理一、異常但是,并不是所有的錯(cuò)誤都是異常,錯(cuò)誤有時(shí)候是可以避免的。比如,代碼少了一個(gè)分號(hào),那么運(yùn)行結(jié)果會(huì)提示java.lang.Error,表示出錯(cuò);如果使用System.out.println(11/0)語句,那么因?yàn)橛?做了除數(shù),系統(tǒng)會(huì)拋出java.lang.ArithmeticException的異常。有些異常需要作處理,有些則不需要。第一節(jié)異常和異常處理異常處理是程序設(shè)計(jì)中一個(gè)非常重要的方面,也是程序設(shè)計(jì)的一大難點(diǎn)。從學(xué)習(xí)編程開始,我們會(huì)有意或無意地使用if-else來控制異常,然而這種控制非常繁瑣,如果多個(gè)地方出現(xiàn)同一個(gè)異常或者錯(cuò)誤,那么每個(gè)地方都要作相同處理,感覺相當(dāng)麻煩,因此很多編程語言設(shè)計(jì)了異常處理機(jī)制。第一節(jié)異常和異常處理二、異常處理機(jī)制異常處理機(jī)制是指當(dāng)異常產(chǎn)生時(shí),為了讓程序不中斷而繼續(xù)運(yùn)行的機(jī)制。每種語言對(duì)于異常的處理可能會(huì)不一樣,在Java中,異常處理機(jī)制包括Error和Exception兩個(gè)部分。它們都繼承自一個(gè)共同的基類Throwable。第一節(jié)異常和異常處理Error屬于JVM運(yùn)行中發(fā)生的一些錯(cuò)誤,雖然并不屬于開發(fā)人員的范疇,但是有些Error還是由代碼引起的。比如,StackOverflowError經(jīng)常由遞歸操作引起,這種錯(cuò)誤一般無法挽救,只能依靠JVM。而Exception假設(shè)程序員會(huì)處理這些異常,比如數(shù)據(jù)庫連接出了異常,那么我們可以處理這個(gè)異常,并且重新連接等。Exception分為兩種,即檢查類型(Checked)和非檢查類型(Unchecked)。檢查類型的異常是指程序員明確地聲明或者用try-catch語句來處理的異常,而非檢查類型的異常則沒有這些限制。第一節(jié)異常和異常處理Java中的異常用對(duì)象來表示。Java對(duì)異常的處理是按異常分類進(jìn)行的,不同異常有不同的分類,每種異常都對(duì)應(yīng)一個(gè)類型(Class),每個(gè)異常都對(duì)應(yīng)一個(gè)異常(類的)對(duì)象。異常類的來源有兩個(gè):一是Java語言本身定義的一些基本異常類型,二是用戶通過繼承Exception類或者其子類自己定義的異常。Exception類及其子類是Throwable的一種形式,它指出了合理的應(yīng)用程序想要捕獲的條件。第一節(jié)異常和異常處理三、Java中異常類和異常對(duì)象異常對(duì)象的來源有兩個(gè):一是Java運(yùn)行時(shí)環(huán)境自動(dòng)拋出系統(tǒng)生成的異常,而不管程序員是否愿意捕獲和處理,它總要被拋出,比如除數(shù)為0的異常;二是程序員自己拋出的異常,這個(gè)異??梢允浅绦騿T自己定義的,也可以是Java語言中定義的,用throw關(guān)鍵字拋出異常,該異常用來向調(diào)用者匯報(bào)異常的一些信息。第一節(jié)異常和異常處理三、Java中異常類和異常對(duì)象Java異常類層次結(jié)構(gòu)如圖6.1所示。第一節(jié)異常和異常處理Throwable類是Java語言中所有錯(cuò)誤或異常的超類。只有當(dāng)對(duì)象是此類(或其子類之一)的實(shí)例時(shí),才能通過Java虛擬機(jī)或者Javathrow語句拋出。類似,只有此類(或其子類之一)才可以是catch子句中的參數(shù)類型。兩個(gè)子類的實(shí)例,Error和Exception通常用于指出發(fā)生了異常情況。這些實(shí)例一般是在異常情況的上下文中新近創(chuàng)建的,因此包含了相關(guān)的信息(比如堆棧跟蹤數(shù)據(jù))。第一節(jié)異常和異常處理1.ThrowableException類及其子類是Throwable的一種形式,它指出了合理的應(yīng)用程序想要捕獲的條件,表示程序本身可以處理的異常。第一節(jié)異常和異常處理2.ExceptionError是Throwable的子類,表示僅靠程序本身無法恢復(fù)的嚴(yán)重錯(cuò)誤,用于指出合理的應(yīng)用程序不應(yīng)該試圖捕獲的嚴(yán)重問題。在執(zhí)行該方法期間,無需在方法中通過throws聲明可能拋出但沒有捕獲的Error的任何子類,因?yàn)镴ava編譯器不去檢查它。也就是說,當(dāng)程序中可能出現(xiàn)這類異常時(shí),即使沒有用try-catch語句捕獲它,也沒有用throws子句聲明拋出它,編譯也能通過。第一節(jié)異常和異常處理3.ErrorRuntimeException是那些可能在Java虛擬機(jī)正常運(yùn)行期間拋出的異常的超類。Java編譯器不去檢查它。也就是說,當(dāng)程序中可能出現(xiàn)這類異常時(shí),即使沒有用try-catch語句捕獲它,也沒有用throws子句聲明拋出它,編譯也能通過。這種異??梢酝ㄟ^改進(jìn)代碼實(shí)現(xiàn)來避免。以上是對(duì)有關(guān)異常API的一個(gè)簡單介紹,用法都很簡單,關(guān)鍵在于了解異常處理的原理,具體用法參看JavaAPI文檔。第一節(jié)異常和異常處理4.RuntimeException在Java應(yīng)用程序中,異常處理機(jī)制分為拋出異常和捕捉異常。拋出異常:當(dāng)一個(gè)方法出現(xiàn)錯(cuò)誤引發(fā)異常時(shí),方法創(chuàng)建異常對(duì)象并交付運(yùn)行時(shí)系統(tǒng),異常對(duì)象中包含了異常類型和異常出現(xiàn)時(shí)的程序狀態(tài)等異常信息。運(yùn)行時(shí)系統(tǒng)負(fù)責(zé)尋找處置異常的代碼并執(zhí)行。第一節(jié)異常和異常處理四、異常捕獲與處理捕獲異常:在方法拋出異常之后,運(yùn)行時(shí)系統(tǒng)將轉(zhuǎn)為尋找合適的異常處理器(ExceptionHandler)。潛在的異常處理器是異常發(fā)生時(shí)依次存留在調(diào)用棧中的方法的集合。當(dāng)異常處理器所能處理的異常類型與方法拋出的異常類型相符時(shí),即為合適的異常處理器。運(yùn)行時(shí)系統(tǒng)從發(fā)生異常的方法開始,依次回查調(diào)用棧中的方法,直至找到含有合適異常處理器的方法并執(zhí)行。當(dāng)運(yùn)行時(shí)系統(tǒng)遍歷調(diào)用棧而未找到合適的異常處理器時(shí),運(yùn)行時(shí)系統(tǒng)終止。同時(shí),意味著Java程序的終止。第一節(jié)異常和異常處理Java的異常處理是通過5個(gè)關(guān)鍵字來實(shí)現(xiàn)的:try、catch、throw、throws和finally。其處理過程如圖6.2所示。第一節(jié)異常和異常處理1.異常處理的關(guān)鍵字try語句塊中是要執(zhí)行的代碼,如果這段代碼出現(xiàn)了異常,系統(tǒng)將會(huì)自動(dòng)拋出(throws)一個(gè)異常,而catch后面有對(duì)應(yīng)的異常,程序?qū)⑦M(jìn)入對(duì)應(yīng)的catch語句塊;最后,不管是否有異常,程序?qū)⑦M(jìn)入finally語句塊進(jìn)行缺省處理。第一節(jié)異常和異常處理異常處理程序的基本形式如下:try{ //代碼塊}catch(ExceptionType1e){ //處理ExceptionType1類型的異常}catch(ExceptionType2e){第一節(jié)異常和異常處理
//處理ExceptionType2類型的異常
throw(e);//再拋出ExceptionType2類型的異常}finally{ //缺省處理代碼}注意:catch語句塊可以存在多個(gè),因?yàn)樵诔绦蜻\(yùn)行的過程中,可能會(huì)發(fā)生多種異常,我們需要多個(gè)catch以提高程序的適應(yīng)性。第一節(jié)異常和異常處理異常類(Exception)的子類很多,大致分為有關(guān)I/O的IOException、有關(guān)運(yùn)行時(shí)異常的RuntimeException和其他異常三類。(1)?IOException:由于I/O系統(tǒng)堵塞等原因引起的異常,包括試圖從文件結(jié)尾處讀取信息、試圖打開一個(gè)不存在或者格式錯(cuò)誤的URL。第一節(jié)異常和異常處理2.異常的類型常見的IOException如下:
FileNotFoundException:文件未找到異常。
EOFException:讀寫文件尾異常。
MalformedURLException:URL格式錯(cuò)誤異常。
SocketException:Socket異常。第一節(jié)異常和異常處理(2)?RuntimeException:由于程序編寫過程中考慮不周全而引起的異常,包括錯(cuò)誤的類型轉(zhuǎn)換、數(shù)組越界訪問、數(shù)字計(jì)算錯(cuò)誤、試圖訪問一個(gè)空對(duì)象等。常見的RuntimeException如下:
ArithmeticException:數(shù)學(xué)計(jì)算異常。
NullPointerException:空指針異常。
NegativeArraySizeException:負(fù)數(shù)組長度異常。
ArrayOutOfBoundsException:數(shù)組索引越界異常。
ClassNotFoundException:類文件未找到異常。
ClassCastException:造型異常。第一節(jié)異常和異常處理(3)其他異常:包括用Class.forName()來初始化一個(gè)類,字符串參數(shù)或?qū)?yīng)的類不存在等。常見的其他異常如下:
ClassCastException:類型轉(zhuǎn)換異常。
ArrayStoreException:數(shù)組中包含不兼容的值拋出的異常。
SQLException:操作數(shù)據(jù)庫異常。
NoSuchFieldException:字段未找到異常。
NoSuchMethodException:方法未找到拋出的異常。
NumberFormatException:字符串轉(zhuǎn)換為數(shù)字拋出的異常。
StringIndexOutOfBoundsException:字符串索引超出范圍拋出的異常。
IllegalAccessException:不允許訪問某類異常。
InstantiationException:當(dāng)應(yīng)用程序試圖使用Class類中的newInstance()方法創(chuàng)建一個(gè)類的實(shí)例,而指定的類對(duì)象無法被實(shí)例化時(shí),則拋出該異常。第一節(jié)異常和異常處理一,try語句不能單獨(dú)存在,可以和catch、finally組成try-catch-finally、try-catch-try、finally三種結(jié)構(gòu);catch語句可以有一個(gè)或多個(gè);finally語句最多一個(gè);try、catch、finally這三個(gè)關(guān)鍵字均不能單獨(dú)使用。第二,try、catch、finally三個(gè)代碼塊中變量的作用域分別獨(dú)立且不能相互訪問。如果要在三個(gè)塊中都可以訪問,則需要將變量定義到這些塊的外面。第一節(jié)異常和異常處理3.異常處理的語法規(guī)則第三,存在多個(gè)catch塊時(shí),Java虛擬機(jī)會(huì)匹配其中一個(gè)異常類或其子類,來執(zhí)行這個(gè)catch塊,而不會(huì)再執(zhí)行別的catch塊。第四,throw語句后不允許緊跟其他語句,因?yàn)檫@些語句沒有機(jī)會(huì)執(zhí)行。第五,如果一個(gè)方法調(diào)用了另外一個(gè)聲明拋出異常的方法,那么這個(gè)方法要么處理異常,要么聲明拋出。第一節(jié)異常和異常處理首先,看這樣一個(gè)程序:publicclassExceptionTest{publicstaticvoidmain(Stringargs[]){inta=12,b=0;
intd;
d=a/b;
System.out.println(a+"/"+b+"="+d);
}}第一節(jié)異常和異常處理五、一個(gè)異常處理的實(shí)例這個(gè)程序中,b變量的值是0,但是它卻是除數(shù),所以這個(gè)程序不能運(yùn)行。此時(shí),將異常處理加入該程序,修改后的程序如下:publicclassExceptionTest{publicstaticvoidmain(Stringargs[]){try{inta=12,b=0;
intd;
d=a/b;
System.out.println(a+"/"+b+"="+d);
}第一節(jié)異常和異常處理catch(arithmeticexceptione){system.out.println("零不能做除數(shù)哦!");
}}}當(dāng)有異常處理的時(shí)候,程序發(fā)生了除零異常,這將會(huì)被catch(arithmeticexceptione)捕捉到,從而輸出提示語句“零不能做除數(shù)哦!”。這樣,程序適應(yīng)性更強(qiáng)了,也更友好了。第一節(jié)異常和異常處理第二節(jié)Java語言概述第二節(jié)異常處理語句在Java中,異常一般通過try-catch語句來捕獲。其語法格式如下:try{//可能會(huì)發(fā)生異常的程序代碼}catch(Type1id1){
//捕獲并處置try拋出的異常類型Type1}catch(Type2id2){//捕獲并處置try拋出的異常類型Type2}第二節(jié)異常處理語句一、try-catch語句關(guān)鍵字try后的一對(duì)大括號(hào)將一塊可能發(fā)生異常的代碼包起來,稱為監(jiān)控區(qū)域。Java方法在運(yùn)行過程中出現(xiàn)異常,則創(chuàng)建異常對(duì)象。將異常拋出監(jiān)控區(qū)域之外,由Java運(yùn)行時(shí)系統(tǒng)試圖尋找匹配的catch子句以捕獲異常。若有匹配的catch子句,則運(yùn)行其異常處理代碼,try-catch語句結(jié)束。匹配的原則:如果拋出的異常對(duì)象屬于catch子句的異常類,或者屬于該異常類的子類,則認(rèn)為生成的異常對(duì)象與catch塊捕獲的異常類型相匹配。第二節(jié)異常處理語句【示例6.1】捕捉throw語句拋出的“除數(shù)為0”的異常。publicclassTestException{publicstaticvoidmain(String[]args){inta=6;
intb=0;
try{//try監(jiān)控區(qū)域第二節(jié)異常處理語句if(b==0)thrownewArithmeticException();//通過throw語句拋出異常
System.out.println("a/b的值是:"+a/b);
}catch(ArithmeticExceptione){//catch捕捉異常
System.out.println("程序出現(xiàn)異常,變量b不能為0。");
}System.out.println("程序正常結(jié)束。");
}}運(yùn)行結(jié)果:程序出現(xiàn)異常,變量b不能為0。程序正常結(jié)束。第二節(jié)異常處理語句本示例中,在try監(jiān)控區(qū)域通過if語句進(jìn)行判斷,當(dāng)“除數(shù)為0”的錯(cuò)誤條件成立時(shí)引發(fā)ArithmeticException異常,創(chuàng)建ArithmeticException異常對(duì)象,并由throw語句將異常拋給Java運(yùn)行時(shí)系統(tǒng),由系統(tǒng)尋找匹配的異常處理器catch并運(yùn)行相應(yīng)異常處理代碼,打印輸出“程序出現(xiàn)異常,變量b不能為0。”try-catch語句結(jié)束,繼續(xù)程序流程。事實(shí)上,“除數(shù)為0”等于ArithmeticException,是RuntimException的子類。而運(yùn)行時(shí)異常將由運(yùn)行時(shí)系統(tǒng)自動(dòng)拋出,不需要使用throw語句。第二節(jié)異常處理語句在Java中,異常一般通過try-catch語句來捕獲。其語法格式如下:try{//可能會(huì)發(fā)生異常的程序代碼}catch(Type1id1){
//捕獲并處置try拋出的異常類型Type1}catch(Type2id2){//捕獲并處置try拋出的異常類型Type2}第二節(jié)異常處理語句二、try-catch-finally語句{//無論是否發(fā)生異常,都將執(zhí)行的語句塊}try塊:用于捕獲異常。其后可接零個(gè)或多個(gè)catch塊。如果沒有catch塊,則必須跟一個(gè)finally塊。catch塊:用于處理try捕獲到的異常。finally塊:無論是否捕獲或處理異常,finally塊里的語句都會(huì)被執(zhí)行。第二節(jié)異常處理語句三個(gè)語句塊的執(zhí)行順序如下:(1)?try沒有捕獲到異常的情況:try語句塊中的語句逐一被執(zhí)行,程序?qū)⑻^catch語句塊,執(zhí)行finally語句塊和其后的語句。(2)?try捕獲到異常,但catch語句塊里沒有處理此異常的情況:當(dāng)try語句塊里的某條語句出現(xiàn)異常,卻沒有處理此異常的catch語句塊時(shí),此異常將會(huì)拋給JVM處理,finally語句塊里的語句還是會(huì)被執(zhí)行,但finally語句塊后的語句不會(huì)被執(zhí)行。第二節(jié)異常處理語句(3)?try捕獲到異常,且catch語句塊里有處理此異常的情況:在try語句塊中是按照順序來執(zhí)行的,當(dāng)執(zhí)行到某一條語句出現(xiàn)異常時(shí),程序?qū)⑻?/p>
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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年上半年云南輕紡職業(yè)學(xué)院招聘24人筆試歷年參考題庫附帶答案詳解
- N-N-Dimethyl-L-valine-L-N-N-Dimethylvaline-生命科學(xué)試劑-MCE
- 管道安裝維修合同范本
- 2-Amino-1-phenylbutane-hydrochloride-生命科學(xué)試劑-MCE
- 社區(qū)健康教育與醫(yī)養(yǎng)結(jié)合服務(wù)的融合發(fā)展
- 二零二五年度人合伙服裝店加盟連鎖經(jīng)營合同
- 2025年度綠色建筑房產(chǎn)抵押合同范本
- 二零二五年度意外事故損害私下解決協(xié)議
- 《ZARA服裝品牌策劃》課件
- 員工賠償金保密協(xié)議書(2篇)
- GB/T 44828-2024葡萄糖氧化酶活性檢測方法
- 青海省西寧市2023-2024學(xué)年高一上學(xué)期物理期末試卷(含答案)
- GB/T 44865-2024物聯(lián)網(wǎng)基于物聯(lián)網(wǎng)和傳感網(wǎng)技術(shù)的動(dòng)產(chǎn)監(jiān)管集成平臺(tái)系統(tǒng)要求
- 高中生物課程標(biāo)準(zhǔn)(人教版)
- 青霉素類抗菌藥物課件
- 第三章-自然語言的處理(共152張課件)
- 中學(xué)教學(xué)課件:下第課《認(rèn)識(shí)人工智能》課件
- 2023版初中語文新課程標(biāo)準(zhǔn)
評(píng)論
0/150
提交評(píng)論