當前位置:才華齋>IT認證>計算機等級>

計算機二級JAVA考點解析

計算機等級 閱讀(2.4W)

Java看起來設計得很像C++,但是為了使語言小和容易熟悉,設計者們把C++語言中許多可用的特徵去掉了,這些特徵是一般程式設計師很少使用的。下面是關於計算機二級JAVA考點解析,希望大家認真閱讀!

計算機二級JAVA考點解析

類是Java語言面向物件程式設計的基本元素,它定義了一個物件的結構和行為。在Java程式裡,你要表達的概念封裝在某個類裡。一個類定義了一個物件的結構和它的功能介面,功能介面稱為成員函式。當Java程式執行時,系統用類的定義建立類的例項,類的例項是真正的物件。類定義的一般形式如下:

classclassnameextendssuperclassname{typeinstance-variable1;typeinstance-variable2;instance-variableN;typemethodname1(parameter-list){method-body;}typemethodname2(parameter-list){method-body;}methodnameN(parameter-list){method-body;}}

這裡,classname和superclassname是合法的識別符號。關鍵詞extends用來表明classname是superclassname派生的子類。有一個類叫做Object,它是所有Java類的根。如果你想定義Object的直接子類,你可以省略extends子句,編譯器會自動包含它。下面是一個簡單的類的定義。classUniversity{}

5.1物件例項

