《Google Android開(kāi)發(fā)技術(shù)》課件第2章_第1頁(yè)
《Google Android開(kāi)發(fā)技術(shù)》課件第2章_第2頁(yè)
《Google Android開(kāi)發(fā)技術(shù)》課件第2章_第3頁(yè)
《Google Android開(kāi)發(fā)技術(shù)》課件第2章_第4頁(yè)
《Google Android開(kāi)發(fā)技術(shù)》課件第2章_第5頁(yè)
已閱讀5頁(yè),還剩135頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

第2章Java語(yǔ)言2.1Java程序語(yǔ)法與控制

2.2Java基本數(shù)據(jù)類(lèi)型

2.3Java類(lèi)

2.4Java文件操作

2.5在命令行窗口中運(yùn)行Java程序2.6Java圖形界面2.7小結(jié)

2.1Java程序語(yǔ)法與控制

Java程序文件的擴(kuò)展名為?.java,每個(gè)程序文件中只能包含一個(gè)public類(lèi),即公有類(lèi),public是可見(jiàn)性修飾符,用public定義的類(lèi)、方法(或稱函數(shù))或數(shù)據(jù)域(或稱變量)可以被任何類(lèi)訪問(wèn)。Java程序的入口點(diǎn)是main方法,定義在公有類(lèi)中,main方法的原型為

publicstaticvoidmain(String[]args){}

與其他高級(jí)語(yǔ)言程序設(shè)計(jì)相同,Java語(yǔ)言程序具有三種基本的程序控制方式,即順序、分支(或選擇)和循環(huán)執(zhí)行方式,在main方法中可使用三種程序控制方式進(jìn)行程序設(shè)計(jì)。2.1.1順序方式

順序方式是指Java語(yǔ)句按照先后順序依次執(zhí)行并得到計(jì)算結(jié)果的程序執(zhí)行方式,這是Java語(yǔ)言的總體執(zhí)行方式(由于類(lèi)只是數(shù)據(jù)結(jié)構(gòu),因此類(lèi)中定義成員數(shù)據(jù)和方法時(shí)不分先后,成員方法中的變量必須先定義后使用)。下面的例2.1為輸入一個(gè)攝氏溫度值,將其轉(zhuǎn)化為華氏溫度值。通過(guò)該例詳細(xì)介紹借助Eclipse編寫(xiě)Java程序的步驟,本章中所有實(shí)例的創(chuàng)建步驟也都與此類(lèi)似,因此后面實(shí)例的創(chuàng)建步驟就省略了。

例2.1

攝氏溫度值轉(zhuǎn)化為華氏溫度值。

攝氏溫度值轉(zhuǎn)化為華氏溫度值的關(guān)系式為

Fah=1.8×Cel+32

上式中,F(xiàn)ah表示華氏溫度,Cel表示攝氏溫度。下面分步驟介紹該實(shí)例的實(shí)現(xiàn)方法。

S1.創(chuàng)建工程ex02_01

在Eclipse軟件主界面(見(jiàn)圖1-7)中,選擇菜單項(xiàng)“File|New|JavaProject”,彈出如圖2-1所示界面。在圖2-1中輸入工程名為“ex02_01”,保存在目錄“D:\myWorkspace\ex02_01”下,然后直接點(diǎn)擊“Finish”按鈕完成創(chuàng)建工程向?qū)?,如圖2-2所示。在圖2-2中,顯示了空的工程ex02_01,其中包含一個(gè)“src”標(biāo)簽,該標(biāo)簽下存放Java源程序文件,此外,還包含了JRESystemLibrary,即Java程序運(yùn)行環(huán)境庫(kù)。在圖2-2界面中,點(diǎn)擊菜單項(xiàng)“File|New|Class”即可添加新類(lèi),進(jìn)入圖2-3所示界面。圖2-1新建Java工程界面圖2-2空的工程ex02_01圖2-3創(chuàng)建新Java類(lèi)在圖2-3中輸入包名為“cn.jxufe.zhangyong”,包(Package)的名稱要求具有全球唯一性。包是類(lèi)的容器,允許不同包中存在相同名稱的類(lèi)。包類(lèi)似于C#語(yǔ)言中的命名空間,在引入了包的概念后,不同的程序員在命名類(lèi)名時(shí)可以更加隨意且不會(huì)導(dǎo)致類(lèi)名沖突。這里的包名“cn.jxufe.zhangyong”表示“中國(guó).江西財(cái)經(jīng)大學(xué).張勇”,包名一般從大地名至小地名依次書(shū)寫(xiě),名稱間用“點(diǎn)號(hào)”分開(kāi),以這種命名規(guī)范命名的包可有效地防止同名包的出現(xiàn),本章中的所有實(shí)例均使用包名“cn.jxufe.zhangyong”,因此必需保證這個(gè)包里面沒(méi)有同名的類(lèi)出現(xiàn)。然后,輸入類(lèi)名為“MyEx0201”,類(lèi)的命名習(xí)慣要求首字母大寫(xiě)。接著,點(diǎn)擊“Finish”按鈕完成創(chuàng)建Java類(lèi)向?qū)ВM(jìn)入圖2-4所示界面。圖2-4“Helloworld!”程序代碼

S2.控制臺(tái)顯示“Helloworld!”

在圖2-4中輸入Java程序代碼如下:

1packagecn.jxufe.zhangyong;

