Java基礎(chǔ)之方法-[Android_YangKe]

1.方法詳解
2.方法所屬性
3.方法參數(shù)傳遞機(jī)制
4.方法多變參數(shù)

方法詳解

方法是類或?qū)ο蟮男袨樘卣鞯某橄?方法是類或?qū)ο笞钪匾慕M成部分猾漫。但從功能上來看粪牲,方法完全類似于傳統(tǒng)結(jié)構(gòu)化程序設(shè)計(jì)里的函數(shù)步悠。值得指出的是尚氛,Java里的方法不能獨(dú)立存在盾饮,所有的方法都必須定義在類里细办。方法在邏輯上要么屬于類,要么屬于對(duì)象罪针。

方法所屬性

不論是從定義方法的語法來看彭羹,還是從方法的功能來看,都不難發(fā)現(xiàn)方法和函數(shù)之間的相似性泪酱。實(shí)際上派殷,方法確實(shí)是由傳統(tǒng)的函數(shù)發(fā)展而來的,方法與傳統(tǒng)的函數(shù)有著顯著不同:在結(jié)構(gòu)化編程語言里墓阀,函數(shù)是一等公民毡惜,整個(gè)軟件由一個(gè)個(gè)的函數(shù)組成;在面向?qū)ο缶幊陶Z言里斯撮,類才是一等公民经伙,整個(gè)系統(tǒng)由一個(gè)個(gè)的類組成。因此在Java語言里勿锅,方法不能獨(dú)立存在帕膜,方法必須屬于類或?qū)ο蟆?/p>

因此枣氧,如果需要定義方法,則只能在類體內(nèi)定義垮刹,不能獨(dú)立定義一個(gè)方法达吞。一旦將一個(gè)方法定義在某個(gè)類內(nèi),如果這個(gè)方法使用了static修飾荒典,則這個(gè)方法屬于這個(gè)類酪劫,否則這個(gè)方法屬于這個(gè)類的實(shí)例。

Java語言是靜態(tài)的种蝶。一個(gè)類定義完成后契耿,只要不再重新編譯這個(gè)類文件,該類和該類的對(duì)象所擁有的方法是固定的螃征,永遠(yuǎn)都不會(huì)改變搪桂。

Java里的方法不能獨(dú)立存在,它必須屬于一個(gè)類或一個(gè)對(duì)象盯滚,因此方法也不能像函數(shù)那樣被獨(dú)立執(zhí)行踢械,執(zhí)行方法時(shí)必須使用類或?qū)ο髞碜鳛檎{(diào)用者,即所有方法都必須使用“類.方法”或“對(duì)象.方法”的形式來調(diào)用魄藕。這里可能產(chǎn)生一個(gè)問題:同一個(gè)類里不同方法之間相互調(diào)用時(shí)内列,不就可以直接調(diào)用嗎?這里需要指出:同一個(gè)類的一個(gè)方法調(diào)用另外一個(gè)方法時(shí)背率,如果被調(diào)用方法是普通方法话瞧,則默認(rèn)使用this作為調(diào)用者;如果調(diào)用者是靜態(tài)方法寝姿,則默認(rèn)使用類作為調(diào)用者交排。也就是說,表面上看起來某些方法可以被獨(dú)立執(zhí)行饵筑,但實(shí)際上還是使用this或者類來作為調(diào)用者埃篓。

永遠(yuǎn)不要把方法當(dāng)初獨(dú)立存在的實(shí)體,正如現(xiàn)實(shí)世界由類和對(duì)象組成根资,而方法只能作為類和對(duì)象的附屬架专,Java語言里的方法也是一樣。Java語言里方法的所屬性主要體現(xiàn)在如下幾個(gè)方面:

  • 方法不能獨(dú)立定義玄帕,方法只能在類體里定義
  • 從邏輯意義上來看部脚,方法要么屬于該類本身,要么屬于該類的一個(gè)對(duì)象裤纹。
  • 永遠(yuǎn)不能獨(dú)立執(zhí)行方法睛低,執(zhí)行方法必須使用類或?qū)ο笞鳛檎{(diào)用者。

使用static修飾的方法屬于這個(gè)類本身,使用static修飾的方法即可以使用類作為調(diào)用者來調(diào)用钱雷,也可以使用對(duì)象作為調(diào)用者來調(diào)用。但值得指出的是吹零,因?yàn)槭褂胹tatic修飾的方法還是屬于這個(gè)類的罩抗,因此使用該類的任何對(duì)象來調(diào)用這個(gè)方法時(shí)將會(huì)得到相同的執(zhí)行結(jié)果,因?yàn)閷?shí)際上還是使用這些實(shí)例所屬的類作為調(diào)用者灿椅。

