自考JAVA語言程序設計一串講筆記_第1頁
自考JAVA語言程序設計一串講筆記_第2頁
自考JAVA語言程序設計一串講筆記_第3頁
自考JAVA語言程序設計一串講筆記_第4頁
自考JAVA語言程序設計一串講筆記_第5頁
已閱讀5頁,還剩88頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

自考語言程序設計(一)串講筆記

1.1Java語言的特點

Java語言最初的應用對象是消費性電子產品。最

初的名字是0ak語言。

Java語言是適用于分布式計算環境的面向對象編程語

言,它雖類似于C和C++,但比C++簡單,忽略了許多為

提高計算效率但初學者較難掌握的程序語言特性。

Java語言主要有以下特點:

①強類型。

②編譯和解釋:Java語言是一種高級編程語言,用

Java語言編寫的源程序在計算機上運行需要經過編譯

和解釋執行兩個嚴格區分的階段。Java的編譯程序先

將Java的源程序翻譯成與機器無關的字節碼,不是通常

的編譯程序將源程序翻譯成特定計算機的機器代碼。

運行時,Java的運行系統裝載和鏈接需要執行的類,并

作必要的優化后,解釋執行字節碼程序。

③自動無用內存回收功能,沒有指針,數組元素都

要檢查下標是否越界。

④面向對象。

?1?第1章Java語言基礎

⑤與平臺無關:在任何平臺上,Java源程序被Java

編譯器譯成虛擬機能夠識別的字節碼。這樣,只要有

Java虛擬機的平臺,就能解釋執行Java字節碼程序,從

而實現Java程序與平臺無關。

⑥安全性。

⑦分布式計算。

⑧多線程。

1.2Java應用程序和小應用程序

Java程序可以是獨立的應用程序,也可以是能在瀏

覽器上執行的小應用程序(App1et)。兩種Java程序都

由一個或多個擴展名為class”的文件組成,而且都需

要Java虛擬機(JVM)載入并翻譯。

兩種程序的主要區別是:

①小應用程序只能在與Java兼容的容器中運行,可

以嵌入在HTML網頁內,在網絡上發布,當網頁被瀏覽

時,在瀏覽器中運行,小應用程序的運行還受到嚴格的安

全限制,例如:它不能訪問用戶計算機上的文件。Java應

用程序沒有這些限制,也不支持網頁嵌入和下載運行。

②小應用程序和應用程序在代碼編寫上也有很大

差異。一個小應用程序必須定義成一個App1et類的子

類。應用程序可以是App1et類的子類,也可以不是。應

用程序必須在一個類中定義一個main()方法,該方法代

表應用程序的入口。而小應用程序不必定義main()方

,2?Java語言程序設計(一)

法,它的執行由App1et類中定義的多個方法控制。

Java源程序命名受到嚴格的限制:

Java源程序的擴展名必須是java”,而源程序經過

編譯后得到的應用程序文件名(即字節碼文件)的主文

件名和源程序中的類名一樣,而擴展名是c1ass"。如

果源文件中多個類,那么最多只能有一個Pub1ic類;如

果源文件中有Pub1ic類,那么源文件的名字必須與這個

類的名字完全相同。如果源文件沒有Pub1ic類,那么源

文件的名字只要和某一個類的名字相同即可。

Java程序中經常會出現注釋。注釋是程序中的說

明文字,用于幫助閱讀程序,它不是語句,不會影響程序

的執行效率。

Java語言的注釋有三種形式:

①行注釋(//):用于簡短地說明前面代碼的意義或

功能。注釋內容到行末,不能跨行。

②塊注釋(/.............../):是多行注釋,用于說

明下面程序段的算法、功能等,塊注釋不可嵌套使用。

③文檔注釋(/................./):能被實用程序(命

令)javad。c接受,由它能自動生成程序的HTML文檔。

1.3Java程序的開發過程(以下以SUN公司的

JavaJDK為例)

對于Java應用程序,先編寫Java源程序,源程序經

Java編譯器(javac.exe)編譯后產生字節碼文件,最后由

Java解釋器(java.exe)解釋執行字節碼文件。

?3?第1章Java語言基礎

對于小應用程序,先編寫Java源程序,源程序經Ja

va編譯器編譯后產生字節碼文件,最后由Web瀏覽器

(appletviewer.exe)解釋執行字節碼文件。

編譯器和解釋器的使用格式是:

javac[選項]源文件(其中源文件是java文件)

java[選項]類名[參數](類名指定的必須是含有

main()方法的類,即是一個Java應用程序)

通常情況下用的比較多的開發環境有Ec1ipse,

JBui1der等。

1.4標識符和關鍵字

Java語言使用Unicode字符集,共有65535個字符。

Java標識符用于命名程序對象。

Java語言的標識符可以按以下規則任意命名:

①由字母(包括英文字母、下劃線字符、美元字符、

文字字符)和數字組成。

②限定標識符的第一個字符不能是數字字符。

除了按上述規則命名標識符外,另外還有命名的習

慣約定(行業習慣,不是規定):一般變量名、方法名用小

寫英文字母開頭,類名首字母用大寫字母,若命名由若

干個單詞組成,后面的每個單詞用大寫開頭;文字和常

數全用大寫字母命名;包名全部用小寫字母。

Java關鍵字:關鍵字是一些英文單詞,在語言中,關鍵

字已經被賦予特定的意義,不能用這些關鍵字作為標識符

,4?Java語言程序設計(一)

命名程序對象。關鍵字全部由小寫字母組成。每個關鍵字

在程序中出現,均有特定位置和特定使用方法的要求。

1.5基本數據類型

Java語言是強類型語言,每個變量和表達式都有確

定的類型,在變量賦值時要進行類型兼容性檢驗。

數據類型可分為非基本數據類型和基本數據類型

兩大類。

非基本類型也稱為復合數據類型,是由基本類型組合

的新類型。非基本數據類型分為:數組、字符串、類、接口。

基本數據類型也稱為原始數據類型,是系統預先規

定的一些常用類型。它們是:整數類型、浮點數(實數)

類型、字符(文字)類型、邏輯類型(布爾型)。

①邏輯類型用關鍵字boo1ean標識,所以也稱為布

爾型。邏輯類型只有真(true)和假(false)兩個值。

②字符類型用關鍵字char標識。字符型數據是一

個字符,內部表示是字符的Unicode代碼,共有65535個

不同的字符。在Java程序中,字符常量有普通字符常量

(用單引號括住一個字符)和轉義字符常量(用'開頭后

跟特定字符或字符串)兩種。

③整數類型是指不帶小數點和指數的數值數據。

由于計算機只能表示整數的一個子集,表達更大范圍內

的整數需要更多的二進制位,Java語言將整數數據按數

值范圍大小不同分成四種:基本型用關鍵字int標識,4

?5?第1章Java語言基礎

個字節,32位,取值范圍是一231—231—1;短整型用關鍵

字sh。rt標識,2個字節,16位,取值范圍是一215—215—

1;字節型用關鍵字bvte標識,1個字節,8位,取值范圍

是一27?27—1;長整型用關鍵字long標識(或者在常數

后加L或1標識),8個字節,64位,取值范圍是一263?

263-10每種整數類型處理不同范圍的整數值,并且都

是帶符號的。

整型常量有十進制、八進制(以數字符0開頭)和十

六進制(以0x開頭)三種寫法。

④浮點數類型也稱為實型,浮點數是帶小數點或指數

的數值數據。Java語言的浮點數有單精度和雙精度兩種。

單精度型用關鍵字f1oat標識,占4個字節,32位。

F1oat型常量的書寫方法是在實數之后加上字母F或f。

雙精度用關鍵字doub1e標識,占8個字節,64位。

double型常量的書寫方法有兩種:一種寫法是直接寫一

個實數,或在實數后加字母D或d。另一種是科學計數

法,用10的方幕(用字符e或E表示暴底10)。

,6?Java語言程序設計(一)

2.1數據運算

Java語言的基本運算可分成以下幾類:賦值運算、

算術運算、自增和自減運算、關系運算、邏輯運算、條件

運算和字符串連接運算等。

2.1.1賦值運算

在Java語言中符號是賦值運算符不是“相等”運

算符(相等運算符是“=="見關系運算符的敘述)賦值運

算分為兩類:一是簡單賦值運算;二是復合賦值運算。

1.簡單賦值運算

簡單賦值運算的一般形式如下:

變量表達式

賦值運算的執行過程是:

(1)計算賦值運算符右端的表達式。

(2)當賦值運算兩側的類型不一致時,將表達式值

的類型自動轉換成變量的類型。

(3)將表達式的值賦值給變量,即存儲到與變量對

應的存儲單元中。

這里的類型轉達換是指數值數據的類型自動轉換,

這樣的自動轉換只能是簡單類型向復類型轉換,不能從

?7?第2章運算和語句

復雜的轉換成簡單的。即如下所示的從左到右轉換。

byte-shortint1ong-f1oatdoub1e

Java語言約定賦值運算也有值,它的值就是賦予變

量的值,因此,賦值運算的結果可以繼續賦值。

intj;

doub1ey=2.0;

y=j=3;〃j的值為3,y的值為3.0

賦值運算符結合性“自右至左”當連續有多個賦值

運算時,是從右至左逐個賦值。

2.復合賦值運算

這類運算的特殊性點是:變量即要參與運算,又要

接受賦值。為避免對同一個變量的地址重復,計算引入

復合賦值運算符。常用的復合賦值運算符有:+=、

—=、=、/=、%=。

2.1.2算術運算

算術運算要求運算分量的類型是數值類型的(整數

類型和浮點數類型)。運算時,只需一個運算分量的是

單目運算,需兩個運算分量的是雙目運算。特別的:

(1)“/”為除法運算符,當除數和被除數均為整數類型

數據時,則結果也是整數類型數據。例如7/4的結果為1。

(2)“%”為求余數運算符,求余數運算所得結果的符

號與被除數的符號相同。例如5%3的結果為2,—5%3的

結果為的結果為3。

,8?Java語言程序設計(一?)

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++;〃1的結果為5,j的結果為4

i=4;j=!!i;〃i結果為3,j的結果為3

i=4;j=i!!;//i結果為3,j的結果為4

上述例子說明,對變量采用自增(或自減),用前綴

形式或用后綴形式,對變量本身來說,效果是相同的,但

表達式的值不相同。前綴形式是變量運算之后的新值,

后綴形式是變量運算之前的值.

自增自減運算能使程序更為簡潔和高效,但在使用

?9?第2章運算和語句

時需注意“++”和“!!”運算的運算對象只能是變量,

不能是常量或表達式.例如,4++或(i+j)++都是不

合法的.

2.1.4關系運算

關系運算對左右兩側的值進行比較,如果比較運算

的結果成立,則值為true,不成立為false。

關系運算符的優先級別不完全相同。V、<=、>、

>=的優先級高于==、!=o

關系運算符的優先級低于算術運算符的優先級。

2.1.5邏輯運算

邏輯運算用來描述表達式,實現連續多個條件的邏

輯與、邏輯或、邏輯否定的判定。有3個邏輯運算符:

〃〃(邏輯與)、||(邏輯或)、!(邏輯否定)

其中:運算符"'和”是雙目運算符,運算符!是

單目運算符。邏輯運算的操作數必須是布爾型的,結果

也是布爾型的。

邏輯否定“!”的優先級高于算術運算符的優先級。

邏輯與“〃〃”和邏輯或”的優先級低于關系運算符

的優先級。

需要特別指出的是,邏輯與和邏輯或運算符有以下

性質,Java語言利用這些性質,在進行連續的邏輯運算

時,不分邏輯與和邏輯或的優先級進行計算,而是順序

進行邏輯與和邏輯或的計算,一旦邏輯子表達式或邏輯

,01?Java語言程序設計(一)

表達式能確定結果,就不再繼續計算。

(1)對表達式ab,當a為fa1se時,結果為

false,不必再計算b;僅當a為true時,才需計算b。

(2)對表達式a||b,當a為true時,結果為true,不

必再計算b;僅當a為fa1se時,才需計算b。

例如:設有a=b=c=1,計算++a>=lII++b<

++c。從左到右順序計算邏輯或表達式,先計算子表

達式++a>=l,變量a的值變為2,++a>=l為

true,整個邏輯表達式的值已經為true,不再計算右邊的

子表達式++bV++c。因而,變量b和變量c的值不

變,仍為1。

2.1.6條件運算(?:)

條件運算是一個三目運算符,一般形式為:邏輯表

達式?表達式1:表達式2

2.1.7其他運算

1.位運算

位運算的運算分量只能是整型數據,位運算把運算

對象看作是由二進制位組成的位串,逐位完成指定的運

算,得到一個新的位串。

位運算符有4個,按優先級從高到低順序,依次為:

~(位反)、&(位與)、"(位異或)、I(位或)

用位運算的組合可以用來描述各種特殊的位串運

算。例如,位運算表達式

?11?第2章運算和語句

((k-1)-)&k

能取下非0的整型變量k的最右邊為1的那一位。

2.移位運算

移位運算是將整數作為二進制位的位串向左或向

右移動。移位運算符有三個,它們是:

左移運算符(<V)、算術右移運算符(>>)、邏輯

右移運算符(>>>)

移位運算有兩個運算分量,左運算分量為移位的數

據對象,右運算分量的值為移位位數。移位運算符的優

先級低于算術算符,高于關系運算符,它們的結合方向

是自左至右。

Java語言允許數值型數據混合運算,不同類型的數

值數據混合運算時需要類型轉換。對于數據表示字節

數少的類型數據轉換成數據表示字節數較多的類型數

據,系統能自動實現轉換。反之,例如,將一個1。ng類數

據轉換成int型數型,這種數據類型轉換必須采用類型

強制轉換。類型強制轉換稱作造型(cast),書寫格式為:

(類型)表達式

2.2語句

在Java語言中,語句分為基本語句、控制結構語句

以與package語句和import語句等。其中控制結構語

句包括復合語句、if語句、switch語句、循環語句和

try...catch語句。其中循環語句有while語句、d

0...

?21?JaVa語言程序設計(一)

whi1e語句、for語句三種。

2.2.1基本語句

基本語句主要有表達式語句、空語句、break語句、

continue語句、return語句等。

1.表達式語句

在賦值表達式、自增自減表達式和方法調用表達式

之后加上分號即變成語句,稱它們是表達式語句。

另一個典型的表達式語句是方法調用表達式之后

接上分號。

2.空語句

空語句是只有一個分號的語句,其形式為

爰際上,空語句是什么也不做的語句。語言引入空

語句是出于以下實用上的考慮。例如,循環控制結構的

句法需要一個語句作為循環體,當要循環執行的動作由

循環控制部分完成時,就不需要有一個實際意義的循環

體,這時就需要用一個空語句作為循環體。另外,語言引

入空語句使序列中連續出現多個分號不再是一種錯誤,

編譯系統遇到這種情況,就認為單獨的分號是空語句。

3.break語句

break語句必須出現在多路按值選擇結構或循環結

構中。break語句的執行強制結束它所在的控制結構,

讓程序從這個控制結構的后繼語句繼續執行。

?31?第2章運算和語句

4.continue語句

continue語句只能出現在循環結構中,continue語

句的執行將忽略它所在的循環體中在它之后的語句。

簡單地說,continue語句提早結束當前輪次循環,進入下

一輪次循環。

222復合語句

在Java語言中,用花括號括住一個順序執行的計算

步驟序列描述順序結構,這樣的順序結構稱作復合語

句。復合語句中的每個計算步驟可以是單個語句,也可

以是一個控制結構,特別情況也可以為空。

2.2.3if語句

有兩種選擇控制結構:兩路條件選擇結構(用計語

句描述)和多路按值選擇結構。

2.2.4switch語句

在Java語言中,用switch語句描述多路按值選擇結

構。switch語句包含一個表達式,用于按表達式值的不

同作相應選擇。另外,還有一系列由case開頭的子句和

一個可選用的defau1t開頭的子句,每個子句有一個可能

為空的語句序列。

正確編寫switch語句有以下幾個要求:

(1)switch后面括號內的表達式的類型只限于

char、int、short和byte。

(2)所有case后的常量表達式的值互不相同,類型

,41?Java語言程序設計(一)

與switch后括號內的表達式類型一致。

(3)語句序列由任意條合法的JaVa語句構成,也可

以沒有語句。

(4)defau1t子句可以缺省,但至多出現一次,習慣總

是將它寫在所有case子句之后,如有必要也可寫在某個

case子句之前。

(5)如果要使各種情況互相排斥,僅執行一個子句

的語句序列,每個子句都需要以break語句結束。

2.2.5try...catch語句

Java語言提供了一種稱為異常的機制協助程序報

告和處理錯誤。程序不必用特別的語句對異常預先進

行檢測,而是當異常真的發生時,系統會拋出一個異常。

這時,程序的正常流程被中斷,系統會自動進入程序預

先設定的異常處理代碼塊執行。這個代碼塊或者能嘗

試從錯誤中恢復,或者輸出必要的信息后終止程序,防

止異常錯誤的影響進一步擴大。

要使程序能完成異常處理,需要給出可能會產生異

常的代碼塊,以與異常發生時處理這個異常的代碼塊。

在Java語言中,用try...catch語句指定可能會發生異

常的代碼塊和錯誤處理代碼塊。try...catch語句由try

引導,由try標識一個可能會發生異常的語句塊,用

cateh標識一個處理某種異常的語句塊,如果發生這異

常,中斷程序正常的執行流程,直接執行處理異常的語

?51?第2章運算和語句

句塊。最后,為了適應各種可能,另用fina11y標識一個

無論try塊中語句異常是否發生都會執行的語句塊。下

面是try...catch語句的一般形式:

try(

語句塊//執行該語句塊,可能會發生異常

}catch(異常類型e){

異常發生時要執行的語句塊

}fina11y{

無論異常發生與否,都要執行的語句塊

2.2.6while語句

whi1e語句用于描述whi1e循環,whi1e循環結構由

一個循環條件和一個作為循環體的語句組成,whi1e循

環的語義是當條件成立時重復執行指定的循環體。

2.2.7do...whi1e語句

do...whi1e語句用于描述do...whi1e循環。d

o...

whi1e循環也由一個循環條件和一個循環體組成。

d0...whi1e循環的語義是重復執行指定的循環體,直至

條件不成立結束循環。

注意,最后的分號是do...whi1e循環結構的結束

符,不能省略。

2.2.8for語句

循環之前要為變量置初值,在循環過程中循環變量

,61?Java語言程序設計(一)

逐一變化的循環計算結構,稱為for循環。for循環包含

四部分,為循環有關變量賦初值的表達式1、控制循環條

件的表達式2、實現循環計算的語句,稱作循環體,以與

循環體執行后為有關變量更新的表達式3,

for循環控制結構用for語句描述,foI■語句的一般

形式為

for(表達式1;表達式2;表達式3)

2.2.9嵌套的循環結構

當循環結構的循環體中又包含循環結構時,循環結

構就呈嵌套的形式。

2.2.10循環體中的continue語句和break語句

循環體中的continue語句和break語句用于改變循

環原有語句執行流程。其中c。ntinue語句的作用是結束

當前一輪循環(跳過本輪循環的剩余語句),直接進入下一

輪循環。continue語句出現在for循環中,跳至表達式3

的計算,更新循環變量。continue語句出現在whi1e和do

-whi1e循環中,跳至循環條件的計算和測試。

break語句的作用是從循環體內跳出至循環的后繼

語句,即強行中斷當前循環。

2.2.11package語句

在Java語言中,程序包相當于其他語言的函數庫。

除了系統提供大量程序包外,程序員也可將自己編寫的

類組成程序包,以便以后像使用系統程序包一樣使用它

?71?第2章運算和語句

們。程序包聲明稱為Package語句,格式如下:

package包名;

Package語句必須出現在源程序文件的起始行,表示

出現在該文件中的所有類都屬于這個程序包。如果有多

個源程序的程序包聲明使用相同的包名,則表示這些源

程序文件中的全部類都屬于這個程序包。包名是一個目

錄名,其中也可以有路徑。如果源程序文件的首行沒有

Package語句,則被默認為是無名包,存于當前目錄中。

2.2.12import語句

import語句用來引入所需要的類。import語句的

格式為:

import包名.類名;

importjava.uti1.Date;//只是引入Date類

如果要從一個包中引入多個類,則可以用通配符

“"。例如,以下代碼從java.awt包中引入awt目錄層

次的所有類。

importjava.awt.;//從java,awt包中引入所

有的類

在一個Java源程序中可以有多個import語句,它

們必須出現在Package語句之后,類的定義之前。

JavaAPI的類被組織成多個包,它們常被Java程序

引入使用:

java.applet包含所有支持Javaapp1et的類

java.awt包含抽象窗口工具集中的圖形、文本、窗

,81?Java語言程序設計(一)

口GUI類

javax.wing是java.awt包的擴充,包含更豐富的

抽象窗口工具集

java.awt.image包含抽象窗口工具集中的圖像處理類

java,lang包含所有的基本語言類

java,io包含所有的輸入輸出類

java.net包含所有實現網絡功能的類

java,util包含有用的實用庫程序類

java.awt.peer平臺無關的GUI工具集界面

3.1面向對象的基本概念

1.抽象

抽象(Abstraction)是程序設計中最經常使用的技

術之一,因為抽象是有效控制程序復雜性的重要手段。

程序設計中利用抽象,在面向過程階段,系統按函數和

模塊進行設計。在面向對象階段,利用抽象按類設計。

類是目前支持抽象的最好工具。

2.對象

在面向對象語言中,對象的名稱用于程序引用對

象,對象的成員變量,用于存儲對象的狀態信息,對象的

?91?第3章面向對象編程基礎

方法用于描述對象的行為。

3.消息

在程序系統中,對象之間的交互通過相互發送消息

(Message)實現。

4.類

統一給出同類對象的各項屬性和能提供的所有行

為,避免程序逐一描述同類中的每個對象的所有屬性與

詳細給出對象的每個方法的描述,把同一類對象的所有

共同的屬性和行為放在一起描述。這種聲明對象共有

屬性和行為的機制稱為類。類的聲明定義了類的所有

對象的共有屬性和方法。類是對一組相同對象的描述,

類概括了同類對象的共有性質:數據和方法。類的每個

對象都有自己的標識,但它們具有相同的一組屬性和提

供相同的一組方法。

5.繼承

除對象按類劃分外,不是同一類的對象可能會在某

些相似性。繼承(Inheritance)就是在已有類的基礎上,

擴充屬性,或擴充與改寫其某些方法,生成新的類,這個

方式稱為繼承。繼承定義的類稱為子類,被繼承的類稱

為超類(父類),子類自動含有父類具有的屬性和方法。

繼承具有傳遞性。超類聲明定義共同的特征,子類繼承

超類的共有特性,還可增加某些特殊性,并可擴充和修

正部分行為。采用繼承聲明定義的子類可以有父類的

屬性和方法,也可以增加新的屬性和方法,并可以對父

,02?Java語言程序設計(一)

類的某些方法給出新年的定義。繼承的最大好處是對

象能按層次劃分,并在子類中,與父類相同的屬性和方

法可以不再重復聲明。繼承體現了面向對象方法與現

實世界中人們的抽象思維方式保持一致。

6.多態性

多態性(Polymorphism)有多種表現形式,這里所說

的多態性是指類型適應性多態性,這來自繼承,不同繼

承層次的對象同樣的方法有不同的實現。類型適應性

多態要求能自動按對象的實際類型正確調用它的方法。

類型適應性的多態性需要采用動態聯編(DynamicBind

ing)技術實現。

聯編是將發送給對象的消息與含執行該消息方法的

對象連接起來。當聯編在編譯和連接階段實現時,這樣

的聯編過程稱為靜態聯編;當聯編推遲至運行時間實現

時,該聯編過程稱為動態聯編。動態聯編是面向對象語

言必須具有的一種能力,是實現上述多態性的技術基礎。

3.2Java的類和對象

3.2.1類

類是一種類型,類封裝對象的屬性和方法,是同一

類對象的模板。Java程序的主要部分是描述類。

1.類的聲明

聲明一個新類的基本格式如下:

c1ass類名//聲明新類的基本格式

?12?第3章面向對象編程基礎

類體

}

其中關鍵字C1ass引導一個類的聲明,類名是一個

標識符。類體給出類的成員變量定義和方法定義,類體

中不能有獨立的執行代碼,所有的執行代碼只能出現在

方法中。

2.成員變量

成員變量定義的一般形式為:[修飾字]類型變

量名;

其中;修飾字可以空缺,修飾字用于對成員變量限

制其訪問權限,成員的訪問權限有4種,private,protec

ted、pub1ic和友好的,變量的類型可以是任何數據類型,

變量的名字是一個標識符。Java中成員變量的名字可

以與類的方法的名字相同。

成員變量對類內定義的方法都有效。類的方法也

可定義變量,這種變量稱為局部變量,局部變量只在定

義它的方法中有效。

3.方法

方法給出對象的行為,方法聲明的一般形式如下:

返回值類型方法名(類型參數名,...,類型參數名)

{

方法體

?22?Java語言程序設計(一)

返回值類型聲明方法返回值的數據類型。如果方

法無返回值,就用V0id關鍵字。方法可以沒有參數,多

個參數用逗號分隔,參數類型可以是任何數據類型。

如果某方法中的參數名或局部變量名與類的成員

變量名相同,則成員變量在這個方法內暫時被隱藏。

如果成員變量在方法內被隱藏,又在方法中要引用成

員變量,必須使用this,thiS表示調用該方法的當前對象。

在JaVa程序中,類的方法可以重載。方法重載是指

在一個類中定義多個有相同名字的方法,但這些方法或

者參數個數不同或者按順序參數的類型不同。

4.構造方法

構造方法是一種特殊的方法,這種方法的名與它的

類名相同,并且不返回結果,也不寫上void關鍵字。構

造方法的作用是創建類的對象,并給對象初始化。構造

方法是公共方法,但程序不能顯式調用構造方法。程序

運行時,當有對象要創建時,由系統自動調用構造方法。

如果類的聲明沒有定義構造方法,系統就增補一個

沒有參數的默認構造方法。

3.2.2對象

類被聲明后,就可用類創建對象,被創建的對象稱

為類的實例。程序使用對象需依次經歷4個步驟:聲明

對象、創建對象、使用對象和撤銷對象。

1.聲明對象

?32?第3章面向對象編程基礎

由于類是一種引用類型,聲明對象只是命名一個變

量,這個變量能引用類的對象。由于對象還沒有創建,

所以也暫不要為對象分配內存。

2.創建對象

創建對象就是為對象分配內存,為對象分配內存也

稱類的實例化。一般形式為:

new構造方法([參數表])

對象創建的兩個步驟也可一起完成,一般格式為:

類名對象名=new構造方法([參數表])

3.對象的內存模型

Java語言將類型分成基本類型和引用類型兩種。

第2章介紹的整型、浮點型、字符型等是基本類型,程序

引用這種類型的變量,采用直接訪問形式。

在Java語言中,數組類型和類類型是引用類型。程

序訪問引用類型的變量采用間接訪問方式。

程序使用對象有多種情況:或為對象設置狀態、或

獲取對象的狀態、或改變對象的狀態、或應用對象的某

種方法。前三種需要訪問對象的成員變量,最后一種要

調用對象的方法。程序通過操作符“.”對某對象的成員

變量進行訪問和方法調用。一般形式為:

對象名.成員變量

對象名.方法([參數表])

3.2.3實例變量和類變量

類的成員變量又分為實例變量和類變量。在定義

?42?Java語言程序設計(一)

成員變時,用關鍵字Static修飾的是類變量,定義時未用

static修飾的是實例變量。

類變量是類的所有對象共享的成員變量,一個類變

量在類中只有一個,它屬于整個類,而不屬于類的某個

對象。引用類變量途徑有兩條,或通過類,或通過對象,

格式如下:

類名.類變量名或對象名.類變量名

不同對象的實例變量將被分配不同的內存空間。

改變類的某一個對象的實例變量值不會影響其他對象

的實例變量。

類變量的內存只有一處,讓類的所有對象共享。從類

的任一對象改變類變量,類的其他對象都能發現這個改變。

3.2.4實例方法和類方法

如同類的成員變量有實例變量和類變量兩種一樣,

類的方法也有兩種:實例方法和類方法。在方法定義

時,冠以修飾字static的方法稱為類方法,沒有冠以stat

ic修飾字的方法是實例方法。

類中的實例方法可以互相調用,并可調用類方法。

類方法也能相互調用。但不能直接調用實例方法,除非

類方法引入局部對象,然后通過局部對象調用實例方

法。另外,類方法能直接引用類變量,不能引用實例變

量。實例方法可引用實例變量,也可引用類變量。

實例方法可以訪問類變量和當前對象的實例變量。

?52?第3章面向對象編程基礎

實例方法必須通過對象調用,不能通過類名調用。類方

法只能訪問類變量,不能夠訪問實例變量。類方法除了

可以通過實例對象調用之外,還可以通過類名調用。

3.2.5訪問權限

訪問權限實現訪問控制。在類的成員中引入訪問

權限控制,保護類的成員不在非期望的情況下被引用。

在類的聲明中,除了類中方法總能訪問類的成員變量

外,Java語言為其他類的方法訪問本類成員變量和方

法,提供以下4種訪問權限:

public:設置沒有限制的訪問權限,其他類的方法都

能訪問。

private:設置最強的訪問權限,其他類的方法都不

能訪問。

protected:只限子類或者同一包中的類的方法能

訪問。

<defau1t>:(無修飾,友好的)只允許同一包中的

類的方法訪問。

1.pub1ic(共有)

類的成員變量被設置成Pub1iC訪問權限,則類外的

任何方法都能訪問它。

2.private(私有)

類的成員變量被設置成Private訪問權限,則類外的

任何方法都不能訪問它。

?62?Java語言程序設計(一)

3.protected(受保護)

受保護訪問權限是一種公有權限和私有權限之間的

訪問權限。若在類A的聲明中,成員x被定義成是受保

護的,則類A的子類和與類A同一包中的別的類可以訪

問類A的受保護成員X;但對于不是類A的子類且與類A

不在同一包中別的類來說,不可訪問受保護成員X。

4.友好變量和友好方法

沒有修飾的成員變量和方法稱為友好變量和友好

方法。與保護訪問權限比較,如果只允許同一包中的相

關類的方法訪問,不讓類的子類和其他類的方法訪問

時,可設置成友好變量和友好方法。

3.2.6繼承

繼承是面向對象語言的重要機制。借助繼承,可以

擴展原有的代碼,應用到其他程序中,而不必重新編寫

這些代碼。在Java語言中,繼承是通過擴展原有的類,

聲明新類來實現的。擴展聲明的新類稱為子類,原有的

類稱為超類(父類)。繼承機制規定,子類可以擁有超類

的所有屬性和方法,也可以擴展定義自己特有的屬性,

增加新方法和重新定義超類的方法。

Java語言不支持多重繼承,限定一個類只能有一個

超類。在子類聲明中加入extends子句來指定超類。

類聲明時,如果缺省extends子句,未指定超類,則

該類的超類是系統聲明的類java.lang.Object。

?72?第3章面向對象編程基礎

子類對父類的繼承性,Java語言作以下規定:

子類自然地繼承其父類中不是Private的成員變量

作為自己的成員變量,并且自然地繼承父類中不是Pri

vate的方法作為自己的方法。

超類方法在子類中隱藏稱為重寫,或置換。當子類

中定義的成員變量和超類中的成員變量同名時,超類的

成員變量同樣會在子類中被隱藏。子類對成員變量的隱

藏和方法的重寫可以把超類的狀態和行為改變為自身的

狀態和行為。對于子類對象,如果子類重寫了超類的方

法,則子類對象調用這個方法時,調用子類方法。如果子

類繼承了超類的方法(未重寫),則會調用超類方法。

1.多態性

面向對象語言規定,子類對象也是超類對象,凡超

類對象可以應用的地方,子類對象也適用。

編譯時暫不綁定調用哪個方法,必須在運行時才綁

定調用方法的技術稱為動態聯編。而代碼根據執行時

實際對象的類型不同,調用同名的不同方法,是面向對

象語言的一種多態性。解決這種多態性必須采用動態

聯編技術。

重載能由調用時提供的參數個數和參數的類型順

序,在編譯時就能確定被調用的方法,這種多態性不需

要動態聯編技術的支持。

2.多層繼承

繼承聲明的新類,又可被其他類再繼承,從而構成

?82?Java語言程序設計(一)

多層繼承。

3.多層繼承中構造方法的調用順序

構造方法的調用順序與類的繼承順序一致,從最高

層次的超類開始,按繼承順序調用各類的構造方法。如

果子類的構造方法要調用超類的構造方法,給從超類繼

承的成員變量初始化,用代碼super(參數)

3.2.7Java面向對象的其他機制

1.final類、final方法和final變量

final的意義是最終的,用于修飾類、方法和變量,其

意思是“不能改變”。禁止改變可能是考慮到“設計”和

“效率”兩個方面。

在類聲明之前用final修飾,聲明類是fina1類,fina

類是不能被再繼承的類,即它不能再有子類。

用fina1修飾方法,聲明該方法不能被子類的方法覆

蓋。或是為了給方法“上鎖”,防止任何子類改變它的本

來含義;或是為了提高執行效率,編譯器可以將這個方

法的所有調用都能用“嵌入代碼”實現,即用方法體代碼

的副本來替換方法調用。

用fina1修飾變量,聲明該變量的值不能被改變。不

能被改變的變量相當于一個常量。final變量主要用于

以下兩個方面:或是一個編譯期的常數,它永遠不會改

變;或在初始化后,不希望它現改變。

final局部變量在定義時可以暫不設定初值,但是一

?92?第3章面向對象編程基礎

經初始化,以后就不能再改變。

常用fina1聲明常量,常量名習慣全部用大寫字母命名。

2.abstract類和abstract方法

abstract類稱為抽象類。抽象類只聲明一種模板,

沒有具體實現代碼的類。只有它的子類才可能是有實

際意義的類。所以,抽象類不可能有實例。

abstract方法稱為抽象方法。抽象方法只能出現在

抽象類,抽象方法沒有實現的代碼。如果一個類是抽象

類的子類,則必須具體實現超類的抽象方法。抽象類可

以沒有抽象方法但有抽象方法的類一定是抽象類。

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

?03?Java語言程序設計(一)

和超類B之間是is—a關系,類B的所有成員類A也有,

類A也是一個類B。

如果類A的某個成員變量的類型是B,則類A和類

B之間是has-a關系,即類A包含有類B。類A中成員

變量b的類型是B。

6.內部類(innerclass)

Java語言也允許在類聲明內部嵌套類聲明。嵌套

的類可以是靜態的或者是非靜態的。靜態類不能直接

引用其包含類的成員,必須實例化,所以不經常使用。

非靜態的嵌套類,需要進行事件處理,非常流行。

3.3接口

Java程序中的類只能繼承一個類,這種繼承稱為單

繼承。Java語言雖不允許一個類繼承多個類,但允許一

個類實現多個接口。接口(Interface)有與類相似的基本

形式。接口有常量定義和方法定義,但沒有方法的實現

代碼。可以將接口想象為一個“純”抽象類。接口給出

每個方法的規范:方法的名稱、返回值類型、參數個數與

參數類型。

類除了能繼承一個類之外,還可實現多個接口。這

樣,對有繼承并實現接口的類來說,實際上有了多個超

類,實現有控制的多重繼承。

接口是一種只由常量定義和抽象方法組成的特殊

類。用pub1ic修飾的接口是公共接口,可被所有的類和

?13?第3章面向對象編程基礎

接口使用;而沒有Pub1iC修飾的接口只能被同一個包中

的其他類和接口使用。

接口體中的內容是一系列常量定義和方法定義。

其中方法定義是一種方法聲明,不提供方法的實現(沒

有方法體),用分號“;”結尾。方法的實現在“使用”這個

接口的各個類中,故稱使用接口的類為接口的實現。

接口的所有變量都默認為是fina1static屬性;所有

的方法都默認為是pub1icabstract屬性。

一個類通過使用關鍵字imp1ements聲明自己使用一個

或多個接口。實現多個接口時,接口名之間用逗號隔開。

如果一個類要實現某個接口,那么這個類必須實現

該接口的所有方法,為這些方法提供實現的方法體。在

實現接口的方法時,方法的名字、返回值類型、參數個數

與類型必須與接口中定義的方法完全一致,并一定要用

pub1ic修飾。

3.4基本類

Java語言為一些基本類型設有對應的基本類,如下

表所示。

基本類型對應的基本類基本類型對應的基本類

booleanBooleanintlnteger

charCharacter1ongLong

byteBytefloatFloat

shortShortdoubleDoub1e

?23?Java語言程序設計(一)

基本類型值與對應基本類對象能相互轉換。可以利用

以下形式的基本類構造方法,由基本類型值得到對應基

本類對象:

pub1ic基本類(基本類型V)

例如,以下代碼得到一個Integer對象,其值是123。

Integern=newlnteger(123);

也可以由基本類對象得到基本類型值。實現方法

如以下例子所示:

設有Double類對象d0bj,Boolean類對象b0bj,

代碼:

doub1ed=dObj.doubleValue()

使得d。bj對象的值賦值給double類型變量do

代碼:

boo1eanb=bObj.booleanValue()

b0bj對象的值賦值給boo1ean類型變量b。類似的

代碼可以用于其他基本類對象與對應的基本類型變量。

3.5Java小應用程序基礎

Java小應用程序即JavaApplet,是嵌入在Web頁

上供瀏覽器運行的程序,可放在服務器上供客戶端下載

使用。小應用程序的主要功能是顯示圖形、動畫、播放

聲音、響應用戶事件等。每個小應用程序都得繼承java.

applet.Applet類。

為了系統的安全,對小應用程序有一定限制:不能

?33?第3章面向對象編程基礎

調用本地的應用程序和運行時的動態連接庫;不能訪問

本地文件,如讀、寫文件;除原小應用程序所在的位置

(站點)外,不能再做網絡連接與WWW建立聯系,不能

獲得任何有關系統設置的信息。

1.小應用程序的建立和運行

一個小應用程序從建立到運行需經歷4個步驟:

(1)用Java語言編寫小應用程序的源程序。

小應用程序由若干類組成,在源程序中必須有一個

類繼承java.applet.Applet類,這個類是小應用程序的

主類。小應用程序的主類,用pub1ic關鍵字修飾。小應

用程序的源文件名必須與它的主類名完全相同。

(2)把小應用程序的源程序編譯成字節碼.class

文件。

如果源文件有多個類,那么經編譯后將生成多個

.class文件。

(3)將小應用程序的字節碼文件嵌入在Web頁中,

設計一個指定小應用程序的HTML文件.htm1o

(4)在支持Java的瀏覽器上運行。

或用觀察器appletviewer,或用瀏覽器Netscape.

Hotjava、IE等。如果采用某個Java開發環境,也可在開

發環境下執行小應用程序。

2.Applet類的基本方法

(1)init()方法

初始化,由瀏覽器載入內存時調用init()方法,該方

?43?Java語言程序設計(一)

法只運行一次。其用途是創建所需要的對象、設置初始

狀態、裝載圖像、設置參數等。

(2)start()方法

初始化后,緊接著調用start()方法,啟動小應用程

序主線程,或當用戶從小應用程序所在的Web頁面轉到

其他頁面,然后又返回時,start()方法將再次被調用。

(3)stop()方法

當瀏覽器離開小應用程序所在的頁面轉到其他頁

面時,調用stop()方法,掛起小應用程序的執行。

(4)destroy()方法

當關閉瀏覽器時,系統調用destroy()方法,結束小

應用程序的生命,關閉線程序釋放對象資源。

(5)paint(Graphicsg)方法

該方法用于在屏幕窗口上顯示某些信息。如文字、

色彩、背景和圖像等。當小應用程序啟動時,瀏覽器產

生一個Graphics類的對象,供小應用程序使用,并以參

數g傳遞給方法Paint()。小應用程序可以把g理解為

一支畫筆。

(6)repaint()方法

為在java頁面上顯示動態效果,需要repaint()方

法,該方法先清除Paint()方法以前所畫的內容,然后再

調用paint()方法。

(7)update()方法

調用repaint()方法時,系統會自動調用update()方

?53?第3章面向對象編程基礎

法。update(Graphicsg)方法是從父類App1et繼

承來

的,該方法的功能是清除Paint()方法以前所畫的內容,

然后再調用Paint()方法。小應用程序重寫update()方

法,可以達到特定的要求。

3.小應用程序的生命周期(執行過程)

(1)下載并實例化小應用程序,系統調用init()方法。

(2)啟動,系統調用start()方法。

(3)小應用程序暫停執行,或因Browser轉向其他

網面,或小應用程序調用stop()方法,或小應用程序執

行paint(Graphicsg)方法。

(4)重新啟動,或重新進入小應用程序所在頁面,重

新激活小應用程序,或小應用程序執行Paint(Graphics

g)方法完成。

(5)終止,或退出瀏覽器,或執行destroy()消亡方法。

4.小應用程序數據輸入輸出

小應用程序的數據輸入有多種方式。從圖形界面

的文本框、文本區中輸入;也可以采用系統標準輸入;還

可以由HTML文件中的參數導入。

,63?Java語言程序設計(一)

4.1數組

數組是將一組相同類型的數據順序存儲,組成一種

復合數據類型。數組的特點主要是:一個數組中的所有

元素的數據類型相同,數組中的元素連續順序存儲,數

組中每個元素按存儲順序對應一個下標,下標從()開始

順序編號,引用數組元素通過數組名和它的下標確定。

數組有一維數組和多維數組之分,數組元素的下標個數

確定數組的維數。

4.1.1一維數組

數組元素只有一個下標的數組是一維數組。

1.聲明一維數組

在Java語言中,數組是一種引用類型,數組名如同

對象名一樣,是一種引用。聲明數組是聲明一個標識符

能引用數組,只要指定數組元素的類型。聲明一維數組

有兩種格式:

數組元素類型數組名口;或者數組元素類型

口數組名;

其中數組元素類型可以是任意的Java數據類型(包

括類)。

?73?第4章數組和字符串

2.創建一維數組

創建數組就是為數組分配存儲空間,需指定數組長

度。數組創建后,數組名就標識用于存儲數組元素的存

儲空間。創建一維數組的方法有3種:

(1)先聲明后創建

創建數組代碼的一般形式為

數組名字=new數組元素類型[元素個數];

例如,代碼:

intintArray[];//聲明數組intArray

intArray=newint[5];//創建數組intArray

有5

個元素,元素下標自。?4

(2)在聲明時創建

把聲明數組和創建數組的代碼結合在一起。例如,

代碼:

intintArry[]=newint[5];

(3)直接賦值創建

在聲明數組時,直接給出數組的初值。例如代碼:

int[]intArray={l,2,3,4,5};

直接賦值創建數組的方法也稱為數組初始化。

前兩種方法創建數組時,系統會給數組元素提供默

認初始值:數值型數組元素的默認初值是0;char類型數

組元素的默認初值是全0代碼字符;布爾類型數組元素

的默認初值是fa

溫馨提示

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

評論

0/150

提交評論