2

3publicclassMyEx0201{

4 publicstaticvoidmain(String[]args){

5 System.out.println("Helloworld!");

6 }

7}

S3.攝氏溫度轉(zhuǎn)換為華氏溫度的示例程序

圖2-4是一個(gè)完整的程序,輸出“Helloworld!”信息,為了實(shí)現(xiàn)攝氏溫度轉(zhuǎn)換為華氏溫度的功能,改寫(xiě)程序文件MyEx0201.java的代碼如下:

1packagecn.jxufe.zhangyong;

2

3publicclassMyEx0201{

4 publicstaticvoidmain(String[]args){

5 doubleCel=36.5;

6 doubleFah;

7 Fah=1.8*Cel+32.0;

8 System.out.println(Cel+"deg.C="

9 +Fah+"deg.F.");

10 }

11}

上述代碼中,第5行定義雙精度浮點(diǎn)數(shù)變量Cel并初始化為36.5,第6行定義雙精度浮點(diǎn)數(shù)變量Fah,第7行根據(jù)公式計(jì)算新的Fah的值,第8、9行調(diào)用方法System.out.println在控制臺(tái)輸出信息“36.5deg.C=97.7deg.F.”,如圖2-5所示。

圖2-5所示工程是一個(gè)簡(jiǎn)單的Java順序執(zhí)行程序示例,第5~9行的語(yǔ)句按先后順序依次執(zhí)行,程序的順序執(zhí)行方式是最基本的程序控制方式。圖2-5溫度轉(zhuǎn)換程序及輸出結(jié)果2.1.2分支方式

分支方式是根據(jù)條件關(guān)系式的邏輯值進(jìn)行判斷,有條件地執(zhí)行某些語(yǔ)句組。有兩種條件語(yǔ)句,即if-else語(yǔ)句和switch語(yǔ)句,其基本語(yǔ)法分別為:

if(布爾表達(dá)式){

布爾表達(dá)式為真時(shí)執(zhí)行的語(yǔ)句組;

}

else{

布爾表達(dá)式為假時(shí)執(zhí)行的語(yǔ)句組;

}

和當(dāng)表達(dá)式的值不等于上述的“值1”、“值2”、…、“值N”時(shí)執(zhí)行的語(yǔ)句組;

}

if語(yǔ)句和switch語(yǔ)句均可以嵌套,下面的例2.2和例2.3分別介紹了這兩種條件語(yǔ)句的使用方法。

例2.2

求解一元二次方程的根。

已知一元二次方程ax2?+?bx?+?c?=?0,任意輸入三個(gè)系數(shù)a、b和c,計(jì)算未知數(shù)x的值。新建工程ex02_02,在工程ex02_02中新建類(lèi)MyEx0202(對(duì)應(yīng)的文件名為MyEx0202.java,即類(lèi)名與文件名相同,所在的包為cn.jxufe.zhangyong)。MyEx0202.java文件的程序代碼如下所示:在C語(yǔ)言中使用庫(kù)函數(shù)時(shí)需要借助于include關(guān)鍵字,在C#中使用use關(guān)鍵字。在Java程序中,如果需要調(diào)用其他包中的類(lèi)所包含的公有方法和數(shù)據(jù)時(shí),必需借助于import關(guān)鍵字導(dǎo)入這些包和類(lèi),如上述程序段中的第3~5行。第3~4行為第20~21行的方法服務(wù),第5行為第12行的方法服務(wù)。導(dǎo)入一個(gè)包(和包中的某個(gè)類(lèi))非常方便,例如,在程序中書(shū)寫(xiě)了“Scannerscanner=newScanner(System.in);”語(yǔ)句后,會(huì)自動(dòng)提示程序員導(dǎo)入java.util.Scanner,只需要在提示的右鍵彈出菜單中點(diǎn)一下就會(huì)在第5行添加“importjava.util.Scanner;”語(yǔ)句。因此,所有的import語(yǔ)句都是用這種方法創(chuàng)建的,不需要程序員書(shū)寫(xiě),比起C語(yǔ)言的“#include”包括頭文件語(yǔ)句更加方便。上述程序段的main方法代碼為第9~34行。第9行定義三個(gè)double型變量a、b和c;第10行定義了一個(gè)具有兩個(gè)元素的double型數(shù)組x,必須記住Java這種定義數(shù)組的方法,使用new關(guān)鍵字為元素個(gè)數(shù)開(kāi)辟空間;第11行在控制臺(tái)輸出提示信息“Input3coefficients:”;第12行用類(lèi)Scanner創(chuàng)建一個(gè)scanner對(duì)象,同時(shí)用類(lèi)Scanner的構(gòu)造方法對(duì)它進(jìn)行初始化(在第2.3節(jié)中將詳細(xì)介紹構(gòu)造方法);第13~15行調(diào)用scanner對(duì)象的方法nextDouble從控制臺(tái)讀入雙精度浮點(diǎn)數(shù),并分別賦給變量a、b和c;第16行判斷a的絕對(duì)值是否小于0.00000001,即判斷a是否為0。如果表達(dá)式Math.abs(a)<1e-8為真,則認(rèn)為a?=?0,于是第17行輸出“Notaquadraticequation!”,說(shuō)明不是一元二次方程;否則,程序執(zhí)行第19~34行代碼。第20~21行用類(lèi)DecimalFormat創(chuàng)建一個(gè)對(duì)象df;第21行調(diào)用對(duì)象df的方法setMaximumFractionDigits設(shè)置小數(shù)顯示時(shí)保留2位小數(shù),即當(dāng)調(diào)用對(duì)象df的方法format時(shí),將方法format的輸入?yún)?shù)設(shè)置為只顯示2位小數(shù)(見(jiàn)第25行)。第22行判斷b*b>=4*a*c是否為真,如果為真,則方程的兩個(gè)根x[0]和x[1]均為實(shí)數(shù)(數(shù)組的下標(biāo)從0開(kāi)始索引);第23~24行計(jì)算兩個(gè)根的值;第25~26行在控制臺(tái)輸出兩個(gè)根的值,為使輸出的根只保留兩位小數(shù),使用方法df.format格式化輸出。如果b*b>=4*a*c為假,則執(zhí)行第29~32行代碼,此時(shí)兩個(gè)根為復(fù)數(shù),用x[0]存放根的實(shí)部,x[1]存放根的一個(gè)虛部,第31~32行在控制臺(tái)輸出這兩個(gè)復(fù)根。圖2-6和圖2-7給出了例2.2的兩次執(zhí)行結(jié)果,說(shuō)明程序工作正常。其中使用if-else語(yǔ)句的兩級(jí)嵌套實(shí)現(xiàn)了一元二次方程的求根運(yùn)算。圖2-6實(shí)例2.2運(yùn)行結(jié)果:a?=?2、b?=?5和c?=-4圖2-7實(shí)例2.2運(yùn)行結(jié)果:a?=?3、b?=?7和c?=?6

