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

下載本文檔

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

文檔簡介

第2章Java語言2.1Java程序語法與控制

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

2.3Java類

2.4Java文件操作

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

2.1Java程序語法與控制

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

publicstaticvoidmain(String[]args){}

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

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

例2.1

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

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

Fah=1.8×Cel+32

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

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

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

S2.控制臺顯示“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是一個完整的程序,輸出“Helloworld!”信息,為了實現(xiàn)攝氏溫度轉(zhuǎn)換為華氏溫度的功能,改寫程序文件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行定義雙精度浮點數(shù)變量Cel并初始化為36.5,第6行定義雙精度浮點數(shù)變量Fah,第7行根據(jù)公式計算新的Fah的值,第8、9行調(diào)用方法System.out.println在控制臺輸出信息“36.5deg.C=97.7deg.F.”,如圖2-5所示。

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

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

if(布爾表達式){

布爾表達式為真時執(zhí)行的語句組;

}

else{

布爾表達式為假時執(zhí)行的語句組;

}

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

}

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

例2.2

求解一元二次方程的根。

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

例2.3

人民幣兌換外幣計算。

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

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

while(條件表達式){

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

}

Do{

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

例2.5

計算九九乘法表。

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

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

例2.6

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

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

2.2.1數(shù)值

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

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

例2.7

數(shù)值類型演示。

新建工程ex02_07,在工程ex02_07中新建類MyEx0207(對應(yīng)文件名為MyEx0207.java,所在的包為cn.jxufe.zhangyong)。MyEx0207.java文件的程序代碼如下所示:上述代碼中,第5行定義byte型變量a1并初始化為0xF1(十六進制數(shù)形式),由于Java不支持無符號型數(shù),因此a1為-15。第6行定義short型變量a2并初始化為0xF001,此時a2等于-4095。第7行定義整型變量a3,由于a3占4個字節(jié),這里0xF001相當(dāng)于0x0000F001,因此a3為61441。第8行定義長整型變量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行輸出各個整型數(shù)變量的值。第16~17行輸出各個浮點數(shù)變量的值,如圖2-15所示。從圖2-15中可以看出,float型數(shù)b1的精度比double型數(shù)b2的精度低,b1無法精確識別15.3000001。圖2-15例2.7輸出結(jié)果2.2.2字符

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

例2.8

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

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

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

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

例2.9

字符串操作。

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

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

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

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

[20];”,這一點與C++相同。也可以在定義數(shù)組時對數(shù)組進行初始化,例如,“double[]arr1={12.3,2.6,7.9,8.8};”,相當(dāng)于語句組“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開始索引。

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

例2.10

數(shù)組演示實例。

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

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

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

例2.11

類與對象應(yīng)用演示。

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

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

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

例2.12

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

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

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

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

例2.13

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

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

2.4Java文件操作

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

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

例2.14

文本文件的讀/寫演示。

新建工程ex02_14,在工程ex02_14中新建類MyEx0214,對應(yīng)的文件名為MyEx0214.java,所在的包為cn.jxufe.zhangyong。在工程所在目錄(D:\myWorkspace\ex02_14)下新建目錄myfiles。文件MyEx0214.java的代碼如下所示:例2.14的執(zhí)行結(jié)果如圖2-22所示。打開文件“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

二進制文件的讀寫演示。

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

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

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

2.6Java圖形界面

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

例2.16的程序具有基本的圖形用戶界面,點擊命令按鈕時將向控制臺輸出提示信息。

例2.16

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

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

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論