首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

100天Java學習計劃 Day 03:深入淺出Java方法

     編輯:Java 綜合教學

100天Java學習計劃 Day 03:深入淺出Java方法

今天是學習計劃的第三天,也是3月30日——筆者的生日!🎉 繼前兩天的基礎語法後,今天我們來聊聊 Java 中的「方法」。

方法 vs 函數:地位的差異

很多有 C 語言基礎的同學會發現:Java 的方法長得跟 C 的函數一模一樣。確實,從語法結構上看,兩者極其相似。但地位上卻有天壤之別:

  • C 是結構化語言,函數是核心地位;
  • Java 是面向對象語言,類和對象才是一等公民,方法必須依附於類或對象而存在,不能獨立存在、也不能獨立執行。

靜態方法與實例方法的調用規則

  • static 修飾 → 屬於類 → 類名.方法名() 調用(靜態方法)
  • 無 static → 屬於對象 → 對象.方法名() 調用(實例方法)

⚠️ 重點:方法永遠只能被類或對象調用,絕不能獨立執行!

疑問:同一個類裡,方法 A 直接呼叫方法 B,沒寫 this. 或類名,為什麼能跑通?
答案:編譯器會自動補齊——實例方法補 this.,靜態方法補 類名.。

Java 只有「值傳遞」

Java 方法參數傳遞機制只有一種:值傳遞(Call by Value)。
通俗說:實參的值被複製一份傳給形參,方法內操作的是副本,原實參不受影響。

案例 1:基本類型參數

public static void changenum(int num1, int num2) {
    int temp = num1; num1 = num2; num2 = temp;
    System.out.println("方法內:num1=" + num1 + ";num2=" + num2);
}
public static void main(String[] args) {
    int num1 = 1, num2 = 2;
    changenum(num1, num2);
    System.out.println("main內:num1=" + num1 + ";num2=" + num2); // 仍為 1、2
}

結果證明:方法內交換的是副本,main 內原變數毫髮無傷。

案例 2:去掉 static 會發生什麼?

若 changenum 去掉 static,main 直接呼叫會報錯:
non-static method changenum(int,int) cannot be referenced from a static context
修正方式:Main test = new Main(); test.changenum(num1, num2); —— 再次驗證「非靜態方法屬於對象,必須通過對象調用」。

案例 3:傳遞對象引用(重點!)

public static void changenum(Main test) {
    int temp = test.num1; test.num1 = test.num2; test.num2 = temp;
}

這回 main 內的值也變了!原因:傳的是引用變量的副本(地址值),兩個引用指向同一個堆內存對象,操作的是同一塊內存。
結論:依然是值傳遞,傳的是「引用的值」。

兩個實用小知識

1. 可變參數

不確定參數個數時,在最後一個參數類型後加 ...:

public static void meetingpeople(int num, String... name) {
    System.out.print(num);
    for (String temp : name) System.out.print(temp);
}
meetingpeople(3, "小張", "小李", "小王"); // 輸出 3小張小李小王

2. 方法重載

同一類中允許同名方法,只要參數列表不同(個數、類型、順序任一不同即可),返回值類型無關。調用時由編譯器根據實參匹配。

public static void fangfa() { ... }
public static void fangfa(String say) { ... }
public static void fangfa(int num) { ... }
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved