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