




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
自考《Java語言程序設計》串講筆記(完整版)(文檔可以直接使用,也可根據實際需要修改使用,可編輯歡迎下載)
自考04747《Java語言程序設計(一)》串講筆記自考《Java語言程序設計》串講筆記(完整版)(文檔可以直接使用,也可根據實際需要修改使用,可編輯歡迎下載)
自考串講筆記
1.1Java語言的特點
Java語言最初的應用對象是消費性電子產品。最初的名字是Oak語言。
Java語言是適用于分布式計算環(huán)境的面向對象編程語言,它雖類似于C和C++,但比C++簡單,忽略了許多為提高計算效率但初學者較難掌握的程序語言特性。
Java語言主要有以下特點:
①強類型。
②編譯和解釋:Java語言是一種高級編程語言,用Java語言編寫的源程序在計算機上運行需要經過編譯和解釋執(zhí)行兩個嚴格區(qū)分的階段。Java的編譯程序先將Java的源程序翻譯成與機器無關的字節(jié)碼,不是通常的編譯程序將源程序翻譯成特定計算機的機器代碼。
運行時,Java的運行系統(tǒng)裝載和鏈接需要執(zhí)行的類,并作必要的優(yōu)化后,解釋執(zhí)行字節(jié)碼程序。
③自動無用內存回收功能,沒有指針,數組元素都要檢查下標是否越界。
④面向對象。
⑤與平臺無關:在任何平臺上,Java源程序被Java編譯器譯成虛擬機能夠識別的字節(jié)碼。這樣,只要有Java虛擬機的平臺,就能解釋執(zhí)行Java字節(jié)碼程序,從而實現(xiàn)Java程序與平臺無關。
⑥安全性。
⑦分布式計算。
⑧多線程。
1.2Java應用程序和小應用程序
Java程序可以是獨立的應用程序,也可以是能在瀏覽器上執(zhí)行的小應用程序(Applet)。兩種Java程序都由一個或多個擴展名為“.class”的文件組成,而且都需要Java虛擬機(jVM)載入并翻譯。
兩種程序的主要區(qū)別是:
①小應用程序只能在與Java兼容的容器中運行,可以嵌入在HTML網頁內,在網絡上發(fā)布,當網頁被瀏覽時,在瀏覽器中運行,小應用程序的運行還受到嚴格的安全限制,例如:它不能訪問用戶計算機上的文件。Java應用程序沒有這些限制,也不支持網頁嵌入和下載運行。②小應用程序和應用程序在代碼編寫上也有很大差異。一個小應用程序必須定義成一個Applet類的子類。應用程序可以是Applet類的子類,也可以不是。應用程序必須在一個類中定義一個main()方法,該方法代表應用程序的入口。而小應用程序不必定義main()方法,它的執(zhí)行由Applet類中定義的多個方法控制。
Java源程序命名受到嚴格的限制:
Java源程序的擴展名必須是“.Java”,而源程序經過編譯后得到的應用程序文件名(即字節(jié)碼文件)的主文件名和源程序中的類名一樣,而擴展名是“.class”。如果源文件中多個類,那么最多只能有一個public類;如果源文件中有public類,那么源文件的名字必須與這個類的名字完全相同。如果源文件沒有public類,那么源文件的名字只要和某一個類的名字相同即可。
Java程序中經常會出現(xiàn)注釋。注釋是程序中的說明文字,用于幫助閱讀程序,它不是語句,不會影響程序的執(zhí)行效率。
Java語言的注釋有三種形式:
①行注釋(//):用于簡短地說明前面代碼的意義或功能。注釋內容到行末,不能跨行。②塊注釋(/***/):是多行注釋,用于說明下面程序段的算法、功能等,塊注釋不可嵌套使用。
③文檔注釋(/***/):能被實用程序(命令)Javadoc接受,由它能自動生成程序的HTML文檔。
-1-
1.3Java程序的開發(fā)過程(以下以SUN公司的JavajDK為例)
對于Java應用程序,先編寫Java源程序,源程序經Java編譯器(Javac.exe)編譯后產生字節(jié)碼文件,最后由Java解釋器(Java.exe)解釋執(zhí)行字節(jié)碼文件。
對于小應用程序,先編寫Java源程序,源程序經Java編譯器編譯后產生字節(jié)碼文件,最后由Web瀏覽器(appletviewer.exe)解釋執(zhí)行字節(jié)碼文件。
編譯器和解釋器的使用格式是:
Javac[選項]源文件(其中源文件是“.Java”文件)Java[選項]類名[參數](類名指定的必須是含有main()方法的類,即是一個Java應用程序)
通常情況下用的比較多的開發(fā)環(huán)境有Eclipse,jBuilder等。
1.4標識符和關鍵字
Java語言使用Unicode字符集,共有65535個字符。
Java標識符用于命名程序對象。
Java語言的標識符可以按以下規(guī)則任意命名:
①由字母(包括英文字母、下劃線字符、美元字符、
文字字符)和數字組成。
②限定標識符的第一個字符不能是數字字符。
除了按上述規(guī)則命名標識符外,另外還有命名的習慣約定(行業(yè)習慣,不是規(guī)定):一般變量名、方法名用小寫英文字母開頭,類名首字母用大寫字母,若命名由若干個單詞組成,后面的每個單詞用大寫開頭;文字和常數全用大寫字母命名;包名全部用小寫字母。
Java關鍵字:關鍵字是一些英文單詞,在語言中,關鍵字已經被賦予特定的意義,不能用這些關鍵字作為標識符
命名程序對象。關鍵字全部由小寫字母組成。每個關鍵字在程序中出現(xiàn),均有特定位置和特定使用方法的要求。
1.5基本數據類型
Java語言是強類型語言,每個變量和表達式都有確定的類型,在變量賦值時要進行類型兼容性檢驗。
數據類型可分為非基本數據類型和基本數據類型兩大類。
非基本類型也稱為復合數據類型,是由基本類型組合的新類型。非基本數據類型分為:數組、字符串、類、接口。
基本數據類型也稱為原始數據類型,是系統(tǒng)預先規(guī)定的一些常用類型。它們是:整數類型、浮點數(實數)類型、字符(文字)類型、邏輯類型(布爾型)。
①邏輯類型用關鍵字boolean標識,所以也稱為布爾型。邏輯類型只有真(true)和假(false)兩個值。
②字符類型用關鍵字char標識。字符型數據是一個字符,內部表示是字符的Unicode代碼,共有65535個不同的字符。在Java程序中,字符常量有普通字符常量(用單引號括住一個字符)和轉義字符常量(用\開頭后跟特定字符或字符串)兩種。
③整數類型是指不帶小數點和指數的數值數據。
由于計算機只能表示整數的一個子集,表達更大范圍內的整數需要更多的二進制位,Java語言將整數數據按數值范圍大小不同分成四種:基本型用關鍵字int標識,4個字節(jié),32位,取
31311515值范圍是-2~2-1;短整型用關鍵字short標識,2個字節(jié),16位,取值范圍是-2~2-1;字
77節(jié)型用關鍵字byte標識,1個字節(jié),8位,取值范圍是-2~2-1;長整型用關鍵字long標識
6363(或者在常數后加L或l標識),8個字節(jié),64位,取值范圍是-2~2-1。每種整數類型處理
不同范圍的整數值,并且都是帶符號的。
整型常量有十進制、八進制(以數字符0開頭)和十六進制(以0x開頭)三種寫法。
④浮點數類型也稱為實型,浮點數是帶小數點或指數的數值數據。Java語言的浮點數有單精度和雙精度兩種。
單精度型用關鍵字float標識,占4個字節(jié),32位。
-2-
Float型常量的書寫方法是在實數之后加上字母F或f。雙精度用關鍵字double標識,占8個字節(jié),64位。double型常量的書寫方法有兩種:一種寫法是直接寫一個實數,或在實數后加字母D或d。另一種是科學計數法,用10的方冪(用字符e或E表示冪底10)。
2.1數據運算
Java語言的基本運算可分成以下幾類:賦值運算、算術運算、自增和自減運算、關系運算、邏輯運算、條件運算和字符串連接運算等。
2.1.1賦值運算
在Java語言中符號“=”是賦值運算符不是“相等”運算符(相等運算符是“==”見關系運算符的敘述)賦值運算分為兩類:一是簡單賦值運算;二是復合賦值運算。
1.簡單賦值運算
簡單賦值運算的一般形式如下:
變量表達式
賦值運算的執(zhí)行過程是:
(1)計算賦值運算符右端的表達式。
(2)當賦值運算兩側的類型不一致時,將表達式值的類型自動轉換成變量的類型。
(3)將表達式的值賦值給變量,即存儲到與變量對應的存儲單元中。
這里的類型轉達換是指數值數據的類型自動轉換,這樣的自動轉換只能是簡單類型向復類型轉換,不能從復雜的轉換成簡單的。即如下所示的從左到右轉換。
byte→short→int→long→float→double
Java語言約定賦值運算也有值,它的值就是賦予變量的值,因此,賦值運算的結果可以繼續(xù)賦值。
intj;
doubley=2.0;
y=j=3;∥j的值為3,y的值為3.0
賦值運算符結合性“自右至左”當連續(xù)有多個賦值運算時,是從右至左逐個賦值。
2.復合賦值運算
這類運算的特殊性點是:變量即要參與運算,又要接受賦值。為避免對同一個變量的地址重復,計算引入復合賦值運算符。常用的復合賦值運算符有:+=、-=、=、/=、%=。
2.1.2算術運算
算術運算要求運算分量的類型是數值類型的(整數類型和浮點數類型)。運算時,只需一個運算分量的是單目運算,需兩個運算分量的是雙目運算。特別的:
(1)“/”為除法運算符,當除數和被除數均為整數類型數據時,則結果也是整數類型數據。例如7/4的結果為1。
(2)“%”為求余數運算符,求余數運算所得結果的符號與被除數的符號相同。例如5%3的結果為2,-5%3的結果為的結果為3。
2.1.3自增和自減運算
自增運算符“++”和自減運算符“--”是單目運算符,要求運算分量是數值類型的變量,其作用是使變量的值增1或減1,這兩個運算符與變量結合有以下四種可能形式:
++i前綴形式,表示在引用變量i之前,先使i加1,以加1后的i值為運算結果。-i前綴形式,表示在引用變量i之前,先使i減1,以減1后的i值為運算結果。i++后綴形式,表示在引用變量i之后,才使i加1,即以增1前的i值為運算結果。i--后綴形式,表示在引用變量i之后,才使i減1,即以減1前的i值為運算結果。例如:
i=4;j=++i;∥i結果為5,j的結果為5
i=4;j=i++;∥i的結果為5,j的結果為4
i=4;j=!!i;∥i結果為3,j的結果為3
i=4;j=i!!;∥i結果為3,j的結果為4
-3-
上述例子說明,對變量采用自增(或自減),用前綴形式或用后綴形式,對變量本身來說,效果是相同的,但表達式的值不相同。前綴形式是變量運算之后的新值,后綴形式是變量運算之前的值.自增自減運算能使程序更為簡潔和高效,但在使用時需注意“++”和“!!”運算的運算對象只能是變量,不能是常量或表達式.例如,4++或(i+j)++都是不合法的.
2.1.4關系運算
關系運算對左右兩側的值進行比較,如果比較運算的結果成立,則值為true,不成立為false。
關系運算符的優(yōu)先級別不完全相同。<、<=、>、>=的優(yōu)先級高于==、!=。
關系運算符的優(yōu)先級低于算術運算符的優(yōu)先級。
2.1.5邏輯運算
邏輯運算用來描述表達式,實現(xiàn)連續(xù)多個條件的邏輯與、邏輯或、邏輯否定的判定。有3個邏輯運算符:&&(邏輯與)、‖(邏輯或)、!(邏輯否定)
其中:運算符""和‖是雙目運算符,運算符!是單目運算符。邏輯運算的操作數必須是布爾型的,結果也是布爾型的。
邏輯否定“!”的優(yōu)先級高于算術運算符的優(yōu)先級。
邏輯與“&&”和邏輯或“‖”的優(yōu)先級低于關系運算符的優(yōu)先級。
需要特別指出的是,邏輯與和邏輯或運算符有以下性質,Java語言利用這些性質,在進行連續(xù)的邏輯運算時,不分邏輯與和邏輯或的優(yōu)先級進行計算,而是順序進行邏輯與和邏輯或的計算,一旦邏輯子表達式或邏輯表達式能確定結果,就不再繼續(xù)計算。
(1)對表達式a""b,當a為false時,結果為false,不必再計算b;僅當a為true時,才需計算b。
(2)對表達式a‖b,當a為true時,結果為true,不必再計算b;僅當a為false時,才需計算b。
例如:設有a=b=c=1,計算++a>=1||++b<++c。從左到右順序計算邏輯或表達式,先計算子表達式++a>=1,變量a的值變?yōu)?,++a>=1為true,整個邏輯表達式的值已經為true,不再計算右邊的子表達式++b<++c。因而,變量b和變量c的值不變,仍為1。
2.1.6條件運算(?:)
條件運算是一個三目運算符,一般形式為:邏輯表達式?表達式1:表達式2
2.1.7其他運算
1.位運算
位運算的運算分量只能是整型數據,位運算把運算對象看作是由二進制位組成的位串,逐位完成指定的運算,得到一個新的位串。
位運算符有4個,按優(yōu)先級從高到低順序,依次為:~(位反)、&(位與)、^(位異或)、|(位或)
用位運算的組合可以用來描述各種特殊的位串運算。例如,位運算表達式((k-1)^)&k能取下非0的整型變量k的最右邊為1的那一位。
2.移位運算
移位運算是將整數作為二進制位的位串向左或向右移動。移位運算符有三個,它們是:左移運算符(<<)、算術右移運算符(>>)、邏輯右移運算符(>>)
移位運算有兩個運算分量,左運算分量為移位的數據對象,右運算分量的值為移位位數。移位運算符的優(yōu)先級低于算術算符,高于關系運算符,它們的結合方向是自左至右。
Java語言允許數值型數據混合運算,不同類型的數值數據混合運算時需要類型轉換。對于數據表示字節(jié)數少的類型數據轉換成數據表示字節(jié)數較多的類型數據,系統(tǒng)能自動實現(xiàn)轉換。反之,例如,將一個long類數據轉換成int型數型,這種數據類型轉換必須采用類型強制轉換。類型強制轉換稱作造型(cast),書寫格式為:
(類型)表達式
2.2語句
-4-
在Java語言中,語句分為基本語句、控制結構語句以及package語句和import語句等。其中控制結構語句包括復合語句、if語句、switch語句、循環(huán)語句和try...catch語句。其中循環(huán)語句有while語句、do...while語句、for語句三種。
2.2.1基本語句
基本語句主要有表達式語句、空語句、break語句、continue語句、return語句等。
1.表達式語句
在賦值表達式、自增自減表達式和方法調用表達式之后加上分號即變成語句,稱它們是表達式語句。
另一個典型的表達式語句是方法調用表達式之后接上分號。
2.空語句
空語句是只有一個分號的語句,其形式為;
實際上,空語句是什么也不做的語句。語言引入空語句是出于以下實用上的考慮。例如,循環(huán)控制結構的句法需要一個語句作為循環(huán)體,當要循環(huán)執(zhí)行的動作由循環(huán)控制部分完成時,就不需要有一個實際意義的循環(huán)體,這時就需要用一個空語句作為循環(huán)體。另外,語言引入空語句使序列中連續(xù)出現(xiàn)多個分號不再是一種錯誤,編譯系統(tǒng)遇到這種情況,就認為單獨的分號是空語句。
3.break語句
break語句必須出現(xiàn)在多路按值選擇結構或循環(huán)結構中。break語句的執(zhí)行強制結束它所在的控制結構,讓程序從這個控制結構的后繼語句繼續(xù)執(zhí)行。
4.continue語句
continue語句只能出現(xiàn)在循環(huán)結構中,continue語句的執(zhí)行將忽略它所在的循環(huán)體中在它之后的語句。
簡單地說,continue語句提早結束當前輪次循環(huán),進入下一輪次循環(huán)。
2.2.2復合語句
在Java語言中,用花括號括住一個順序執(zhí)行的計算步驟序列描述順序結構,這樣的順序結構稱作復合語句。復合語句中的每個計算步驟可以是單個語句,也可以是一個控制結構,特別情況也可以為空。
2.2.3if語句
有兩種選擇控制結構:兩路條件選擇結構(用if語句描述)和多路按值選擇結構。
2.2.4switch語句
在Java語言中,用switch語句描述多路按值選擇結構。switch語句包含一個表達式,用于按表達式值的不同作相應選擇。另外,還有一系列由case開頭的子句和一個可選用的default開頭的子句,每個子句有一個可能為空的語句序列。
正確編寫switch語句有以下幾個要求:
(1)switch后面括號內的表達式的類型只限于char、int、short和byte。
(2)所有case后的常量表達式的值互不相同,類型與switch后括號內的表達式類型一致。
(3)語句序列由任意條合法的Java語句構成,也可以沒有語句。
(4)default子句可以缺省,但至多出現(xiàn)一次,習慣總是將它寫在所有case子句之后,如有必要也可寫在某個case子句之前。
(5)如果要使各種情況互相排斥,僅執(zhí)行一個子句的語句序列,每個子句都需要以break語句結束。
2.2.5try...catch語句
Java語言提供了一種稱為異常的機制協(xié)助程序報告和處理錯誤。程序不必用特別的語句對異常預先進行檢測,而是當異常真的發(fā)生時,系統(tǒng)會拋出一個異常。這時,程序的正常流程被中斷,系統(tǒng)會自動進入程序預先設定的異常處理代碼塊執(zhí)行。這個代碼塊或者能嘗試從錯誤中恢復,或者輸出必要的信息后終止程序,防止異常錯誤的影響進一步擴大。
-5-
要使程序能完成異常處理,需要給出可能會產生異常的代碼塊,以及異常發(fā)生時處理這個異常的代碼塊。在Java語言中,用try...catch語句指定可能會發(fā)生異常的代碼塊和錯誤處理代碼塊。try...catch語句由try引導,由try標識一個可能會發(fā)生異常的語句塊,用catch標識一個處理某種異常的語句塊,如果發(fā)生這異常,中斷程序正常的執(zhí)行流程,直接執(zhí)行處理異常的語句塊。最后,為了適應各種可能,另用finally標識一個無論try塊中語句異常是否發(fā)生都會執(zhí)行的語句塊。下面是try...catch語句的一般形式:
try{
語句塊//執(zhí)行該語句塊,可能會發(fā)生異常
}catch(異常類型e){
異常發(fā)生時要執(zhí)行的語句塊
}finally{
無論異常發(fā)生與否,都要執(zhí)行的語句塊
}
2.2.6while語句
while語句用于描述while循環(huán),while循環(huán)結構由一個循環(huán)條件和一個作為循環(huán)體的語句組成,while循環(huán)的語義是當條件成立時重復執(zhí)行指定的循環(huán)體。
2.2.7do...while語句
do...while語句用于描述do...while循環(huán)。do...while循環(huán)也由一個循環(huán)條件和一個循環(huán)體組成。
do...while循環(huán)的語義是重復執(zhí)行指定的循環(huán)體,直至條件不成立結束循環(huán)。
注意,最后的分號是do...while循環(huán)結構的結束符,不能省略。
2.2.8for語句
循環(huán)之前要為變量置初值,在循環(huán)過程中循環(huán)變量逐一變化的循環(huán)計算結構,稱為for循環(huán)。for循環(huán)包含四部分,為循環(huán)有關變量賦初值的表達式1、控制循環(huán)條件的表達式2、實現(xiàn)循環(huán)計算的語句,稱作循環(huán)體,以及循環(huán)體執(zhí)行后為有關變量更新的表達式3,for循環(huán)控制結構用for語句描述,for語句的一般形式為
for(表達式1;表達式2;表達式3)
2.2.9嵌套的循環(huán)結構
當循環(huán)結構的循環(huán)體中又包含循環(huán)結構時,循環(huán)結構就呈嵌套的形式。
2.2.10循環(huán)體中的continue語句和break語句
循環(huán)體中的continue語句和break語句用于改變循環(huán)原有語句執(zhí)行流程。其中continue語句的作用是結束當前一輪循環(huán)(跳過本輪循環(huán)的剩余語句),直接進入下一輪循環(huán)。continue語句出現(xiàn)在for循環(huán)中,跳至表達式3的計算,更新循環(huán)變量。continue語句出現(xiàn)在while和do-while循環(huán)中,跳至循環(huán)條件的計算和測試。
break語句的作用是從循環(huán)體內跳出至循環(huán)的后繼語句,即強行中斷當前循環(huán)。
2.2.11package語句
在Java語言中,程序包相當于其他語言的函數庫。
除了系統(tǒng)提供大量程序包外,程序員也可將自己編寫的類組成程序包,以便以后像使用系統(tǒng)程序包一樣使用它們。程序包聲明稱為package語句,格式如下:
package包名;
package語句必須出現(xiàn)在源程序文件的起始行,表示出現(xiàn)在該文件中的所有類都屬于這個程序包。如果有多個源程序的程序包聲明使用相同的包名,則表示這些源程序文件中的全部類都屬于這個程序包。包名是一個目錄名,其中也可以有路徑。如果源程序文件的首行沒有package語句,則被默認為是無名包,存于當前目錄中。
2.2.12import語句
import語句用來引入所需要的類。import語句的格式為:
import包名.類名;
-6-
importJava.util.Date;//只是引入Date類
如果要從一個包中引入多個類,則可以用通配符“”。例如,以下代碼從Java.awt包中引入awt目錄層次的所有類。
importJava.awt.;//從Java.awt包中引入所有的類
在一個Java源程序中可以有多個import語句,它們必須出現(xiàn)在package語句之后,類的定義之前。
JavaAPI的類被組織成多個包,它們常被Java程序引入使用:
Java.applet包含所有支持Javaapplet的類
Java.awt包含抽象窗口工具集中的圖形、文本、窗口GUI類
Javax.wing是Java.awt包的擴充,包含更豐富的抽象窗口工具集
Java.awt.image包含抽象窗口工具集中的圖像處理類
Java.lang包含所有的基本語言類
Java.io包含所有的輸入輸出類
J包含所有實現(xiàn)網絡功能的類
Java.util包含有用的實用庫程序類
Java.awt.peer平臺無關的GUI工具集界面
3.1面向對象的基本概念
1.抽象
抽象(Abstraction)是程序設計中最經常使用的技術之一,因為抽象是有效控制程序復雜性的重要手段。程序設計中利用抽象,在面向過程階段,系統(tǒng)按函數和模塊進行設計。在面向對象階段,利用抽象按類設計。類是目前支持抽象的最好工具。
2.對象
在面向對象語言中,對象的名稱用于程序引用對象,對象的成員變量,用于存儲對象的狀態(tài)信息,對象的方法用于描述對象的行為。
3.消息
在程序系統(tǒng)中,對象之間的交互通過相互發(fā)送消息(Message)實現(xiàn)。
4.類
統(tǒng)一給出同類對象的各項屬性和能提供的所有行為,避免程序逐一描述同類中的每個對象的所有屬性及詳細給出對象的每個方法的描述,把同一類對象的所有共同的屬性和行為放在一起描述。這種聲明對象共有屬性和行為的機制稱為類。類的聲明定義了類的所有對象的共有屬性和方法。類是對一組相同對象的描述,類概括了同類對象的共有性質:數據和方法。類的每個對象都有自己的標識,但它們具有相同的一組屬性和提供相同的一組方法。
5.繼承
除對象按類劃分外,不是同一類的對象可能會在某些相似性。繼承(Inheritance)就是在已有類的基礎上,擴充屬性,或擴充與改寫其某些方法,生成新的類,這個方式稱為繼承。繼承定義的類稱為子類,被繼承的類稱為超類(父類),子類自動含有父類具有的屬性和方法。繼承具有傳遞性。超類聲明定義共同的特征,子類繼承超類的共有特性,還可增加某些特殊性,并可擴充和修正部分行為。采用繼承聲明定義的子類可以有父類的屬性和方法,也可以增加新的屬性和方法,并可以對父類的某些方法給出新年的定義。繼承的最大好處是對象能按層次劃分,并在子類中,與父類相同的屬性和方法可以不再重復聲明。繼承體現(xiàn)了面向對象方法與現(xiàn)實世界中人們的抽象思維方式保持一致。
6.多態(tài)性
多態(tài)性(Polymorphism)有多種表現(xiàn)形式,這里所說的多態(tài)性是指類型適應性多態(tài)性,這來自繼承,不同繼承層次的對象同樣的方法有不同的實現(xiàn)。類型適應性多態(tài)要求能自動按對象的實際類型正確調用它的方法。類型適應性的多態(tài)性需要采用動態(tài)聯(lián)編(DynamicBinding)技術實現(xiàn)。
-7-
聯(lián)編是將發(fā)送給對象的消息與含執(zhí)行該消息方法的對象連接起來。當聯(lián)編在編譯和連接階段實現(xiàn)時,這樣的聯(lián)編過程稱為靜態(tài)聯(lián)編;當聯(lián)編推遲至運行時間實現(xiàn)時,該聯(lián)編過程稱為動態(tài)聯(lián)編。動態(tài)聯(lián)編是面向對象語言必須具有的一種能力,是實現(xiàn)上述多態(tài)性的技術基礎。
3.2Java的類和對象
3.2.1類
類是一種類型,類封裝對象的屬性和方法,是同一類對象的模板。Java程序的主要部分是描述類。
1.類的聲明
聲明一個新類的基本格式如下:
class類名//聲明新類的基本格式
{
類體
}
其中關鍵字class引導一個類的聲明,類名是一個標識符。類體給出類的成員變量定義和方法定義,類體中不能有獨立的執(zhí)行代碼,所有的執(zhí)行代碼只能出現(xiàn)在方法中。
2.成員變量
成員變量定義的一般形式為:[修飾字]類型變量名;
其中,修飾字可以空缺,修飾字用于對成員變量限制其訪問權限,成員的訪問權限有4種,private、protected、public和友好的,變量的類型可以是任何數據類型,變量的名字是一個標識符。Java中成員變量的名字可以與類的方法的名字相同。
成員變量對類內定義的方法都有效。類的方法也可定義變量,這種變量稱為局部變量,局部變量只在定義它的方法中有效。
3.方法
方法給出對象的行為,方法聲明的一般形式如下:
返回值類型方法名(類型參數名,...,類型參數名)
{
方法體
}
返回值類型聲明方法返回值的數據類型。如果方法無返回值,就用void關鍵字。方法可以沒有參數,多個參數用逗號分隔,參數類型可以是任何數據類型。
如果某方法中的參數名或局部變量名與類的成員變量名相同,則成員變量在這個方法內暫時被隱藏。
如果成員變量在方法內被隱藏,又在方法中要引用成員變量,必須使用this,this表示調用該方法的當前對象。
在Java程序中,類的方法可以重載。方法重載是指在一個類中定義多個有相同名字的方法,但這些方法或者參數個數不同或者按順序參數的類型不同。
4.構造方法
構造方法是一種特殊的方法,這種方法的名與它的類名相同,并且不返回結果,也不寫上void關鍵字。構造方法的作用是創(chuàng)建類的對象,并給對象初始化。構造方法是公共方法,但程序不能顯式調用構造方法。程序運行時,當有對象要創(chuàng)建時,由系統(tǒng)自動調用構造方法。如果類的聲明沒有定義構造方法,系統(tǒng)就增補一個沒有參數的默認構造方法。
3.2.2對象
類被聲明后,就可用類創(chuàng)建對象,被創(chuàng)建的對象稱為類的實例。程序使用對象需依次經歷4個步驟:聲明對象、創(chuàng)建對象、使用對象和撤銷對象。
1.聲明對象
由于類是一種引用類型,聲明對象只是命名一個變量,這個變量能引用類的對象。由于對象還沒有創(chuàng)建,所以也暫不要為對象分配內存。
-8-
2.創(chuàng)建對象
創(chuàng)建對象就是為對象分配內存,為對象分配內存也稱類的實例化。一般形式為:
new構造方法([參數表])
對象創(chuàng)建的兩個步驟也可一起完成,一般格式為:
類名對象名=new構造方法([參數表])
3.對象的內存模型
Java語言將類型分成基本類型和引用類型兩種。
第2章介紹的整型、浮點型、字符型等是基本類型,程序引用這種類型的變量,采用直接訪問形式。
在Java語言中,數組類型和類類型是引用類型。程序訪問引用類型的變量采用間接訪問方式。
程序使用對象有多種情況:或為對象設置狀態(tài)、或獲取對象的狀態(tài)、或改變對象的狀態(tài)、或應用對象的某種方法。前三種需要訪問對象的成員變量,最后一種要調用對象的方法。程序通過操作符“.”對某對象的成員變量進行訪問和方法調用。一般形式為:
對象名.成員變量
對象名.方法([參數表])
3.2.3實例變量和類變量
類的成員變量又分為實例變量和類變量。在定義成員變時,用關鍵字static修飾的是類變量,定義時未用static修飾的是實例變量。
類變量是類的所有對象共享的成員變量,一個類變量在類中只有一個,它屬于整個類,而不屬于類的某個對象。引用類變量途徑有兩條,或通過類,或通過對象,格式如下:
類名.類變量名或對象名.類變量名
不同對象的實例變量將被分配不同的內存空間。
改變類的某一個對象的實例變量值不會影響其他對象的實例變量。
類變量的內存只有一處,讓類的所有對象共享。從類的任一對象改變類變量,類的其他對象都能發(fā)現(xiàn)這個改變。
3.2.4實例方法和類方法
如同類的成員變量有實例變量和類變量兩種一樣,類的方法也有兩種:實例方法和類方法。在方法定義時,冠以修飾字static的方法稱為類方法,沒有冠以static修飾字的方法是實例方法。
類中的實例方法可以互相調用,并可調用類方法。類方法也能相互調用。但不能直接調用實例方法,除非類方法引入局部對象,然后通過局部對象調用實例方法。另外,類方法能直接引用類變量,不能引用實例變量。實例方法可引用實例變量,也可引用類變量。
實例方法可以訪問類變量和當前對象的實例變量。實例方法必須通過對象調用,不能通過類名調用。類方法只能訪問類變量,不能夠訪問實例變量。類方法除了可以通過實例對象調用之外,還可以通過類名調用。
3.2.5訪問權限
訪問權限實現(xiàn)訪問控制。在類的成員中引入訪問權限控制,保護類的成員不在非期望的情況下被引用。
在類的聲明中,除了類中方法總能訪問類的成員變量外,Java語言為其他類的方法訪問本類成員變量和方法,提供以下4種訪問權限:
public:設置沒有限制的訪問權限,其他類的方法都能訪問。
private:設置最強的訪問權限,其他類的方法都不能訪問。
protected:只限子類或者同一包中的類的方法能訪問。
<default>:(無修飾,友好的)只允許同一包中的類的方法訪問。
1.public(共有)
類的成員變量被設置成public訪問權限,則類外的任何方法都能訪問它。
-9-
2.private(私有)
類的成員變量被設置成private訪問權限,則類外的任何方法都不能訪問它。
3.protected(受保護)
受保護訪問權限是一種公有權限和私有權限之間的訪問權限。若在類A的聲明中,成員x被定義成是受保護的,則類A的子類和與類A同一包中的別的類可以訪問類A的受保護成員x;但對于不是類A的子類且與類A不在同一包中別的類來說,不可訪問受保護成員x。
4.友好變量和友好方法
沒有修飾的成員變量和方法稱為友好變量和友好方法。與保護訪問權限比較,如果只允許同一包中的相關類的方法訪問,不讓類的子類和其他類的方法訪問時,可設置成友好變量和友好方法。
3.2.6繼承
繼承是面向對象語言的重要機制。借助繼承,可以擴展原有的代碼,應用到其他程序中,而不必重新編寫這些代碼。在Java語言中,繼承是通過擴展原有的類,聲明新類來實現(xiàn)的。擴展聲明的新類稱為子類,原有的類稱為超類(父類)。繼承機制規(guī)定,子類可以擁有超類的所有屬性和方法,也可以擴展定義自己特有的屬性,增加新方法和重新定義超類的方法。
Java語言不支持多重繼承,限定一個類只能有一個超類。在子類聲明中加入extends子句來指定超類。
類聲明時,如果缺省extends子句,未指定超類,則該類的超類是系統(tǒng)聲明的類
Java.lang.Object。
子類對父類的繼承性,Java語言作以下規(guī)定:
子類自然地繼承其父類中不是private的成員變量作為自己的成員變量,并且自然地繼承父類中不是private的方法作為自己的方法。
超類方法在子類中隱藏稱為重寫,或置換。當子類中定義的成員變量和超類中的成員變量同名時,超類的成員變量同樣會在子類中被隱藏。子類對成員變量的隱藏和方法的重寫可以把超類的狀態(tài)和行為改變?yōu)樽陨淼臓顟B(tài)和行為。對于子類對象,如果子類重寫了超類的方法,則子類對象調用這個方法時,調用子類方法。如果子類繼承了超類的方法(未重寫),則會調用超類方法。
1.多態(tài)性
面向對象語言規(guī)定,子類對象也是超類對象,凡超類對象可以應用的地方,子類對象也適用。編譯時暫不綁定調用哪個方法,必須在運行時才綁定調用方法的技術稱為動態(tài)聯(lián)編。而代碼根據執(zhí)行時實際對象的類型不同,調用同名的不同方法,是面向對象語言的一種多態(tài)性。解決這種多態(tài)性必須采用動態(tài)聯(lián)編技術。
重載能由調用時提供的參數個數和參數的類型順序,在編譯時就能確定被調用的方法,這種多態(tài)性不需要動態(tài)聯(lián)編技術的支持。
2.多層繼承
繼承聲明的新類,又可被其他類再繼承,從而構成多層繼承。
3.多層繼承中構造方法的調用順序
構造方法的調用順序與類的繼承順序一致,從最高層次的超類開始,按繼承順序調用各類的構造方法。如果子類的構造方法要調用超類的構造方法,給從超類繼承的成員變量初始化,用代碼super(參數)
3.2.7Java面向對象的其他機制
1.final類、final方法和final變量
final的意義是最終的,用于修飾類、方法和變量,其意思是“不能改變”。禁止改變可能是考慮到“設計”和“效率”兩個方面。
在類聲明之前用final修飾,聲明類是final類,final類是不能被再繼承的類,即它不能再有子類。
-10-
用final修飾方法,聲明該方法不能被子類的方法覆蓋。或是為了給方法“上鎖”,防止任何子類改變它的本來含義;或是為了提高執(zhí)行效率,編譯器可以將這個方法的所有調用都能用“嵌入代碼”實現(xiàn),即用方法體代碼的副本來替換方法調用。
用final修飾變量,聲明該變量的值不能被改變。不能被改變的變量相當于一個常量。final變量主要用于以下兩個方面:或是一個編譯期的常數,它永遠不會改變;或在初始化后,不希望它現(xiàn)改變。
final局部變量在定義時可以暫不設定初值,但是一經初始化,以后就不能再改變。常用final聲明常量,常量名習慣全部用大寫字母命名。
2.abstract類和abstract方法
abstract類稱為抽象類。抽象類只聲明一種模板,沒有具體實現(xiàn)代碼的類。只有它的子類才可能是有實際意義的類。所以,抽象類不可能有實例。
abstract方法稱為抽象方法。抽象方法只能出現(xiàn)在抽象類,抽象方法沒有實現(xiàn)的代碼。如果一個類是抽象類的子類,則必須具體實現(xiàn)超類的抽象方法。抽象類可以沒有抽象方法但有抽象方法的類一定是抽象類。
3.關鍵字super
子類隱藏了超類的成員變量或者覆蓋了超類方法后,利用關鍵字super,子類方法可以引用超類的成員變量和被覆蓋的方法。使用super有3種情況:使用super調用超類的構造方法,使用super調用超類被子類覆蓋的方法;使用super訪問超類被子類隱藏的成員變量。
4.關鍵字this
關鍵字this用來指對象自己。this的作用有多種,例如,將對象自己作為參數,調用別的方法;當方法的局部變量隱藏成員變量時,利用this引用成員變量;構成函數內調用另一構造函數等。
5.類之間的is-a和has-a關系
在兩個相關的類之間,例如,類A和類B,可能會有is-a和has-a關系。類A是繼承擴展類B,則子類A和超類B之間是is-a關系,類B的所有成員類A也有,類A也是一個類B。如果類A的某個成員變量的類型是B,則類A和類B之間是has-a關系,即類A包含有類B。類A中成員變量b的類型是B。
6.內部類(innerclass)
Java語言也允許在類聲明內部嵌套類聲明。嵌套的類可以是靜態(tài)的或者是非靜態(tài)的。靜態(tài)類不能直接引用其包含類的成員,必須實例化,所以不經常使用。
非靜態(tài)的嵌套類,需要進行事件處理,非常流行。
3.3接口
Java程序中的類只能繼承一個類,這種繼承稱為單繼承。Java語言雖不允許一個類繼承多個類,但允許一個類實現(xiàn)多個接口。接口(Interface)有與類相似的基本形式。接口有常量定義和方法定義,但沒有方法的實現(xiàn)代碼。可以將接口想象為一個“純”抽象類。接口給出每個方法的規(guī)范:方法的名稱、返回值類型、參數個數與參數類型。
類除了能繼承一個類之外,還可實現(xiàn)多個接口。這樣,對有繼承并實現(xiàn)接口的類來說,實際上有了多個超類,實現(xiàn)有控制的多重繼承。
接口是一種只由常量定義和抽象方法組成的特殊類。用public修飾的接口是公共接口,可被所有的類和接口使用;而沒有public修飾的接口只能被同一個包中的其他類和接口使用。接口體中的內容是一系列常量定義和方法定義。
其中方法定義是一種方法聲明,不提供方法的實現(xiàn)(沒有方法體),用分號“;”結尾。方法的實現(xiàn)在“使用”這個接口的各個類中,故稱使用接口的類為接口的實現(xiàn)。
接口的所有變量都默認為是finalstatic屬性;所有的方法都默認為是publicabstract屬性。
一個類通過使用關鍵字implements聲明自己使用一個或多個接口。實現(xiàn)多個接口時,接口名之間用逗號隔開。
-11-
如果一個類要實現(xiàn)某個接口,那么這個類必須實現(xiàn)該接口的所有方法,為這些方法提供實現(xiàn)的方法體。在實現(xiàn)接口的方法時,方法的名字、返回值類型、參數個數及類型必須與接口中定義的方法完全一致,并一定要用public修飾。
3.4基本類
Java語言為一些基本類型設有對應的基本類,如下表所示。
基本類型值與對應基本類對象能相互轉換??梢岳靡韵滦问降幕绢悩嬙旆椒?,由基本類型值得到對應基本類對象:
public基本類(基本類型v)
例如,以下代碼得到一個Integer對象,其值是123。
Integern=newInteger(123);
也可以由基本類對象得到基本類型值。實現(xiàn)方法如以下例子所示:
設有Double類對象dObj,Boolean類對象bObj,代碼:
doubled=dObj.doubleValue()
使得dObj對象的值賦值給double類型變量d。
代碼:
booleanb=bObj.booleanValue()
bObj對象的值賦值給boolean類型變量b。類似的代碼可以用于其他基本類對象與對應的基本類型變量。
3.5Java小應用程序基礎
Java小應用程序即JavaApplet,是嵌入在Web頁上供瀏覽器運行的程序,可放在服務器上供客戶端下載使用。小應用程序的主要功能是顯示圖形、動畫、播放聲音、響應用戶事件等。每個小應用程序都得繼承Java.applet.Applet類。
為了系統(tǒng)的安全,對小應用程序有一定限制:不能調用本地的應用程序和運行時的動態(tài)連接庫;不能訪問本地文件,如讀、寫文件;除原小應用程序所在的位置(站點)外,不能再做網絡連接與WWW建立聯(lián)系,不能獲得任何有關系統(tǒng)設置的信息。
1.小應用程序的建立和運行
一個小應用程序從建立到運行需經歷4個步驟:
(1)用Java語言編寫小應用程序的源程序。
小應用程序由若干類組成,在源程序中必須有一個類繼承Java.applet.Applet類,這個類是小應用程序的主類。小應用程序的主類,用public關鍵字修飾。小應用程序的源文件名必須與它的主類名完全相同。
(2)把小應用程序的源程序編譯成字節(jié)碼.class文件。
如果源文件有多個類,那么經編譯后將生成多個.class文件。
(3)將小應用程序的字節(jié)碼文件嵌入在Web頁中,設計一個指定小應用程序的HTML文件.html。
(4)在支持Java的瀏覽器上運行。
-12-
或用觀察器appletviewer,或用瀏覽器Netscape、HotJava、IE等。如果采用某個Java開發(fā)環(huán)境,也可在開發(fā)環(huán)境下執(zhí)行小應用程序。
2.Applet類的基本方法
(1)init()方法
初始化,由瀏覽器載入內存時調用init()方法,該方法只運行一次。其用途是創(chuàng)建所需要的對象、設置初始狀態(tài)、裝載圖像、設置參數等。
(2)start()方法
初始化后,緊接著調用start()方法,啟動小應用程序主線程,或當用戶從小應用程序所在的Web頁面轉到其他頁面,然后又返回時,start()方法將再次被調用。
(3)stop()方法
當瀏覽器離開小應用程序所在的頁面轉到其他頁面時,調用stop()方法,掛起小應用程序的執(zhí)行。
(4)destroy()方法
當關閉瀏覽器時,系統(tǒng)調用destroy()方法,結束小應用程序的生命,關閉線程序釋放對象資源。
(5)paint(Graphicsg)方法
該方法用于在屏幕窗口上顯示某些信息。如文字、色彩、背景和圖像等。當小應用程序啟動時,瀏覽器產生一個Graphics類的對象,供小應用程序使用,并以參數g傳遞給方法paint()。小應用程序可以把g理解為一支畫筆。
(6)repaint()方法
為在Java頁面上顯示動態(tài)效果,需要repaint()方法,該方法先清除paint()方法以前所畫的內容,然后再調用paint()方法。
(7)update()方法
調用repaint()方法時,系統(tǒng)會自動調用update()方法。update(Graphicsg)方法是從父類Applet繼承來的,該方法的功能是清除paint()方法以前所畫的內容,然后再調用paint()方法。小應用程序重寫update()方法,可以達到特定的要求。
3.小應用程序的生命周期(執(zhí)行過程)
(1)下載并實例化小應用程序,系統(tǒng)調用init()方法。
(2)啟動,系統(tǒng)調用start()方法。
(3)小應用程序暫停執(zhí)行,或因Browser轉向其他網面,或小應用程序調用stop()方法,或小應用程序執(zhí)行paint(Graphicsg)方法。
(4)重新啟動,或重新進入小應用程序所在頁面,重新激活小應用程序,或小應用程序執(zhí)行paint(Graphicsg)方法完成。
(5)終止,或退出瀏覽器,或執(zhí)行destroy()消亡方法。
4.小應用程序數據輸入輸出
小應用程序的數據輸入有多種方式。從圖形界面的文本框、文本區(qū)中輸入;也可以采用系統(tǒng)標準輸入;還可以由HTML文件中的參數導入。
4.1數組
數組是將一組相同類型的數據順序存儲,組成一種復合數據類型。數組的特點主要是:一個數組中的所有元素的數據類型相同,數組中的元素連續(xù)順序存儲,數組中每個元素按存儲順序對應一個下標,下標從0開始順序編號,引用數組元素通過數組名和它的下標確定。數組有一維數組和多維數組之分,數組元素的下標個數確定數組的維數。
4.1.1一維數組
數組元素只有一個下標的數組是一維數組。
1.聲明一維數組
在Java語言中,數組是一種引用類型,數組名如同對象名一樣,是一種引用。聲明數組是聲明一個標識符能引用數組,只要指定數組元素的類型。聲明一維數組有兩種格式:
-13-
數組元素類型數組名[];或者數組元素類型[]數組名;
其中數組元素類型可以是任意的Java數據類型(包括類)。
2.創(chuàng)建一維數組
創(chuàng)建數組就是為數組分配存儲空間,需指定數組長度。數組創(chuàng)建后,數組名就標識用于存儲數組元素的存儲空間。創(chuàng)建一維數組的方法有3種:
(1)先聲明后創(chuàng)建
創(chuàng)建數組代碼的一般形式為
數組名字=new數組元素類型[元素個數];
例如,代碼:
intintArray[];//聲明數組intArray
intArray=newint[5];//創(chuàng)建數組intArray有5個元素,元素下標自0~4
(2)在聲明時創(chuàng)建
把聲明數組和創(chuàng)建數組的代碼結合在一起。例如,
代碼:
intintArry[]=newint[5];
(3)直接賦值創(chuàng)建
在聲明數組時,直接給出數組的初值。例如代碼:
int[]intArray={1,2,3,4,5};
直接賦值創(chuàng)建數組的方法也稱為數組初始化。
前兩種方法創(chuàng)建數組時,系統(tǒng)會給數組元素提供默認初始值:數值型數組元素的默認初值是0;char類型數組元素的默認初值是全0代碼字符;布爾類型數組元素的默認初值是false。在Java語言中,所有數組都有一個成員length,程序可以訪問它,獲得數組的元素個數,但不能改變它。
3.引用一維數組元素
引用一維數組元素代碼的一般形式為
數組名[下標]//引用一維數組元素
數組下標可以是整型常數,或者是整型表達式。
數組下標范圍是0到數組名.length-1。為了確保程序安全性,Java運行系統(tǒng)會對數組下標自動進行范圍越界檢查。如果發(fā)現(xiàn)下標越界,系統(tǒng)將發(fā)生異常。
4.數組是一種引用類型
數組也是一種引用類型,一個數組名在不同時間可引用不同的數組。
4.1.2多維數組
數組元素有多個下標的數組就是多維數組。
1.聲明二維數組
聲明二維數組的一般形式有以下3種:
數型數組名[][]
數型[][]數組名
類型[]數組名[]
2.創(chuàng)建二維數組
創(chuàng)建二維數組對象的方法有多種:
(1)直接分配(平衡二維數組———矩陣)。
例如,以下代碼創(chuàng)建一個3行5列的矩陣:
intmyTowArray[][]=newint[3][5];
(2)從最高維開始,分別對每一維分配不等長的空間(非平衡的數組)。
inta[][]=newint[3][];//創(chuàng)建第一維,確定有3個子數組
a[0]=newint[4];//第一個子數組有4個元素
a[1]=newint[5];//第2個子數組有5個元素
-14-
a[2]=newint[2];//第3個子數組有2個元素
(3)直接賦值創(chuàng)建
聲明二維數組,同時直接給出各子數組的元素。如果子數組的元素個數不同,則創(chuàng)建的是一個非平衡的二維數組。
3.引用二維數組
二維數組元素的引用方法是:
數組名[下標1][下標2]
4.使用二維數組要注意的問題
對于二維數組,要注意以下兩點:(1)二維數組名.length和二維數組名[下標1].length的區(qū)別。二維數組名.length是二維數組的子數組個數;二維數組名[下標1].length是指定子數組的元素個數。
(2)二維數組名[下標]是一維數組。
4.2字符串
字符串是由0個或多個字符組成的序列,Java語言提供兩個用于處理字符串的類:String類用于處理不可改變的字符串。
StringBuffer類用于處理可改變的字符串。
4.2.1字符串常量
字符串常量是用雙引號括起來的一個字符串。在Java語言中,字符串常量是匿名的String對象。
4.2.2字符串聲明和創(chuàng)建
如同一般用類聲明和創(chuàng)建對象一樣,可用String類聲明和創(chuàng)建字符串。
利用String類的構造方法可以創(chuàng)建字符串對象,String類的構造方法有:
(1)String(),創(chuàng)建一個空字符串對象。
例如:
s=newString();
(2)String(Stringstr),根據給定的字符串str創(chuàng)建符串對象。
例如:利用字符串常量創(chuàng)建字符串:
s=newString(”Iamastudent.”);
或簡寫成:
s=”Iamastudent.”;
字符串聲明和創(chuàng)建也可一起完成:
Strings=newstring(”Iamastudent.”);
以下代碼用字符串對象創(chuàng)建新字符串:
StringnewStr=newString(s);
上述代碼使字符串newStr與字符串s的內容相同,
但是,它們是兩個字符串。
(3)String(chara[],根據字符數組a創(chuàng)建一個字符串。
(4)String(chara[],intstartIndex,intcharNum),根據字符數組的起始下標位置以及字符個數創(chuàng)建字符串。
例如,以下代碼輸出3456。
chara[]={’1’,’2’,’3’,’4’,’5’,’6’,’7’};
Stringa=newString(a,2,4);
System.out.println(s);
4.2.3字符串基本操作
Java語言為便于程序使用字符串,為字符串提供非常豐富的操作。
(1)字符串連接
-15-
字符串有一個連接運算符+,得到連接兩個字符串的結果;一個連接方法concat(Strings),實現(xiàn)復制參數s字符串的內容,連接在字符串對象之后,得到一個新的字符串。
(2)獲取字符串的長度
length()方法可以獲取一個字符串的長度。
字符串常量也可以使用length()方法獲得長度。
(3)字符串前綴或后綴的比較
用booleanstartsWith(Strings)方法判斷一個字符串的前綴是否為字符串s。
用booleanendsWith(Strings)方法判斷一個字符串的后綴是否為字符串s。
(4)比較兩個字符串是否相同
用booleanequals(Strings)方法比較某字符串是否與字符串s相同。
注意兩字符串比較與兩個字符串引用對象比較的區(qū)別。比如,表達式strl.equals(str2)與表達式strl==str2的差異。前者表示所引用的兩個字符串的內容是否相同,后者表示str1與str2是否引用同一個對象。
用booleanequalsIgnoreCase(Strings)方法,忽略大小寫比較某字符串是否與字符串s相同。
用intcompareTo(Stringanother)方法按字典順序與參數another字符串比較大小。
用intcompareToIgnoreCase(Strings)方法,忽略大小寫,按字典順序與參數s字符串比較大小。
(5)字符串檢索
用String類中的方法intindexOf(Strings)或intindexOf(Strings,intstartpoint)實現(xiàn)字符串檢索。前一個方法是從指定字符串的頭開始檢索參數字符串s,返回字符串s首次出現(xiàn)的位置。后一個方法則在指定字符串中從某個位置開始檢索參數字符串s,返回字符串s首次出現(xiàn)的位置。如果沒有檢索到,則返回-1。
(6)取字符串的子串
使用string類中的方法:
Stringsubstring(intstartpoint),
Stringsubstring(intstartpoint,intend);
其中startpoint是字符串的開始下標,end是截止下標。子串是從開始下標開始,至截止下標的前一個下標為止范圍內的子串。
(7)替換字符串中的某字符得到一個新字符串
使用String類中的方法Stringreplace(charoldChar,charnewChar)
用參數newChar指定的字符替換s中由oldChar指定的所有字符,產生一個新的字符串。
(8)去掉前后空格得到一個新字符串
方法trim()可以去掉字符串的前后空格。
(9)基本類型值的字符串表示
例如,設有double類型變量d,boolean類型變量b,代碼:
StringdStr=String.valueOf(d);
StringbStr=String.valueOf(b);
分別將數值和邏輯值轉換成字符串。
(10)字符串得到基本類型對象
字符串能轉換成基本類對象。例如,代碼:DoubledObj=Double.valueOf(”1234.567”)。將字符串轉換成Double類的對象。類似地,可以將字符串轉換到其他基本類對象。
(11)字符串得到基本類型值
1)字符串轉化為整型值
字符串轉化為int類型值用Integer.parseInt(Strings)方法。
2)字符串轉化為實型值
字符串轉化為float類型值用Float.parseFloat(Strings)方法。
-16-
字符串轉化為double類型用代碼Double.parseDouble(Strings)方法。
4.2.4StringTokenizer類
Java.util包中的類StringTokenizer用于語言符號(單詞)的分析。要分析出字符串中的單詞,可用StringTokenizer類的構造方法,由給定的字符串構造一個StringTokenizer對象,StringTokenizer對象稱作字符串分析器。然后利用取一個單詞方法nextToken(),結合循環(huán),從字符串分析器中逐一取出單詞。
用hasMoreTokens()方法控制循環(huán),只要字符串中還有語言符號,該方法就返回true,否則返回false。
調用countTokens()方法能得到字符串分析器中一共有多少個單詞。
StringTokenizer類有兩個常用構造方法:
StringTokenizer(Strings),為字符串s構造一個分析器。使用默認的分隔符集合,即空格符(若干個空格被看作一個空格)、換行符、回車符、Teb符、進紙符。
StringTokenizer(Strings,Stringdelim),為字符串s構造一個分析器,以字符串參數delim中的字符作為分隔符。
4.2.5字符串與字節(jié)數組
在許多應用中,字符流信息存于字節(jié)數中,為了進行字符串處理,可利用字節(jié)數組創(chuàng)建字符中對象。以下是兩個常用的用字節(jié)數組構造字符串的構造方法:
(1)String(byte[]b),使用默認字節(jié)字符對應表,由字節(jié)數組構造一個字符串對象。
(2)Strin(byte[]b,intoffset,intlength),使用默認字節(jié)字符對應表,由字節(jié)數組的一部分,即從數組起始位置offset開始取length個字節(jié)構造一個字符串對象。String類也提供實例方法getBytes():
byte[]getBytes(),使用默認字節(jié)字符對應表將字符串轉化為字節(jié)數組。
4.2.6對象的字符串表示
Object類有方法StringtoSting(),一個對象通過調用該方法可以獲得該對象的字符串表示。以Java.util包中Date類為例,Date對象用于存儲時間,時間的字符串表示的默認順序是:星期、月、日、小時、分、秒、年。
另外,System類提供的靜態(tài)方法longcurrentTimeMillis()能獲取系統(tǒng)當前時間,這個時間是從1970年1月1日0點到目前時刻所經歷的毫秒數。
5.1圖形界面設計基礎
現(xiàn)代程序要求使用圖形用戶界面(GraphicalUserInterface,GUI),界面中有菜單、按鈕等,用戶通過鼠標選擇菜單中的選項和點擊按鈕,命令程序執(zhí)行功能模塊。本章學習如何用Java語言編寫CUI程序,如何通過GUI實現(xiàn)輸入和輸出。
5.1.1AWT和Swing
先前用Java編寫GUI程序,是使用抽象窗口工具包AWT(AbstractWindowToolkit)?,F(xiàn)在多用Swing。
Swing可以看作是SWT的改良版,而不是代替AWT,是對AWT的提高和擴展。所以,在寫GUI程序時,Swing和AWT都要使用。它們共存于Java基礎類(javaFoundationClass,jFC)中。
盡管AWT和Swing都提供了構造圖形界面元素的類,但它們的重要方面有所不同:AWT依賴于主平臺繪制用戶界面組件;而Swing有自己的機制,在主平臺提供的窗口中繪制和管理界面組件。Swing與AWT之間的最明顯的區(qū)別是界面組件的外觀,AWT在不同平臺上運行相同的程序,界面的外觀和風格可能會有一些差異。然而,一個基于Swing的應用程序可能在任何平臺上都會有相同的外觀和風格。
Swing中的類是從AWT繼承的,有些Swing類直接擴展AWT中對應的類。例如,jApplet、jDialong、jFrame和jWindow。
使用Swing設計圖形界面,主要引入兩個包:
Javax.swing包含Swing的基本類;Java.awt.event包含與處理事件相關的接口和類。
-17-
5.1.2組件和容器
組件(Component)是圖形界面的基本元素,用戶可以直接操作,例如按鈕。容器
(Container)是圖形界面的復合元素,容器可以包含組件,例如面板。
Java語言為每種組件都預定義類,程序通過它們或它們的子類創(chuàng)建各種組件對象。Java語言也為每種容器預定義類,程序通過它們或它們的子類創(chuàng)建各種容器對象。
為了統(tǒng)一管理組件和容器,為所有組件類定義超類Component類,把組件的共有操作都定義在Component類中。同樣,為所有容器類定義超類Container類,把容器的共有操作都定義在Container類。例如,Container類中定義了add()方法,大多數容器都可以用add()方法向容器添加組件。
Component、Container和Graphics類是AWT庫中的關鍵類,為能層次地構造復雜的圖形界面,容器被當作特殊的組件,可以把容器放入另一個容器中。例如,把若干按鈕和文本框分放在兩個面板中,再把這兩個面板和另一些按鈕放入窗口中。這種層次地構造界面的方法,能以增量的方式構造復雜的用戶界面。
5.1.3事件驅動程序設計基礎
1.事件、監(jiān)視器和監(jiān)視器注冊
圖形界面上的事件是指在某個組件上發(fā)生用戶操作。對事件作監(jiān)視的對象稱為監(jiān)視器,監(jiān)視器提供響應事件的處理方法。為了讓監(jiān)視器與事件對象關聯(lián)起來,需要對事件對象作監(jiān)視器注冊,告訴系統(tǒng)事件對象的監(jiān)視器。
2.實現(xiàn)事件處理的途徑
Java語言編寫事件處理程序主要有兩種方案:一個是程序重設方法handleEvent
(Eventevt),采用這個方案的程序工作量稍大一些。另一個方案是程序實現(xiàn)一些系統(tǒng)設定的接口。
Java.awt.event包中用來檢測并對事件做出反應的模型包括以下三個組成元素:
(1)源對象:事件“發(fā)生”在這個組件上,它與一組“偵聽”該事件的對象保持著聯(lián)系。
(2)監(jiān)視器對象:是一個實現(xiàn)預定義的接口的類的一個對象,該對象的類要提供對發(fā)生的事件作處理的方法。
(3)事件對象:它包含描述當事件發(fā)生時從源傳遞給監(jiān)視器的特定事件的信息。
3.事件類型和監(jiān)視器接口
在Java語言中,為了便于系統(tǒng)管理事件,也為了便于程序作監(jiān)視器注冊,系統(tǒng)將事件分類,稱為事件類型。
系統(tǒng)為每個事件類型提供一個接口。要作為監(jiān)視器對象的類必須實現(xiàn)相應的接口,提供接口規(guī)定的響應事件的方法。
每個事件類型都有一個相應的監(jiān)視器接口,實現(xiàn)監(jiān)視器接口的類必須實現(xiàn)所有定義在接口中的方法。
5.2框架窗口
窗口是GUI編程的基礎,小應用程序或圖形界面的應用程序的可視組件都放在窗口中。在GUI中,窗口是用戶屏幕的一部分。起著在屏幕中一個小屏幕的作用。
有以下三種窗口:
(1)Applet窗口,Applet類管理這個窗口,當小應用程序啟動時,由系統(tǒng)創(chuàng)建和處理。
(2)框架窗口(jFrame),這是通常意義上的窗口,它支持窗口,它支持窗口周邊的框架、標題欄,以及最小化、最大化和關閉按鈕。
(3)一種無邊框窗口(jWindow),沒有標題欄,沒有框架,只是一個空的矩形。用Swing中的jFrame類或它的子類創(chuàng)建的對象就是jFrame窗口。
jFrame類的主要構造方法:
(1)jFrame(),創(chuàng)建無標題的窗口對象。
(2)jFrame(Strings),創(chuàng)建一個標題名是字符串s的窗口對象。
jFrama類的其他常用方法:
-18-
(1)setBounds(intx,inty,intwidth,intheight)
(2)setSize(intwidth,intheight)
(3)setBackground(Colorc)
(4)setVisible(booleanb)
(5)pack()
(6)setTitle(Stringname)
(7)getTitle()
(8)setResizable(booleanm)
Swing里的容器都可以添加組件,除了jPanel及其子類(如jAppelet)之外,其他的Swing容器不允許把組件直接加入。
用Swing編寫GUI程序時,通常不直接用jFrame創(chuàng)建窗口對象,而用jFrame派生的子類創(chuàng)建窗口對象,在子類中可以加入窗口的特定要求和特別的內容等。
顯示顏色由Java.awt包的Color類管理,在Color類中預定義了一些常用的顏色。
5.3標簽、按鈕和按鈕事件
標簽和按鈕也許是圖形界面中最常見的兩種組件,按鈕又總是與激發(fā)動作事件有關。
5.3.1標簽
標簽(jLabel)是最簡單的Swing組件。標簽對象的作用是對位于其后的界面組件作說明??梢栽O置標簽的屬性,即其前景顏色、背景顏色、字體等等,但不能動態(tài)地編輯標簽中的文本。程序關于標簽的基本內容有以下幾個方面:
(1)聲明一個標簽名。
(2)創(chuàng)建一個標簽對象。
(3)將標簽對象加入到某個容器
jLabel類的主要構造方法是:
(1)jLabel()
(2)jLabel(Strings)
(3)jLabel(Strings,intalign)
對齊方法有三種,以下三個常量分別表示顯示文字左對齊、中心對齊和右對齊。
jLabel.LEFT、jLabel.CENTER、jLabel.RIGHT
5.3.2按鈕
按鈕(jButton)在界面設計中用激發(fā)動作事件。按鈕可顯示文本,當按鈕被激活時(鼠標點擊),能激發(fā)動作事件。
jButton類的常用構造方法有:
(1)jButton()
(2)jButton(Strings)
jButton類的其他常用方法有:
(1)setLabel(Strings)
(2)getLabel()
(3)setMnemonic(charmnemonic)
(4)setToolTipText(Strings)
(5)setEnabled(booleanb)
(6)setRolloverEnabled(booleanb)
(7)addActionListener(ActionListeneraL)
(8)removeActionListener(ActionListeneraL)
在處理事件的方法中,用獲得事件源信息的方法獲得事件源信息,并判斷和完成相應處理。獲得事件源的方法有:方法getSource()獲得事件源對象;方法getActionCommand()獲得事件源按鈕的文字信息。
-19-
用鼠標點擊按鈕產生事件對象,將事件送達監(jiān)視對象,這個過程稱為激發(fā)事件。當一個事件被送到監(jiān)視器對象時,監(jiān)視器對象實觀的接口方法被調用,調用時系統(tǒng)會提供事件對象的參數。程序中雖然沒有調用監(jiān)視器方法的代碼,但是程序做了兩件事:第一,指定哪一個對象是監(jiān)視器,它將響應由按鈕激發(fā)的事件,這個步驟稱為監(jiān)視器注冊。第二,必須定義一個方法,當事件送到監(jiān)視器時,這個方法將被調用。程序中沒有調用這個方法的代碼,這個調用是系統(tǒng)執(zhí)行的。
5.4面板
面板有兩種,一種是普通面板jPanel,另一種是滾動面板jScrollPane。
5.4.1jPanel
面板(jPanel)是一種通用容器,jPanel的作用是實現(xiàn)界面的層次結構,在它上面放入一些組件,也可以在上面繪畫,將放有組件和有畫的jPanel再放入另一個容器里。jPanel的默認布局為FlowLayout。
5.4.2jScrollPane
當一個容器內放置了許多組件,而容器的顯示區(qū)域不足以同時顯示所有組件時,如果讓容器帶滾動條,通過移動滾動條的滑塊,容器中其他位置上的組件就能看到。滾動面板jScrollPane能實現(xiàn)這樣的要求,jScrollPane是帶有滾動條的面板。jScrollPane是Container類的子類,也是一種容器,但是只能添加一個組件。
jScrollPane的一般用法是先將一些組件添加到一個jPanel中,然后再把這個jPanel添加到jScrollPane中。
這樣,從界面上看,在滾動面板上,好像也有多個組件。在Swing中,像jTextArea、
jList、jTable等組件都沒有自帶滾動條,都需要將它們放置于滾動面板,利用滾動面板的滾動條,瀏覽組件中的內容。
5.5布局設計
在界面設計中,一個容器要放置許多組件,為了美觀,為組件安排在容器中的位置,這就是布局設計。java.awt中定義了多種布局類,每種布局類對應一種布局的策略。常用的有以下布局類:
FlowLayout,依次放置組件。
BorderLayout,將組件放置在邊界上。
CardLayout,將組件像撲克牌一樣疊放,而每次只能顯示其中一個組件。
GridLayout,將顯示區(qū)域按行、列劃分成一個個大小相等的格子,組件依次放入這些格子中。GridBagLayout,將顯示區(qū)域劃分成許多矩形小單元,每個組件可占用一個或多個小單元。其中GridBagLayout能進行精細的位置控制。每個容器都有一個布局管理器,由它來決
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 撫順師范高等??茖W校《國際貿易實務實驗》2023-2024學年第二學期期末試卷
- 鄭州旅游職業(yè)學院《結構力學》2023-2024學年第二學期期末試卷
- 煙臺市龍口市2025年五下數學期末考試試題含答案
- 教育產品銷售部員工培訓
- 護理不良事件安全課件
- 電纜過水施工方案
- 信息技術 第二冊(五年制高職)課件 9.3.4 智能翻譯系統(tǒng)
- 信息技術 第二冊(五年制高職)課件 8.3.2 自定義函數
- 江蘇省鎮(zhèn)江市丹陽市2024-2025學年高一下學期3月月考化學試題(含答案)
- 收費站收費員業(yè)務知識解答
- 校服采購投標方案(技術標)
- 兒童壓力性損傷評估量表與預防措施
- 高中數學開放題賞析
- 品質部工作計劃
- 《浙江省工業(yè)建設項目用地控制指標》(修訂)
- 微生物課件(老師版) 1.流感病毒
- 旅行社運營實務電子課件 2.3 辦理旅游交易手續(xù)
- 屁股-也許是最重要的學習器官-主題微班會
- 市政工程施工工期定額(定稿)
- 2023年大學生《思想道德與法治》考試題庫附答案(712題)
- 檢驗檢測機構開展新檢驗項目建議審批表
評論
0/150
提交評論