當前位置:學問君>人在職場>IT認證>

計算機二級JAVA考點解析

學問君 人氣:2.36W

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("大學:"++"城市:"+);}}