關燈 巨大 直達底部
親,雙擊螢幕即可自動滾動
第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賦值,而沒有象以前那樣用u1。name。這是因為每個成員函式都在類的個別例項內執行。我們建立的類的例項具有它自己的例項變數,所以成員函式可直接使用它們。

5。6成員函式呼叫

可以用點(。?copy;運算子來呼叫一個類的例項的成員函式。成員函式呼叫的一般形式如下:objectreference。methodname(parameter…list);這裡,objectreference是指向某個物件的變數,methodname是objectreference所屬類的一個成員函式,parameter…list是用逗號分隔的變數或表示式的序列,它們要與該成員函式的定義的引數個數及型別匹配。在這個例子裡,我們可以對任何University物件呼叫成員函式init來給name和city賦值。下面的程式段說明了怎樣完成這個工作。Universityu=newUniversity();u。init(”北?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,它用來在一個成員函式內部指向當前的物件。在前面的例子裡,我們呼叫u。init,一?copy;進入init成員函式內部,this就會指向u所指向的物件。在Java裡,在同一個範圍定義兩個相同名字的區域性變

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

voidinit(Stringname;Stringcity){this。name=name;this。city=city;}下面是帶有新的init初始成員函式的TwoUniversity例子。classUniversity{Stringname;city;voidinit(Stringname;Stringcity){this。name=name;this。city=city;}}classTwoUniversityInit{publicstaticvoidmain(Stringargs''){Universityu1=newUniversity();Universityu2=newUniversity();u1。init(”北?copy;大學”;”北?copy;”);u2。init(”清華大學”;”