5.5成員函數(shù)定義
成員函數(shù),是類的功能接口,是類定義里的一個(gè)子程序,在類的定義里和實(shí)例變量處于同一級(jí)別。你必須通過(guò)一個(gè)類的實(shí)例來(lái)調(diào)用成員函數(shù)。成員函數(shù)可以不用點(diǎn)操作符而直接使用實(shí)例變量。成員函數(shù)帶有輸入?yún)?shù),具有
某種類型的返回值。成員函數(shù)定義的一般形式如下:typemethodname(formal-parameter-list){method-body;}這里type指的是成員函數(shù)的返回值的類型,如果沒(méi)有返回值,就用無(wú)值(void?copy;類型。methodname可以是任何合法的標(biāo)識(shí)符,但不能與當(dāng)前的類名相同。formal-parameter-list是用逗號(hào)分隔的類型、標(biāo)識(shí)符對(duì)的序列。如果沒(méi)有參數(shù),括號(hào)里就是空的。還是用我們的University的例子,下面的成員函數(shù)用來(lái)初始化兩個(gè)實(shí)例變量。成員函數(shù)是在類的大括號(hào)?reg;內(nèi)定義的,和實(shí)例變量所處的范圍相同。classUniversity{Stringname,city;voidinit(Stringa,Stringb){name=a;city=b;}}
注意,我們這里直接給name和city賦值,而沒(méi)有象以前那樣用u1.name。這是因?yàn)槊總(gè)成員函數(shù)都在類的個(gè)別實(shí)例內(nèi)執(zhí)行。我們創(chuàng)建的類的實(shí)例具有它自己的實(shí)例變量,所以成員函數(shù)可直接使用它們。
5.6成員函數(shù)調(diào)用
可以用點(diǎn)(.?copy;操作符來(lái)調(diào)用一個(gè)類的實(shí)例的成員函數(shù)。成員函數(shù)調(diào)用的一般形式如下:objectreference.methodname(parameter-list);這里,objectreference是指向某個(gè)對(duì)象的變量,methodname是objectreference所屬類的一個(gè)成員函數(shù),parameter-list是用逗號(hào)分隔的變量或表達(dá)式的序列,它們要與該成員函數(shù)的定義的參數(shù)個(gè)數(shù)及類型匹配。在這個(gè)例子里,我們可以對(duì)任何University對(duì)象調(diào)用成員函數(shù)init來(lái)給name和city賦值。下面的程序段說(shuō)明了怎樣完成這個(gè)工作。Universityu=newUniversity();u.init(\"北?copy;大學(xué)\",\"北?copy;\");這個(gè)例子創(chuàng)建了University的一個(gè)實(shí)例,存放在u中。通過(guò)點(diǎn)操作符來(lái)調(diào)用這個(gè)實(shí)例的init成員函數(shù),把\"北?copy;大學(xué)\"和\"北?copy;\"分別傳遞給參數(shù)a和b。在init成員函數(shù)內(nèi)部,name和city直接指向u所指向的對(duì)象的實(shí)例變量。把name賦值為\"北?copy;大學(xué)\",city賦值為\"北?copy;\",然后返回。在這個(gè)例子里,init被定義為無(wú)值(void?copy;返回類型。在進(jìn)行這個(gè)成員函數(shù)調(diào)用后,u指向這個(gè)name值和city值改變了的University對(duì)象。
5.7thisJava有一個(gè)特殊的實(shí)例值叫this,它用來(lái)在一個(gè)成員函數(shù)內(nèi)部指向當(dāng)前的對(duì)象。在前面的例子里,我們調(diào)用u.init,一?copy;進(jìn)入init成員函數(shù)內(nèi)部,this就會(huì)指向u所指向的對(duì)象。在Java里,在同一個(gè)范圍定義兩個(gè)相同名字的局部變
量是不可以的。有趣的是,局部變量、成員函數(shù)的參數(shù)可以和實(shí)例變量的名字相同。前面我們沒(méi)有用name和city作為成員函數(shù)init的參數(shù)名字,因?yàn)檫@樣它們?cè)诔蓡T函數(shù)的范圍里就把實(shí)例變量name和city隱藏了,即name指向參數(shù)name,隱藏了實(shí)例變量name。this讓我們可以直接指向?qū)ο蟊旧。下面是另一個(gè)版本的init,用name和city作為參數(shù)名字,用this來(lái)接收當(dāng)前對(duì)象的實(shí)例變量。
voidinit(Stringname,Stringcity){this.name=name;this.city=city;}下面是帶有新的init初始成員函數(shù)的TwoUniversity例子。classUniversity{Stringname,city;voidinit(Stringname,Stringcity){this.name=name;this.city=city;}}classTwoUniversityInit{publicstaticvoidmain(Stringargs[]){Universityu1=newUniversity();Universityu2=newUniversity();u1.init(\"北?copy;大學(xué)\",\"北?copy;\");u2.init(\"清華大學(xué)\",\"北?copy;\");System.out.println(\"大學(xué):\"+u1.name+\"城市:\"+u1.city);system.out.println(\"大學(xué):\"+u2.name+\"城市:\"+u2.city);}}
2015年全國(guó)職稱計(jì)算機(jī)考試教材(2007模 .. 定價(jià):¥225 優(yōu)惠價(jià):¥213 更多書(shū)籍 | |
全國(guó)職稱計(jì)算機(jī)考試速成過(guò)關(guān)系列套裝:W .. 定價(jià):¥133 優(yōu)惠價(jià):¥133.0 更多書(shū)籍 |