例2.3

人民幣兌換外幣計(jì)算。

假設(shè)已知英鎊(pound)、港幣(HKD)、美元(dollar)、日元(yen)、歐元(euro)和新加坡元(SGD)對(duì)人民幣的匯率分別為10.62、0.84、6.53、0.078、9.42和5.22,輸入人民幣可計(jì)算得到其兌換的外幣值。新建工程ex02_03,在工程ex02_03中新建類(lèi)MyEx0203(對(duì)應(yīng)的文件名為MyEx0203.java,所在的包名為cn.jxufe.zhangyong)。MyEx0203.java文件的程序代碼如下所示:圖2-8和圖2-9給出了例2.3的兩次執(zhí)行結(jié)果,分別是將1000元人民幣兌換成153.14美元和將2000元人民幣兌換為383.14新加坡元,這說(shuō)明程序運(yùn)行正常。例2.3說(shuō)明了switch語(yǔ)句的用法,從例2.3可以體會(huì)到,switch語(yǔ)句實(shí)現(xiàn)的程序控制,if-else語(yǔ)句也能實(shí)現(xiàn)。圖2-8例2.3程序運(yùn)行結(jié)果(1000元兌換美元)圖2-9例2.3程序運(yùn)行結(jié)果(2000元兌換新加坡元)2.1.3循環(huán)方式

Java語(yǔ)言提供了三種循環(huán)控制語(yǔ)句,即while型、do-while型和for型循環(huán),這三種循環(huán)控制語(yǔ)句與C語(yǔ)言的語(yǔ)法相同,其基本語(yǔ)法如下:

while(條件表達(dá)式){

條件表達(dá)式為真時(shí)執(zhí)行的語(yǔ)句組(即循環(huán)體);

}

