方法是類或?qū)ο蟮男袨樘卣鞯某橄?/p>
java里的方法不能獨立存在,所有的方法都必須定義在類里。方法在邏輯上要么屬于類,要么屬于對象
1.方法的所屬性
方法是由傳統(tǒng)的函數(shù)發(fā)展而來的,方法與傳統(tǒng)的函數(shù)有著顯著的不同
如果需要定義方法,則只能在類體內(nèi)定義,不能獨立定義一個方法。一旦將一個方法定義在某個類的類體內(nèi),如果這個方法使用了static修飾,則這個方法屬于類,否則這個方法屬于這個類的實例。
java語言是靜態(tài)的,一個類定義完成后,只要不再重新編譯這個類文件,該類和該類的對象所擁有的方法是固定的,永遠都不會改變。
因為java里的方法不能獨立存在,它必須屬于一個類或一個對象,因此方法也不能像函數(shù)那樣被獨立執(zhí)行,執(zhí)行方法時必須使用類或?qū)ο髞碜鳛檎{(diào)用者,即所有方法都必須使用“類.方法”或“對象.方法”的形式來調(diào)用。
同一個類里不同方法之間相互調(diào)用時,如果被調(diào)用的方法時普通方法,則默認使用this作為調(diào)用者;如果被調(diào)方法是靜態(tài)方法,則默認使用類作為調(diào)用者。也就是說表面上看起來某些方法可以被獨立執(zhí)行,但實際上還是使用this或者類來作為調(diào)用者。
永遠不要把方法當成獨立存在的實體,正如現(xiàn)實世界由類和對象組成,而方法只能作為類和對象的附屬,java語言里的方法也是一樣。java語言里方法的所屬性主要體現(xiàn)在如下幾個方面。
1)方法不能獨立定義,方法只能在類體里定義
2)從邏輯意義上看,方法要么屬于該類本身,要么屬于該類的一個對象
3)永遠不能獨立執(zhí)行方法,執(zhí)行方法必須使用類或?qū)ο笞鳛檎{(diào)用者
使用static修飾的方法屬于這個類本身,使用static修飾的方法既可以使用類作為調(diào)用者來調(diào)用,也可以使用對象作為調(diào)用者來調(diào)用。但值得指出的是,因為使用static修飾的方法還是屬于這個類的,因此使用該類的任何對象來調(diào)用這個方法時將會得到相同的執(zhí)行結(jié)果,這是由于底層依然是使用這些實例所述的類作為調(diào)用者。
沒有static修飾的方法則屬于該類的對象,因此沒有static修飾的方法只能使用對象作為調(diào)用者來調(diào)用,不能使用類作為調(diào)用者來調(diào)用。
2.方法的參數(shù)傳遞機制
java里方法的參數(shù)傳遞方式只有一種:值傳遞。所謂的值傳遞,就是將實際參數(shù)值得副本傳入方法內(nèi),而參數(shù)本身不會受到任何影響。
3)形參個數(shù)可變的方法
從jdk1.5之后,java允許定義形參個數(shù)可變的參數(shù),從而允許為方法指定數(shù)量不確定的形參。如果在定義方法時,在最后一個形參的類型后增加(...),則表明該形參可以接受多個參數(shù)值,多個參數(shù)值被當成數(shù)組傳入。
個數(shù)可變的形參只能處于形參列表的最后,也就是說,一個方法中最多只能有一個個數(shù)可變的形參
3.遞歸方法
一個方法體內(nèi)調(diào)用它自身,被稱為方法遞歸。方法遞歸包含了一種隱式的循環(huán),它會重復執(zhí)行某段代碼,但這種重復執(zhí)行無須循環(huán)控制。
遞歸一定要向已知方向遞歸。
4.方法重載
java允許同一個類里定義多個同名方法,只要形參列表不同就行。如果同一個類中包含了兩個或兩個以上的方法名相同,但形參列表不同,則被稱為方法重載。
從上面可以看出,在java程序中確定一個方法需要三個要素。
1)調(diào)用者,也就是方法的所屬者,既可以是類,也可以是對象。
2)方法名,方法的標識
3)形參列表,當調(diào)用方法時,系統(tǒng)將會根據(jù)傳入的實參列表匹配。
方法重載的要求就是兩同一不同:同一個類中方法名相同,參數(shù)列表不同。至于方法的其他部分,如方法返回值類型、修飾符等,與方法重載沒有任何關(guān)系。