沒有static修飾的方法則屬于該類的對(duì)象套蒂,不屬于這個(gè)類本身。因此沒有static修飾的方法只能使用對(duì)象作為調(diào)用者調(diào)用茫蛹,不能使用類作為調(diào)用者調(diào)用操刀。

方法參數(shù)傳遞機(jī)制

前面已經(jīng)介紹了Java里的方法是不能獨(dú)立存在的,調(diào)用方法必須使用類或?qū)ο笞鳛橹髡{(diào)用者婴洼。如果聲明方法時(shí)包含了形參聲明骨坑,則調(diào)用方法時(shí)必須給這些形參指定參數(shù)值,調(diào)用方法時(shí)實(shí)際傳給形參的參數(shù)值也被稱為實(shí)參柬采。

那么欢唾,Java的實(shí)參值時(shí)如何傳入方法的呢?這是由Java方法的參數(shù)傳遞機(jī)制來控制的粉捻,Java里方法的參數(shù)傳遞方式只有一種:值傳遞礁遣。所謂值傳遞,就是將實(shí)際參數(shù)值的副本(復(fù)制品)傳入方法內(nèi)肩刃,而參數(shù)本身不會(huì)受到任何影響祟霍。

Java里的參數(shù)傳遞類似于《西游記》里的孫悟空,孫悟空復(fù)制出一個(gè)假孫悟空盈包,這個(gè)假孫悟空具有和真孫悟空相同的能力沸呐,可打怪或除妖。但不管這個(gè)假孫悟空身上發(fā)生了什么事情续语,真孫悟空不會(huì)受到任何影響垂谢。與此類似,傳入方法的是實(shí)際參數(shù)值的復(fù)制品疮茄,不管方法中對(duì)這個(gè)復(fù)制品如何操作滥朱,實(shí)際參數(shù)值本身不會(huì)受到任何影響。

發(fā)福利:

public static void swap(int a, int b) {
    int temp = a;
    a = b;
    b = temp;
    System.out.println("swap---->" + "a = " + a + ", b = " + b);
}

public static void main(String[] args) {
    int a = 1, b = 2;
    swap(a, b);
    System.out.println("main---->" + "a = " + a + ", b = " + b);
}
//打印結(jié)果:
//swap---->a = 2, b = 1
//main---->a = 1, b = 2

從上面運(yùn)行結(jié)果來看力试,swap方法里a和b的值是2徙邻、1,交換結(jié)束后畸裳,變量a和b的值依然是1缰犁、2.從這個(gè)運(yùn)行結(jié)果可以看出,main方法里的a和b,并不是swap方法里的a和b帅容。正如前面講的swap方法的a和b只是意圖來說明上面程序的執(zhí)行過程颇象。

形參個(gè)數(shù)可變方法

從JDK 1.5之后,Java允許定義形參個(gè)數(shù)可變的參數(shù)并徘,從而允許方法指定數(shù)量不確定的類型后增加三點(diǎn)( ... )遣钳,則表明該形參可以接受多個(gè)參數(shù)值,多個(gè)參數(shù)值被當(dāng)成數(shù)組傳入麦乞。下面程序定義了一個(gè)形參個(gè)數(shù)可以接受多個(gè)參數(shù)值蕴茴,多個(gè)參數(shù)值被當(dāng)成數(shù)組傳入。下面程序定義了一個(gè)形參個(gè)數(shù)可變的方法姐直。

發(fā)福利:

public static void main(String[] args) {
    test(0, "s1", "s2");
}

// 定義了形參個(gè)數(shù)可變的方法
public static void test(int a, String... strings) {
    for (String s : strings) {
        // strings被當(dāng)成數(shù)組處理
        System.out.println("形參之一---->" + s);
    }
    System.out.println("普通參數(shù)---->" + a);
}
// 控制打印結(jié)果
// 形參之一---->s1
// 形參之一---->s2
// 普通參數(shù)---->0

從上面運(yùn)行結(jié)果可以看出倦淀,當(dāng)調(diào)用test方法時(shí),strings形參可以傳入多個(gè)字符串作為參數(shù)值声畏。從test的方法體代碼來看撞叽,形參個(gè)數(shù)可變的參數(shù)其實(shí)就是一個(gè)數(shù)組參數(shù),也就是說砰识,下面兩個(gè)方法簽名的效果完全一樣能扒。

// 以可變個(gè)數(shù)形參定義方法
public static void test(int a, String... strings) {}
// 以數(shù)組形參定義方法
public static void test(int a, String[] strings){}

這兩種形式都包含了一個(gè)名為strings的形參,在兩個(gè)方法的方法體內(nèi)都可以把strings當(dāng)成數(shù)組處理辫狼。但區(qū)別是調(diào)用兩個(gè)方法時(shí)存在差別初斑,對(duì)于以可變形參的形式定義的方法,調(diào)用方法時(shí)更加簡潔膨处,如下面代碼所示见秤。

test(0,"s1","s2"){}

傳給strings參數(shù)的實(shí)參數(shù)值無需是一個(gè)數(shù)組,但如果使用數(shù)組形參來聲明方法真椿,調(diào)用時(shí)則必須給該形參一個(gè)數(shù)組鹃答,如下所示。

test(0,new String[]{"s1","s2"}

對(duì)比兩種調(diào)用test方法的代碼突硝,明顯第一種形式更加簡潔测摔。實(shí)際上,即使是采用形參個(gè)數(shù)可變的形式來定義方法解恰,調(diào)用該方法時(shí)也一樣可以為個(gè)數(shù)可變的形參傳入一個(gè)數(shù)組锋八。

最后還要指出的是,數(shù)組形式的形參可以出現(xiàn)在參數(shù)列表的任意位置护盈,但個(gè)數(shù)可變的形參只能處于形參列表的最后挟纱。也就是說,一個(gè)方法中最多只能又一個(gè)長度可變的形參腐宋。

長度可變的形參只能處于形參列表的最后紊服。一個(gè)方法中最多只能包含一個(gè)長度可變的形參檀轨。調(diào)用包含一個(gè)長度可變形參的方法時(shí),這個(gè)長度可變的形參即可以傳入多個(gè)參數(shù)欺嗤,也可以傳入一個(gè)數(shù)組参萄。

喜歡有幫助的話: 雙擊、評(píng)論煎饼、轉(zhuǎn)發(fā)拧揽,動(dòng)一動(dòng)你的小手讓更多的人知道!關(guān)注 帥比-楊

摘自:李剛〔瘋狂java〕

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末腺占,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子痒谴,更是在濱河造成了極大的恐慌衰伯,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,744評(píng)論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件积蔚,死亡現(xiàn)場離奇詭異意鲸,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)尽爆,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,505評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門怎顾,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人漱贱,你說我怎么就攤上這事槐雾。” “怎么了幅狮?”我有些...
    開封第一講書人閱讀 163,105評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵募强,是天一觀的道長。 經(jīng)常有香客問我崇摄,道長擎值,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,242評(píng)論 1 292
  • 正文 為了忘掉前任逐抑,我火速辦了婚禮鸠儿,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘厕氨。我一直安慰自己进每,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,269評(píng)論 6 389
  • 文/花漫 我一把揭開白布腐巢。 她就那樣靜靜地躺著品追,像睡著了一般。 火紅的嫁衣襯著肌膚如雪冯丙。 梳的紋絲不亂的頭發(fā)上肉瓦,一...
    開封第一講書人閱讀 51,215評(píng)論 1 299
  • 那天遭京,我揣著相機(jī)與錄音,去河邊找鬼泞莉。 笑死哪雕,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的鲫趁。 我是一名探鬼主播斯嚎,決...
    沈念sama閱讀 40,096評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼挨厚!你這毒婦竟也來了堡僻?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,939評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤疫剃,失蹤者是張志新(化名)和其女友劉穎钉疫,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體巢价,經(jīng)...
    沈念sama閱讀 45,354評(píng)論 1 311
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡牲阁,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,573評(píng)論 2 333
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了壤躲。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片城菊。...
    茶點(diǎn)故事閱讀 39,745評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖碉克,靈堂內(nèi)的尸體忽然破棺而出凌唬,到底是詐尸還是另有隱情,我是刑警寧澤棉胀,帶...
    沈念sama閱讀 35,448評(píng)論 5 344
  • 正文 年R本政府宣布法瑟,位于F島的核電站,受9級(jí)特大地震影響唁奢,放射性物質(zhì)發(fā)生泄漏霎挟。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,048評(píng)論 3 327
  • 文/蒙蒙 一麻掸、第九天 我趴在偏房一處隱蔽的房頂上張望酥夭。 院中可真熱鬧,春花似錦脊奋、人聲如沸熬北。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,683評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽讶隐。三九已至,卻和暖如春久又,著一層夾襖步出監(jiān)牢的瞬間巫延,已是汗流浹背效五。 一陣腳步聲響...
    開封第一講書人閱讀 32,838評(píng)論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留炉峰,地道東北人畏妖。 一個(gè)月前我還...
    沈念sama閱讀 47,776評(píng)論 2 369
  • 正文 我出身青樓,卻偏偏與公主長得像疼阔,于是被迫代替她去往敵國和親戒劫。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,652評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容