Do{

循環(huán)體(先執(zhí)行一次后判斷條件表達(dá)式的值,如果為真則再次執(zhí)行循環(huán)體;與while型的區(qū)別在于當(dāng)條件表達(dá)式為假時(shí),循環(huán)體可被執(zhí)行一次);圖2-10為例2.4的執(zhí)行結(jié)果。圖2-10例2.4程序運(yùn)行結(jié)果

例2.5

計(jì)算九九乘法表。

例2.5使用for型循環(huán)方式計(jì)算九九乘法表。新建工程ex02_05,在工程ex02_05中新建類(lèi)MyEx0205(對(duì)應(yīng)文件名為MyEx0205.java,所在的包為cn.jxufe.zhangyong)。MyEx0205.java文件的程序代碼如下所示:上述代碼的輸出結(jié)果如圖2-11所示。第5~10行嵌套了兩個(gè)for型循環(huán),外層的for型循環(huán)中i從1步進(jìn)到9,步長(zhǎng)為1,表示圖2-11中的第1至9行;第6~8行的for型循環(huán)從1步進(jìn)到i,步長(zhǎng)為1,表示圖2-11中的第1至i列。九九乘法表中第i行第j列的乘法算式為計(jì)算i和j的乘積,如圖2-11所示。若i等于6,j等于5,即第6行第5列的式子為“6*5=30”,于是循環(huán)執(zhí)行第7行輸出九九乘法表中的每個(gè)乘法式子。第9行表示每輸出一行后添加一個(gè)回車(chē)換行。圖2-11例2.5計(jì)算的九九乘法表2.1.4異常處理

異常處理也是一種程序控制方式。當(dāng)程序運(yùn)行過(guò)程中產(chǎn)生了錯(cuò)誤(例如,數(shù)值溢出、輸入無(wú)效、數(shù)組越界等),即所謂的運(yùn)行錯(cuò)誤,往往會(huì)導(dǎo)致整個(gè)程序運(yùn)行突然中斷或退出,而程序員無(wú)法知道程序退出的原因。異常處理的作用在于當(dāng)程序運(yùn)行發(fā)生錯(cuò)誤時(shí),捕捉運(yùn)行錯(cuò)誤類(lèi)型(稱為異常),并能保證程序仍然正常執(zhí)行。Java異常處理的功能十分強(qiáng)大,其基本用法為:當(dāng)try“被監(jiān)視的語(yǔ)句組”中的某條語(yǔ)句發(fā)生異常時(shí),其后的程序不再執(zhí)行,而是跳到catch語(yǔ)句處,依次判斷各個(gè)catch的異常類(lèi)型是否與發(fā)生的異常相匹配,如果匹配,則將發(fā)生的異常(對(duì)象)賦給catch語(yǔ)句,執(zhí)行該catch塊中的語(yǔ)句。無(wú)論異常是否發(fā)生,都要執(zhí)行finally語(yǔ)句塊中的全部語(yǔ)句,這部分語(yǔ)句一般用作內(nèi)存釋放和關(guān)閉已打開(kāi)的文件對(duì)象等。

例2.6

整數(shù)除法(除以0)和輸入類(lèi)型不匹配異常。

從控制臺(tái)輸入兩個(gè)整數(shù),計(jì)算它們的商。新建工程ex02_06,在工程ex02_06中新建類(lèi)MyEx0206(對(duì)應(yīng)文件名為MyEx0206.java,所在的包為cn.jxufe.zhangyong)。MyEx0206.java文件的程序代碼如下所示:圖2-12~圖2-14顯示了例2.6的運(yùn)行結(jié)果,圖2-12為正常運(yùn)行,圖2-13因?yàn)檩斎氤霈F(xiàn)了浮點(diǎn)數(shù)12.2而發(fā)生輸入類(lèi)型不匹配異常,圖2-14因輸入除數(shù)為0而發(fā)生除以0異常。圖2-12例2.6運(yùn)行結(jié)果(無(wú)異常)圖2-13例2.6的運(yùn)行結(jié)果(輸入類(lèi)型不匹配異常)圖2-14例2.6的運(yùn)行結(jié)果(除以0異常) 2.2Java基本數(shù)據(jù)類(lèi)型

2.2.1數(shù)值

數(shù)值類(lèi)型包括整數(shù)類(lèi)型和浮點(diǎn)數(shù)類(lèi)型,整數(shù)類(lèi)型包括四類(lèi),即字節(jié)byte、短整型short、整型int和長(zhǎng)整型long,依次占有存儲(chǔ)字節(jié)數(shù)為1、2、4和8;浮點(diǎn)數(shù)類(lèi)型包括兩類(lèi)即單精度浮點(diǎn)數(shù)型float和雙精度浮點(diǎn)數(shù)型double,分別占有存儲(chǔ)字節(jié)數(shù)為4和8。double和float都用來(lái)表示小數(shù),為了區(qū)分這兩種表示,float型小數(shù)后面需要添加“f”或“F”,即0.53F被視為float型,而0.53被視為double型。各種數(shù)值類(lèi)型間可以進(jìn)行強(qiáng)制類(lèi)型轉(zhuǎn)換,這一點(diǎn)與C語(yǔ)言相同,例如,“inti=(int)15.3;”將double型數(shù)15.3強(qiáng)制轉(zhuǎn)化為整型數(shù)15。強(qiáng)制類(lèi)型轉(zhuǎn)換也稱為顯式轉(zhuǎn)換,當(dāng)一個(gè)表達(dá)式中出現(xiàn)了int型和double型時(shí),則自動(dòng)將int型轉(zhuǎn)換為double型進(jìn)行計(jì)算,這種類(lèi)型轉(zhuǎn)換稱為隱式轉(zhuǎn)換,例如,3/6.0將得到0.5。

與數(shù)值類(lèi)型數(shù)據(jù)相關(guān)的Java算術(shù)運(yùn)算符包括加、減、乘、除和求余,即“+”、“-”、“*”、“/”和“%”;Java賦值運(yùn)算符為“=”;與C語(yǔ)言相同,Java語(yǔ)言支持自增和自減運(yùn)算符,即“++”和“--”;Java語(yǔ)言支持復(fù)合賦值運(yùn)算符,即“+=”、“-=”、“*=”、“/=”和“%=”。注意,復(fù)合運(yùn)算符中的兩個(gè)基本運(yùn)算符間沒(méi)有空格,例如“+=”是不正確的復(fù)合運(yùn)算符。

例2.7

數(shù)值類(lèi)型演示。

新建工程ex02_07,在工程ex02_07中新建類(lèi)MyEx0207(對(duì)應(yīng)文件名為MyEx0207.java,所在的包為cn.jxufe.zhangyong)。MyEx0207.java文件的程序代碼如下所示:上述代碼中,第5行定義byte型變量a1并初始化為0xF1(十六進(jìn)制數(shù)形式),由于Java不支持無(wú)符號(hào)型數(shù),因此a1為-15。第6行定義short型變量a2并初始化為0xF001,此時(shí)a2等于-4095。第7行定義整型變量a3,由于a3占4個(gè)字節(jié),這里0xF001相當(dāng)于0x0000F001,因此a3為61441。第8行定義長(zhǎng)整型變量a4,這里使用隱式轉(zhuǎn)換,a4等于61441。第9行定義double型變量b1并賦初值3/6.0,即0.5。第10行定義float型變量b2并賦初值為15.3000001。第11行定義double型變量b3并賦初值15.3000001。第14~15行輸出各個(gè)整型數(shù)變量的值。第16~17行輸出各個(gè)浮點(diǎn)數(shù)變量的值,如圖2-15所示。從圖2-15中可以看出,float型數(shù)b1的精度比double型數(shù)b2的精度低,b1無(wú)法精確識(shí)別15.3000001。圖2-15例2.7輸出結(jié)果2.2.2字符

