摘要:一個(gè)方法中最多只只能包含一個(gè)參數(shù)可變的形參。如果同一個(gè)類中包含了兩個(gè)或兩個(gè)以上方法的方法名相同,但形參列表不同,則被稱為方法重載。形參列表,當(dāng)調(diào)用方法時(shí),系統(tǒng)會(huì)根據(jù)傳入的實(shí)參列表匹配。
方法是類或?qū)ο蟮男袨樘卣鞯某橄螅椒ㄊ穷惢驅(qū)ο笞钪匾慕M成部分。值得指出的是Java里的方法不能獨(dú)立存在,所有的方法都必須定義在類里。
不論是從定義方法的語法來看,還是從方法的語法功能來看,都不難發(fā)現(xiàn)方法和函數(shù)之間的相似性。
實(shí)際上,方法確實(shí)是由傳統(tǒng)的函數(shù)發(fā)展而來的,方法與傳統(tǒng)的函數(shù)有著顯著不同:在結(jié)構(gòu)化編程語言里,函數(shù)是一等公民,整個(gè)軟件由一個(gè)個(gè)函數(shù)組成;在面向?qū)ο缶幊膛c壓力,類才是一等公民,整個(gè)系統(tǒng)由一個(gè)個(gè)的類組成。
在同一個(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)用者。
方法的參數(shù)傳遞機(jī)制如果聲明方法時(shí)包含了形參聲明,則調(diào)用方法時(shí)必須給這些形參指定參數(shù)值,調(diào)用方法時(shí)必須給這些形參指定采納數(shù)值,調(diào)用方法時(shí)實(shí)際傳給形參的參數(shù)值也被成為實(shí)參。
Java里方法的參數(shù)傳遞方式只有一種:值傳遞。所謂值傳遞,就是將實(shí)際參數(shù)值得副本傳入方法體內(nèi),而參數(shù)本身不會(huì)受到任何影響。
public class Test { public static void swap(int a, int b) { int temp = a; a = b; b = temp; System.out.println("交換時(shí)a的值是" + a + ";b的值是" + b); } public static void main(String[] args) { int a = 6; int b = 9; swap(a,b); System.out.println("交換后a的值是" + a + ";b的值是" + b); } }
交換時(shí)a的值是9;b的值是6
交換后a的值是6;b的值是9
從上面運(yùn)行結(jié)果可以看出,swap()方法里的變量a和b,并不是swap方法里的a和b.swap()方法的a和b只是main方法里變量a和b的復(fù)制品。
上面舉的例子是基本類型的參數(shù)傳遞,Java對(duì)于引用類型的參數(shù)傳遞,一樣采用的是值傳遞方式。但許多出初學(xué)者可能對(duì)引用類型的參數(shù)傳遞產(chǎn)生一些誤會(huì)。請(qǐng)看下面的代碼:
class DataWrap { int a; int b; } public class Test { public static void swap(DataWrap dw) { int tmp = dw.a; dw.a = dw.b; dw.b = tmp; System.out.println("swap方法里a的成員變量的值是" + dw.a + ";b成員變量的值是" + dw.b); } public static void main(String[] args) { DataWrap dw = new DataWrap(); dw.a = 6; dw.b = 9; swap(dw); System.out.println("交換結(jié)束后,a成員變量的值是" + dw.a + ";b成員變量的值是" + dw.b); } }
swap方法里a的成員變量的值是9;b成員變量的值是6
交換結(jié)束后,a成員變量的值是9;b成員變量的值是6
上面這種參數(shù)傳遞的方式是不折不扣的值傳遞方式,系統(tǒng)一樣復(fù)制了dw的副本傳入swap()方法,但關(guān)鍵在于dw只是一個(gè)引用變量,所以系統(tǒng)復(fù)制了dw變量,但并未復(fù)制DataWrap對(duì)象。
當(dāng)程序在swap()方法中操作dw參數(shù)時(shí),由于dw只是一個(gè)引用變量,故實(shí)際操作的還是堆內(nèi)存中的DataWrap對(duì)象。
如果在定義方法時(shí),在最后一個(gè)形參類型后加三點(diǎn)(...),則表明該形參數(shù)可以接受多個(gè)參數(shù)值,多個(gè)參數(shù)值被當(dāng)做數(shù)組傳入。
public class Test { public static void show(int a, String...books) { for (String tmp: books) { System.out.println(tmp); } } public static void main(String[] args) { show(5, "Java", "Pyton", "JavaScript"); } }
Java
Pyton
JavaScript
從上面show方法代碼體來看,形參個(gè)數(shù)可變的參數(shù)本質(zhì)就是一個(gè)數(shù)組參數(shù),也就是說,下面兩個(gè)方法簽名的效果簽名完全一樣。
個(gè)數(shù)可變的形參只能處于形參列表的最后。一個(gè)方法中最多只只能包含一個(gè)參數(shù)可變的形參。個(gè)數(shù)可變的形參本質(zhì)就是一個(gè)數(shù)組類型的形參。
Java允許同一個(gè)類里定義多個(gè)同名方法,只要形參列表不同就行。如果同一個(gè)類中包含了兩個(gè)或兩個(gè)以上方法的方法名相同,但形參列表不同,則被稱為方法重載。
Java中程序確定一個(gè)方法需要三個(gè)要素。
調(diào)用者,也就是方法的所屬者,既可以是類也可以是對(duì)象。
方法名,方法的標(biāo)志。
形參列表,當(dāng)調(diào)用方法時(shí),系統(tǒng)會(huì)根據(jù)傳入的實(shí)參列表匹配。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/68485.html
摘要:哪吒社區(qū)技能樹打卡打卡貼函數(shù)式接口簡(jiǎn)介領(lǐng)域優(yōu)質(zhì)創(chuàng)作者哪吒公眾號(hào)作者架構(gòu)師奮斗者掃描主頁左側(cè)二維碼,加入群聊,一起學(xué)習(xí)一起進(jìn)步歡迎點(diǎn)贊收藏留言前情提要無意間聽到領(lǐng)導(dǎo)們的談話,現(xiàn)在公司的現(xiàn)狀是碼農(nóng)太多,但能獨(dú)立帶隊(duì)的人太少,簡(jiǎn)而言之,不缺干 ? 哪吒社區(qū)Java技能樹打卡?【打卡貼 day2...
摘要:基礎(chǔ)問題的的性能及原理之區(qū)別詳解備忘筆記深入理解流水線抽象關(guān)鍵字修飾符知識(shí)點(diǎn)總結(jié)必看篇中的關(guān)鍵字解析回調(diào)機(jī)制解讀抽象類與三大特征時(shí)間和時(shí)間戳的相互轉(zhuǎn)換為什么要使用內(nèi)部類對(duì)象鎖和類鎖的區(qū)別,,優(yōu)缺點(diǎn)及比較提高篇八詳解內(nèi)部類單例模式和 Java基礎(chǔ)問題 String的+的性能及原理 java之yield(),sleep(),wait()區(qū)別詳解-備忘筆記 深入理解Java Stream流水...
摘要:基礎(chǔ)問題的的性能及原理之區(qū)別詳解備忘筆記深入理解流水線抽象關(guān)鍵字修飾符知識(shí)點(diǎn)總結(jié)必看篇中的關(guān)鍵字解析回調(diào)機(jī)制解讀抽象類與三大特征時(shí)間和時(shí)間戳的相互轉(zhuǎn)換為什么要使用內(nèi)部類對(duì)象鎖和類鎖的區(qū)別,,優(yōu)缺點(diǎn)及比較提高篇八詳解內(nèi)部類單例模式和 Java基礎(chǔ)問題 String的+的性能及原理 java之yield(),sleep(),wait()區(qū)別詳解-備忘筆記 深入理解Java Stream流水...
摘要:基礎(chǔ)問題的的性能及原理之區(qū)別詳解備忘筆記深入理解流水線抽象關(guān)鍵字修飾符知識(shí)點(diǎn)總結(jié)必看篇中的關(guān)鍵字解析回調(diào)機(jī)制解讀抽象類與三大特征時(shí)間和時(shí)間戳的相互轉(zhuǎn)換為什么要使用內(nèi)部類對(duì)象鎖和類鎖的區(qū)別,,優(yōu)缺點(diǎn)及比較提高篇八詳解內(nèi)部類單例模式和 Java基礎(chǔ)問題 String的+的性能及原理 java之yield(),sleep(),wait()區(qū)別詳解-備忘筆記 深入理解Java Stream流水...
摘要:函數(shù)式接口進(jìn)階與默認(rèn)方法詳解上一篇我們快速的借助示例演示了的簡(jiǎn)單應(yīng)用,體會(huì)到了使用對(duì)集合處理的便捷和其與函數(shù)式接口密不可分的關(guān)系,所以為了更高效的使用,有必要更熟練的掌握函數(shù)式接口。 Java8-5-函數(shù)式接口進(jìn)階與默認(rèn)方法詳解上一篇我們快速的借助示例演示了stream api的簡(jiǎn)單應(yīng)用,體會(huì)到了使用stream api對(duì)集合處理的便捷和其與函數(shù)式接口密不可分的關(guān)系,所以為了更高效的使...
閱讀 1030·2021-09-22 15:26
閱讀 2607·2021-09-09 11:52
閱讀 1890·2021-09-02 09:52
閱讀 2241·2021-08-12 13:28
閱讀 1180·2019-08-30 15:53
閱讀 506·2019-08-29 13:47
閱讀 3380·2019-08-29 11:00
閱讀 3095·2019-08-29 10:58