類名可以作為變數的型別來使用,如果一個變數的型別是某個類,那麼它將指向這個類的例項,稱為物件例項。所有物件例項和它們的型別(某個類?copy;的子類的例項都是相容的。就象可以把byte型的值賦給int型的變數一樣,你可以把Object的子類的任何例項賦給一個Object型的變數。一個例項是類模板的單獨的拷貝,帶有自己的稱為例項變數的資料集。每個例項也可以作為一個物件。當你定義一個變數的型別是某個類時,它的預設值是null,null是Object的一個例項。物件null沒有值,它和整數0不同。下面這個例子中,宣告變數u的型別是類University。Universityu;這裡,變數u的值是null。

5.2例項變數

Java通過在類定義的大括號裡宣告變數來把資料封裝在一個類裡。這裡的變數稱為例項變數。下面的例子定義了一個叫做University的類,它有兩個例項變數:name和city。classUniversity{Stringname,city;}

5.3new操作符

操作符new用來生成一個類的例項,下面這個例子生成了類University的一個例項,存放在變數u中。

Universityu=newUniversity();在此例中,變數u指向這個物件,但並不真正包含這個物件。你可以用多個變數指向同一個物件。下面的例子中,建立了一個University的物件,但建立了兩個指向它的變數。

Universityu=newUniversity();Universityu2=u;

對u2所指向的物件的任何改動都會對u所指向的物件起作用,因為它們是同一個物件。對u和u2的賦值只是把它們指向這個物件,既沒有分配記憶體,也沒有複製這個物件的任何部分。對u的再賦值只是簡單地去掉了u和原來物件的聯絡,並不影響物件本身,下面的例子說明了這種情況。

Universityu=newUniversity();Universityu2=u;u=null;

儘管u被賦值為null,u2仍指向原來由操作符new建立的物件。在前面的例子裡,我們生成了一個物件並且指向了它兩次。這就允許兩個變數改變同一個物件。建立一個新的物件時,可直接對它的例項變數賦值。每個物件都有它所屬類的例項變數的拷貝,每個物件的例項變數都是和其他物件的例項變數分離的,所以改變一個物件的例項變數不會影響其他物件的例項變數。下面的例子建立了兩個University的物件,並對它們分別賦值:classTwoUniversity{publicstaticvoidmain(Stringargs[]){Universityu1=newUniversity();Universityu2=newUniversity();="北?copy;大學";="北?copy;";="清華大學";="北?copy;";tln("大學:"++"城市:"+);tln("大學:"++"城市:"+);}}這個例子建立了兩個University的物件,並且對它們的name、city分別賦了不同的值,這說明這兩個物件是真正分離的。下面是該程式執行後的輸出結果。C:>javaTwoUniversity大學:北?copy;大學城市:北?copy;大學:清華大學城市:北?copy;

5.4點(.?copy;操作符點(.?copy;操作符用來接收一個物件的例項變數和成員函式。下面是用點操作符來接收例項變數的一般形式。ablename

這裡objectreference是一個物件例項,variablename是這個物件裡你想接收的例項變數。下面的程式段說明了怎樣用點操作符來給例項變數賦值。

="北?copy;大學";="北?copy;";下面說明怎樣用點操作符來得到例項變數的值。tln("大學:"++"城市:"+);通過向類University里加入一個成員函式main,我們建立了一個完整的例子,它使用了new操作符來建立一個University,用點操作符來賦值,然後列印結果。classUniversity{Stringname,city;publicstaticvoidmain(Stringargs[]){Universityu=newUniversity();="北?copy;大學";="北?copy;";tln("大學:"++"城市:"+);}}

執行這個程式後,就會得到下面的結果。C:>javaUniversity大學:北?copy;大學城市:北?copy;

5.5成員函式定義

成員函式,是類的功能介面,是類定義裡的一個子程式,在類的定義裡和例項變數處於同一級別。你必須通過一個類的例項來呼叫成員函式。成員函式可以不用點操作符而直接使用例項變數。成員函式帶有輸入引數,具有

某種型別的返回值。成員函式定義的一般形式如下:typemethodname(formal-parameter-list){method-body;}這裡type指的是成員函式的返回值的型別,如果沒有返回值,就用無值(void?copy;型別。methodname可以是任何合法的識別符號,但不能與當前的類名相同。formal-parameter-list是用逗號分隔的型別、識別符號對的序列。如果沒有引數,括號裡就是空的。還是用我們的University的例子,下面的成員函式用來初始化兩個例項變數。成員函式是在類的大括號?reg;內定義的,和例項變數所處的範圍相同。classUniversity{Stringname,city;voidinit(Stringa,Stringb){name=a;city=b;}}

注意,我們這裡直接給name和city賦值,而沒有象以前那樣用。這是因為每個成員函式都在類的個別例項內執行。我們建立的類的例項具有它自己的例項變數,所以成員函式可直接使用它們。

5.6成員函式呼叫

可以用點(.?copy;操作符來呼叫一個類的例項的成員函式。成員函式呼叫的一般形式如下:odname(parameter-list);這裡,objectreference是指向某個物件的變數,methodname是objectreference所屬類的一個成員函式,parameter-list是用逗號分隔的變數或表示式的序列,它們要與該成員函式的定義的引數個數及型別匹配。在這個例子裡,我們可以對任何University物件呼叫成員函式init來給name和city賦值。下面的程式段說明了怎樣完成這個工作。Universityu=newUniversity();("北?copy;大學","北?copy;");這個例子建立了University的'一個例項,存放在u中。通過點操作符來呼叫這個例項的init成員函式,把"北?copy;大學"和"北?copy;"分別傳遞給引數a和b。在init成員函式內部,name和city直接指向u所指向的物件的例項變數。把name賦值為"北?copy;大學",city賦值為"北?copy;",然後返回。在這個例子裡,init被定義為無值(void?copy;返回型別。在進行這個成員函式呼叫後,u指向這個name值和city值改變了的University物件。

5.7thisJava有一個特殊的例項值叫this,它用來在一個成員函式內部指向當前的物件。在前面的例子裡,我們呼叫,一?copy;進入init成員函式內部,this就會指向u所指向的物件。在Java裡,在同一個範圍定義兩個相同名字的區域性變

量是不可以的。有趣的是,區域性變數、成員函式的引數可以和例項變數的名字相同。前面我們沒有用name和city作為成員函式init的引數名字,因為這樣它們在成員函式的範圍裡就把例項變數name和city隱藏了,即name指向引數name,隱藏了例項變數name。this讓我們可以直接指向物件本身。下面是另一個版本的init,用name和city作為引數名字,用this來接收當前物件的例項變數。

voidinit(Stringname,Stringcity){=name;=city;}下面是帶有新的init初始成員函式的TwoUniversity例子。classUniversity{Stringname,city;voidinit(Stringname,Stringcity){=name;=city;}}classTwoUniversityInit{publicstaticvoidmain(Stringargs[]){Universityu1=newUniversity();Universityu2=newUniversity();("北?copy;大學","北?copy;");("清華大學","北?copy;");tln("大學:"++"城市:"+);tln("大學:"++"城市:"+);}}

5.8建構函式(Constructor)

每建立一個類的例項都去初始化它的所有變數是乏味的。如果一個物件在被建立時就完成了所有的初始工作,將是簡單的和簡潔的。因此,Java在類裡提?copy了一個特殊的成員函式,叫做建構函式(Constructor?copy;。一個建構函式是物件被建立時初始物件的成員函式。它具有和它所在的類完全一樣的名字。一?copy;定義好一個建構函式,建立物件時就會自動呼叫它。建構函式沒有返回型別,即使是void型別也沒有。這是因為一個類的建構函式的返回值的型別就是這個類本身。建構函式的任務是初始一個物件的內部狀態,所以用new操作符建立一個例項後,立刻就會得到一個清楚、可用的物件。下面這個例子裡,用建構函式取代了成員函式init。

classUniversity{Stringname,city;University(Stringname,Stringcity)

{=name;=city;}}classUniversityCreate{publicstaticvoidmain(Stringargs[]){Universityu=newUniversity("北?copy;大學","北?copy;");tln("大學:"++"城市:"+);}}new語句中類名後的引數是傳給建構函式的。

5.9成員函式過載

對於幾個意義相近的成員函式,有時使用相同的名字便於理解。因此,Java語言實現了成員函式過載,即可以建立幾個名字相同、引數不同的成員函式。成員函式過載提?copy;了Java的多型行為。下面的例子用到了過載。classUniversity{Stringname,city;University(Stringname,Stringcity){=name;=city;}University(){name="北?copy;大學";city="北?copy;";}}

classUniversityCreateAlt{publicstaticvoidmain(Stringargs[]){Universityu=newUniversity();tln("大學:"++"城市:"+);}}