Java支持Unicode碼,即用兩個(gè)字節(jié)表示的字符,Unicode碼(常被譯為統(tǒng)一碼)包含了ASCII碼,幾乎可以表示地球上現(xiàn)有的所有人類(lèi)語(yǔ)言符號(hào)。因此,一個(gè)Java字符占2個(gè)字節(jié)。定義的字符用兩個(gè)單引號(hào)括起來(lái),例如“charch1='A';”。如果字符不是ASCII,可以使用該字符的Unicode碼值來(lái)定義字符,例如“charch2='\u03b1';”,這里的03b1是十六進(jìn)制形式表示的碼值。與C語(yǔ)言相同,字符型數(shù)據(jù)支持自增和自減運(yùn)算符。字符型數(shù)據(jù)與數(shù)值型數(shù)據(jù)可以相互轉(zhuǎn)換,一般借助于顯式轉(zhuǎn)換方式。

例2.8

大寫(xiě)字母轉(zhuǎn)換為小寫(xiě)字母。

例2.8執(zhí)行結(jié)果為:輸入一個(gè)大寫(xiě)字母,輸出其對(duì)應(yīng)的小寫(xiě)字母。新建工程ex02_08,在工程ex02_08中新建類(lèi)MyEx0208(對(duì)應(yīng)文件名為MyEx0208.java,所在的包為cn.jxufe.zhangyong)。MyEx0208.java文件的程序代碼如下所示:上述代碼中,第7行定義了一個(gè)控制臺(tái)輸入對(duì)象scanner;第8行在控制臺(tái)輸出提示信息“Inputaletter:”;第9行從控制臺(tái)讀入字符串的值并賦給字符串變量str,scanner不支持字符的讀入;第10行從字符串str中提取第一個(gè)字符,賦給字符變量ch,這里使用了字符串的方法charAt。第11~13行判斷字符ch是否為大寫(xiě)字母,如果第11行為真,即字符ch為大寫(xiě)字母,則第12行將其轉(zhuǎn)化為小寫(xiě)字母。第14行輸出轉(zhuǎn)化結(jié)果,如圖2-16所示。圖2-16例2.8運(yùn)行結(jié)果

Java語(yǔ)言中常用的轉(zhuǎn)義字符如表2-1所示。表2-1Java語(yǔ)言常用轉(zhuǎn)義字符2.2.3字符串

Java中聲明字符串變量時(shí)使用String關(guān)鍵字(實(shí)際上是String類(lèi)),字符串聲明時(shí)需要初始化,字符串類(lèi)型為引用類(lèi)型(即字符串變量是指向字符串的地址),一旦創(chuàng)建后就不能更改字符串的值(注:可以在字符串尾部添加字符串)。如果要?jiǎng)?chuàng)建一個(gè)可以改變內(nèi)容的字符串,需要借助StringBuffer類(lèi)或StringBuilder類(lèi),這兩個(gè)類(lèi)都通過(guò)操作字符緩沖區(qū)來(lái)更改字符串的值,常用的方法有append、insert、substring、charAt、setLength、delete和toString等,它們分別表示追加字符串、插入字符串、定位部分字符串、定位字符串中的字符、設(shè)置字符串緩沖區(qū)的長(zhǎng)度、刪除部分字符串和返回字符串。

例2.9

字符串操作。

新建工程ex02_09,在工程ex02_09中新建類(lèi)MyEx0209(對(duì)應(yīng)文件名為MyEx0209.java,所在的包為cn.jxufe.zhangyong)。MyEx0209.java文件的程序代碼如下所示:例2.9的運(yùn)行結(jié)果如圖2-17所示。圖2-17例2.9運(yùn)行結(jié)果2.2.4布爾數(shù)

Java語(yǔ)言中,邏輯真為true,邏輯假為false,而且只有這兩個(gè)是布爾數(shù)。Java語(yǔ)言的布爾運(yùn)算符如表2-2所示,參與布爾運(yùn)算符的只能是布爾數(shù)。表2-2布?爾?運(yùn)?算?符

Java語(yǔ)言的關(guān)系運(yùn)算符如表2-3,關(guān)系運(yùn)算符的結(jié)果為布爾數(shù)。表2-3關(guān)?系?運(yùn)?算?符2.2.5數(shù)組

Java語(yǔ)言中定義數(shù)組的方法為“數(shù)據(jù)類(lèi)型[]數(shù)組名;”,例如定義包含20個(gè)元素的double型一維數(shù)組arr,其定義為“double[]arr=newdouble[20];”或“double[]arr;arr=newdouble

[20];”,這一點(diǎn)與C++相同。也可以在定義數(shù)組時(shí)對(duì)數(shù)組進(jìn)行初始化,例如,“double[]arr1={12.3,2.6,7.9,8.8};”,相當(dāng)于語(yǔ)句組“double[]arr1=newdouble[4];arr1[0]=12.3;arr1[1]=

2.6;arr1[2]=7.9;arr1[3]=8.8;”。Java數(shù)組的下標(biāo)從0開(kāi)始索引。

Java語(yǔ)言也可以定義高維數(shù)組,例如,“double[][]arr2=newdouble[4][5]”定義了一個(gè)4行、5列的二維數(shù)組,第一個(gè)元素的腳標(biāo)為[0][0],最后一個(gè)元素的腳標(biāo)為[3][4]。對(duì)于Java數(shù)組,可以使用foreach循環(huán)方法遍歷數(shù)組中的所有元素,可以借助Arrays類(lèi)中的方法處理數(shù)組元素,如例2.10所示。

例2.10

數(shù)組演示實(shí)例。

例2.10的功能為:產(chǎn)生10個(gè)隨機(jī)數(shù),對(duì)它們按從小到大的順序進(jìn)行排序,并計(jì)算它們的和。新建工程ex02_10,在工程ex02_10中新建類(lèi)MyEx0210(對(duì)應(yīng)文件名為MyEx0210.java,所在的包為cn.jxufe.zhangyong)。MyEx0210.java文件的程序代碼如下所示:上述代碼中,第8行定義double型數(shù)組arr,具有10個(gè)元素。第9行使用類(lèi)Random定義隨機(jī)數(shù)對(duì)象rnd,隨機(jī)數(shù)種子為10000(即隨機(jī)數(shù)迭代的起始值),指定隨機(jī)數(shù)種子后,每次運(yùn)行程序產(chǎn)生的隨機(jī)數(shù)序列是相同的。第11~14行在for循環(huán)中為數(shù)組arr的每個(gè)元素賦值,同時(shí)把該元素輸出到控制臺(tái)上,rnd.nextDouble()方法產(chǎn)生0~1的浮點(diǎn)數(shù)隨機(jī)數(shù),因此((int)(rnd.nextDouble()*10000))/100.0產(chǎn)生0.00~100.00的隨機(jī)數(shù)。第16行調(diào)用Arrays類(lèi)的sort方法對(duì)數(shù)組arr進(jìn)行排序。第18~20行輸出排序后的數(shù)組,這里是一種新的for循環(huán)形式,即對(duì)于arr中的每個(gè)一元素(elem),都執(zhí)行第19行的語(yǔ)句,即輸出到控制臺(tái)。同樣,第23~25行也使用這種for循環(huán)形式計(jì)算數(shù)組arr中所有元素的和,這種for循環(huán)稱為foreach循環(huán)。例2.10的輸出結(jié)果如圖2-18所示。圖2-18例2.10輸出結(jié)果 2.3Java類(lèi)

Java是面向?qū)ο蟮母呒?jí)程序設(shè)計(jì)語(yǔ)言,類(lèi)是其基本的數(shù)據(jù)結(jié)構(gòu)。類(lèi)也被稱為一種程序設(shè)計(jì)思想,很多學(xué)生覺(jué)得類(lèi)難以掌握,很大程度上是受了原來(lái)所學(xué)的面向過(guò)程程序設(shè)計(jì)思想的影響,而不能完全接收面向?qū)ο蟪绦蛟O(shè)計(jì)的新方法。而這種新方法卻大大增強(qiáng)了程序的可擴(kuò)展性、魯棒性和可重用性。類(lèi)是一種包含數(shù)據(jù)和方法的集合體數(shù)據(jù)類(lèi)型,即所謂的“類(lèi)封裝了數(shù)據(jù)和方法”。訪問(wèn)類(lèi)中的數(shù)據(jù)和方法必須遵循類(lèi)的“訪問(wèn)控制”要求。一般地,類(lèi)中的數(shù)據(jù)和方法有三種訪問(wèn)控制類(lèi)型,即公有的、保護(hù)的和私有的,依次采用關(guān)鍵字public、protected和private進(jìn)行修飾。當(dāng)不加訪問(wèn)控制修飾符時(shí),相當(dāng)于私有類(lèi)型,但是同一個(gè)包內(nèi)可以訪問(wèn)。類(lèi)中的數(shù)據(jù)和方法的訪問(wèn)控制權(quán)限如表2-4所示。表2-4類(lèi)中數(shù)據(jù)和方法的訪問(wèn)控制權(quán)限2.3.1類(lèi)與對(duì)象

類(lèi)使用關(guān)鍵字class定義,Java語(yǔ)言中建議類(lèi)名的首字母大寫(xiě)。例2.11演示了類(lèi)和對(duì)象的定義與實(shí)現(xiàn)方法。

例2.11

類(lèi)與對(duì)象應(yīng)用演示。

例2.11中定義了一個(gè)表示圓的屬性的類(lèi),類(lèi)名為MyCircle,將圓的半徑設(shè)為私有數(shù)據(jù)成員,求圓的周長(zhǎng)和面積作為兩個(gè)公有方法。新建工程ex02_11,在工程ex02_11中新建類(lèi)MyCircle(對(duì)應(yīng)文件名為MyCircle.java,所在的包為cn.jxufe.zhangyong),還要在工程ex02_11中新建類(lèi)MyEx0211(對(duì)應(yīng)文件名為MyEx0211.java,所在的包為cn.jxufe.zhangyong)。其中,文件MyCircle.java的代碼如下所示:圖2-19例2.11運(yùn)行結(jié)果第23~26行在控制臺(tái)輸出計(jì)算結(jié)果,如圖2-19所示。2.3.2繼承與多態(tài)

Java語(yǔ)言中,每個(gè)子類(lèi)只能從一個(gè)父類(lèi)繼承。當(dāng)子類(lèi)與父類(lèi)建立了繼承關(guān)系后,子類(lèi)將擁有父類(lèi)所有可以訪問(wèn)的數(shù)據(jù)和方法(除父類(lèi)的私有數(shù)據(jù)和私有方法外的成員),即父類(lèi)的這些方法可以被子類(lèi)的實(shí)例(對(duì)象)調(diào)用;但是子類(lèi)新添加的方法,父類(lèi)的實(shí)例(對(duì)象)則不能調(diào)用??梢哉J(rèn)為子類(lèi)是父類(lèi)添加了新特性后的特例,每個(gè)子類(lèi)的實(shí)例都是父類(lèi)的實(shí)例,即參數(shù)中以子類(lèi)實(shí)例出現(xiàn)的地方,均可以輸入父類(lèi)實(shí)例,稱之為多態(tài)。

例2.12演示了繼承與多態(tài)的情況,實(shí)例中建立了一個(gè)平面圖形類(lèi)MyPlanefigure,從該類(lèi)中派生出類(lèi)MyCircle和類(lèi)MyRectangle。

例2.12

繼承與多態(tài)演示。

新建工程ex02_12,在工程ex02_12中新建三個(gè)類(lèi),依次為MyPlanefigure、MyCircle和MyRectangle,對(duì)應(yīng)的文件名分別為MyPlanefigure.java、MyCircle.java和MyRectangle.java,所在的包為cn.jxufe.zhangyong。還要在工程ex02_12中新建類(lèi)MyEx0212,對(duì)應(yīng)文件名為MyEx0212.java,所在的包為cn.jxufe.zhangyong。其中,MyPlanefigure.java文件的代碼如下所示:例2.12的執(zhí)行結(jié)果如圖2-20所示。圖2-20例2.12程序運(yùn)行結(jié)果2.3.3接口

接口中只能聲明公有的抽象方法和常量,因此在接口中聲明抽象方法時(shí),省略publicabstract關(guān)鍵字;在聲明常量時(shí),省略publicstaticfinal等關(guān)鍵字。接口不但可以繼承其他接口,而且可以多重繼承,即一個(gè)接口可繼承多個(gè)父接口。同樣,類(lèi)繼承接口時(shí),也可以多重繼承即一個(gè)類(lèi)可以繼承多個(gè)接口。當(dāng)某個(gè)類(lèi)繼承了接口后,必須在類(lèi)中實(shí)現(xiàn)該接口的所有抽象方法。

下面在例2.12的基礎(chǔ)上,添加一個(gè)接口MyComparable,其中聲明了一個(gè)抽象方法compareTo,表示比較兩個(gè)圖形的面積;并添加一個(gè)新類(lèi)MyComparableRectangle。該類(lèi)繼承了類(lèi)MyRectangle和接口MyComparable,實(shí)現(xiàn)了接口MyComparable中的抽象方法。

例2.13

接口應(yīng)用演示。

新建工程ex02_13(實(shí)際上是在工程ex02_12基礎(chǔ)上修改得到),在工程ex02_13中新建四個(gè)類(lèi)和一個(gè)接口,即MyPlanefigure、MyCircle、MyRectangle、MyComparableRectangle和MyComparable(使用菜單“File|New|Interface”打開(kāi)新建接口窗口),對(duì)應(yīng)的文件名分別為MyPlanefigure.java、MyCircle.java、MyRectangle.java、MyComparableRectangle.java和MyComparable.java,所在的包均為cn.jxufe.zhangyong。然后,新建類(lèi)MyEx0213,對(duì)應(yīng)的文件名為MyEx0213.java,所在的包為cn.jxufe.zhangyong。其中,文件MyPlanefigure.java、MyCircle.java和MyRectangle.java與例2.12中的同名文件內(nèi)容相同,這里不再列舉其源代碼。下面羅列了文件MyComparableRectangle.java、MyComparable.java和MyEx0213.java的代碼。圖2-21例2.13運(yùn)行結(jié)果第26~36為main方法。第27~28行定義了兩個(gè)MyComparableRectangle類(lèi)型對(duì)象mycomprect1和mycomprect2,并初始化其寬和高分別為12.0、8.9和14.2、7.8。第29行調(diào)用compareTo方法比較這個(gè)長(zhǎng)方形的大小(即比較它們的面積大小),返回值存放在整型變量res中。第30~35行根據(jù)res的結(jié)果輸出比較信息。這里長(zhǎng)方形1的面積小于長(zhǎng)方形2的面積,因此輸出結(jié)果為“Rectangle1<Rectangle2”,如圖2-21所示。

2.4Java文件操作

Java語(yǔ)言中的操作文本文件與二進(jìn)制數(shù)據(jù)文件的類(lèi)庫(kù)不同。如果是操作文本文件,首先使用File類(lèi)定義文件對(duì)象,創(chuàng)建文件對(duì)象時(shí)需要輸入文件名,目錄分隔符使用“/”,這里的文件對(duì)象相當(dāng)于C語(yǔ)言的文件指針。創(chuàng)建好文件對(duì)象后,如果是文本文件的寫(xiě)操作,則使用類(lèi)PrintWriter創(chuàng)建文件寫(xiě)入對(duì)象,使用該對(duì)象的方法print等向文件中寫(xiě)入數(shù)據(jù);如果是文本文件的讀操作,則使用類(lèi)Scanner創(chuàng)建文件讀出對(duì)象,使用該對(duì)象的方法next等從文件中讀出數(shù)據(jù)。如果是操作二進(jìn)制文件,創(chuàng)建讀或?qū)懙亩M(jìn)制文件需要分別借助類(lèi)FileInputStream和FileOutputStream創(chuàng)建文件對(duì)象;再分別借助類(lèi)DataInputStream和DataOutputStream創(chuàng)建文件讀/寫(xiě)對(duì)象;最后使用這些對(duì)象的方法,例如readInt、writeInt等實(shí)現(xiàn)二進(jìn)制文件的讀/寫(xiě)。此外,類(lèi)FileInputStream和FileOutputStream創(chuàng)建的文件對(duì)象也具有字節(jié)數(shù)據(jù)的讀/寫(xiě)方法,即使用類(lèi)FileInputStream和FileOutputStream的對(duì)象方法實(shí)現(xiàn)的

讀/寫(xiě)操作是基于字節(jié)數(shù)據(jù)的,而借助于類(lèi)DataInputStream和DataOutputStream的對(duì)象方法可實(shí)現(xiàn)基本數(shù)據(jù)類(lèi)型的讀/寫(xiě)操作。

例2.14

文本文件的讀/寫(xiě)演示。

新建工程ex02_14,在工程ex02_14中新建類(lèi)MyEx0214,對(duì)應(yīng)的文件名為MyEx0214.java,所在的包為cn.jxufe.zhangyong。在工程所在目錄(D:\myWorkspace\ex02_14)下新建目錄myfiles。文件MyEx0214.java的代碼如下所示:例2.14的執(zhí)行結(jié)果如圖2-22所示。打開(kāi)文件“D:\myWorkspace\ex02_14\myfiles\myex02_14.txt”,其內(nèi)容如圖2-23所示。圖2-22例2.14執(zhí)行結(jié)果圖2-23文件myex0214.txt的內(nèi)容

例2.15

二進(jìn)制文件的讀寫(xiě)演示。

新建工程ex02_15,在工程ex02_15中新建類(lèi)MyEx0215,對(duì)應(yīng)的文件名為MyEx0215.java,所在的包為cn.jxufe.zhangyong。文件MyEx0215.java的代碼如下所示:第24~25行分別定義了輸入流對(duì)象inStream和infile。第26~28行使用與寫(xiě)操作方法writeUTF和writeInt對(duì)應(yīng)的讀操作方法,即readUTF和readInt,從文件中讀出/寫(xiě)入數(shù)據(jù)并顯示在控制臺(tái)上,如圖2-24所示。

采用數(shù)據(jù)流方法寫(xiě)入到文件中的數(shù)據(jù)是二進(jìn)制格式,文件myscore.dat位于目錄“D:\myWorkspace\ex02_15”下,其內(nèi)容如圖2-25所示。圖2-24例2.15執(zhí)行結(jié)果圖2-25文件myscore.dat的內(nèi)容 2.5在命令行窗口中運(yùn)行Java程序

例2.1至例2.15的運(yùn)行均是在Eclipse環(huán)境下運(yùn)行的。事實(shí)上,Java程序可以直接在Windows環(huán)境下運(yùn)行(安裝了Java虛擬機(jī))。在Eclipse環(huán)境下,選擇菜單“File|Export…”,在彈出的菜單中選擇“RunnableJARfile”,如圖2-26所示,然后點(diǎn)擊“Next”按鈕進(jìn)入圖2-27所示界面。圖2-26Export對(duì)話框圖2-27可執(zhí)行文件JAR的設(shè)置進(jìn)入到目錄“D:\myWorkspace\ex02_15”下,如圖2-28所示,可執(zhí)行的JAR文件為myEx0215.jar。圖2-28ex02_15目錄文件在命令提示符工作模式下,如圖2-29所示,輸入命令“java–jarmyEx0215.jar”,要求JAR文件必須帶擴(kuò)展名?.jar,程序執(zhí)行結(jié)果如圖2-29所示。將圖2-29的顯示結(jié)果與圖2-24的輸出結(jié)果對(duì)比,可見(jiàn)其運(yùn)行結(jié)果完全相同。因此,這兩種運(yùn)行Java程序的方式是相同的。一般地,也可以直接在圖2-28中雙擊myEx0215.jar圖標(biāo)運(yùn)行JAR程序文件(需要設(shè)置Windows默認(rèn)的JAR文件運(yùn)行方式)。圖2-29在命令提示符下執(zhí)行myEx0215.jar文件

2.6Java圖形界面

2.6.1事件響應(yīng)方法

例2.16的程序具有基本的圖形用戶界面,點(diǎn)擊命令按鈕時(shí)將向控制臺(tái)輸出提示信息。

例2.16

圖形界面程序及事件響應(yīng)演示。

新建工程ex02_16,在工程ex02_16中新建類(lèi)MyEx0216,對(duì)應(yīng)的文件名為MyEx0216.java,所在的包

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論