Java從入門到“放棄”(精通)之旅——方法的使用⑤

Java從入門到“放棄”(精通)之旅🚀——方法的使用⑤

📖引言:

在編程領域,代碼如同精密的齒輪相互咬合驅動程序運轉。隨著項目規模漸長,重復的代碼片段如同冗余的齒輪,不僅增加負重,還易導致故障。

方法,恰似能將特定功能齒輪組封裝起來的黑匣子。把重復執行的代碼邏輯收納其中,對外僅露出簡潔的調用接口。需要執行相應功能時,只需精準呼喚方法之名,就如同轉動黑匣子外的把手,內部精巧的齒輪組便會有序運轉,高效輸出預期結果。這將復雜的功能模塊化、抽象化,提升代碼的可讀性、可維護性與復用性,此即Java中方法的本質所在。


一、方法基礎:告別"復制粘貼"的苦日子

1. 方法定義:你的第一個代碼模板

Java定義方法的語法:

public static 返回值類型 方法名(參數類型 參數名) {// 方法體(你的騷操作)return 返回值; // 如果有的話
}

舉個栗子🌰:判斷閏年

public static boolean isLeapYear(int year) {return (year % 4 == 0 && year % 100 != 0) || year % 400 == 0;
}

關鍵點速記

  • public static:表示公開屬性并且是靜態的
  • 方法名:建議動詞+名詞,比如calculateSum(千萬別用a1test2這種名字)
  • 參數:像點奶茶時的選項——要加珍珠嗎?要幾分糖?

2. 方法調用:讓代碼"自己動"

舉個栗子🌰
當你寫下add(1, 2)JVM在幕后做了這些:

  1. 找到add方法地址(找到收藏的奶茶店)
  2. 12傳給方法(提交點單)
  3. 執行方法體(店員做奶茶)
  4. 返回結果(奶茶送到家)

代碼示例

public static void main(String[] args) {System.out.println("2+3=" + add(2, 3)); // 輸出:5
}public static int add(int a, int b) {return a + b;
}

在這里插入圖片描述


二、方法進階:玩轉參數與返回值

1. 形參 vs 實參:分清"菜譜"和"食材"

  • 形參:方法定義時的參數(就像菜譜里的"適量")
  • 實參:方法調用時傳入的值(就像實際放的鹽)
    在這里插入圖片描述
// 形參:a, b
public static int add(int a, int b) {return a + b;
}public static void main(String[] args) {int x = 2, y = 3;add(x, y); // 實參:x, y
}

2. 值傳遞的陷阱:為什么交換失敗了?

public static void swap(int a, int b) {int temp = a;a = b;b = temp; // 這里交換的只是形參!
}

原因:Java是值傳遞,方法內操作的是參數的拷貝。想真正交換要等學到了數組

3.沒有返回值的方法:void

方法的返回值是可以選擇的,當沒有返回值時,返回值類型必須寫成void
代碼示例:

public static void main(String[] args) { int a = 10; int b = 20;print(a, b); 
}
public static void print(int x, int y) {System.out.println("x = " + x + " y = " + y); 
} 

三、方法重載:Java版的"一詞多義"

1. 為什么需要重載?

想象去奶茶店:

  • 你:“要一杯奶茶”
  • 店員:“???(冰的熱的?加糖嗎?大杯中杯?)”

代碼版悲劇

add(1, 2); // OK
add(1.5, 2.5); // 報錯:所需參數是int,卻傳遞double

2. 重載的正確打開方式

規則:方法名相同,參數列表不同(類型、個數、順序)

// 整型加法
public static int add(int a, int b) { return a + b; }// 浮點加法 
public static double add(double a, double b) { return a + b; }// 三數相加
public static int add(int a, int b, int c) { return a + b + c; }

注意返回值類型不同不算重載!下面這個會報錯:

public static int add(int a, int b) {...}
public static double add(int a, int b) {...} // 編譯錯誤

四、遞歸:程序員的"套娃"藝術

生活中的故事
從前有坐山,山上有座廟,廟里有個老和尚給小和尚將故事,講的就是:
"從前有座山,山上有座廟,廟里有個老和尚給小和尚講故事,講的就是:
“從前有座山,山上有座廟…”
“從前有座山……”
在這里插入圖片描述

1. 遞歸三要素

  • 出口條件:什么時候結束套娃
  • 遞推公式:如何把問題拆解成子問題
  • 調用自身:我調用我自己

階乘示例

public static int factorial(int n) {if (n == 1) { // 出口條件return 1;}return n * factorial(n - 1); // 遞推公式 + 調用自身
}

2. 遞歸執行過程(以factorial(5)為例)

factorial(5)
│
├─ 5 * factorial(4)
│     │
│     ├─ 4 * factorial(3)
│     │     │
│     │     ├─ 3 * factorial(2)
│     │     │     │
│     │     │     ├─ 2 * factorial(1)
│     │     │     │     │
│     │     │     │     └─ return 1
│     │     │     │
│     │     │     └─ return 2
│     │     │
│     │     └─ return 6
│     │
│     └─ return 24
│
└─ return 120

在這里插入圖片描述

3. 遞歸的坑:斐波那契數列的悲劇

public static int fib(int n) {if (n <= 2) return 1;return fib(n-1) + fib(n-2); // 重復計算爆炸!
}

改進方案:用循環或記憶化搜索


五、結語:方法使用的"三大紀律"

  1. 不要重復造輪子:能用方法就別復制粘貼
  2. 命名要見名知意:別用a1func2這種名字
  3. 單一職責原則:一個方法只做一件事

記住:好的方法設計,能讓你的代碼變得簡潔高效!


在這里插入圖片描述
JavaSE往期專欄

  • Java從入門到“放棄”(精通)之旅——啟航①
  • Java從入門到“放棄”(精通)之旅——數據類型與變量②
  • Java從入門到“放棄”(精通)之旅——運算符③
  • Java從入門到“放棄”(精通)之旅——程序邏輯控制④
    在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/76729.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/76729.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/76729.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

鴻蒙NEXT開發格式化工具類(ArkTs)

import { i18n } from kit.LocalizationKit;/*** 格式化工具類* 提供電話號碼格式化、歸屬地查詢、字符轉換等功能。* author: 鴻蒙布道師* since: 2025/04/14*/ export class FormatUtil {/*** 判斷傳入的電話號碼格式是否正確。* param phone - 待驗證的電話號碼* param coun…

[Python基礎速成]2-模塊與包與OOP

上篇??[Python基礎速成]1-Python規范與核心語法 目錄 Python模塊創建模塊與導入屬性__name__dir()函數標準模塊 Python包類類的專有方法 對象繼承多態 Python模塊 Python 中的模塊&#xff08;Module&#xff09;是一個包含 Python 定義和語句的文件&#xff0c;文件名就是模…

OSI參考模型和TCP/IP模型

1.OSI參考模型 OSI模型&#xff1a; OSI參考模型有7層&#xff0c;自下而上依次為物理層&#xff0c;數據鏈路層&#xff0c;網絡層&#xff0c;傳輸層&#xff0c;會話層&#xff0c;表示層&#xff0c;應用層。&#xff08;記憶口訣&#xff1a;物聯網叔會用&#xff09;。低…

linux Shell編程之循環語句(三)

目錄 一. for 循環語句 1. for語句的結構 2. for 語句應用示例 (1) 根據姓名列表批量添加用戶 (2) 根據 IP 地址列表檢查主機狀態 二. 使用 while 循環語句 1. while 語句的結構 2. while 語句應用示例 (1) 批量添加規律編號的用戶 (2) 猜價格游戲 三. until 循環語…

最新扣子實戰教程,利用扣子平臺通過在線表格記錄,批量生圖,再也不要一條條的粘貼提示詞了

1、功能描述 大家好&#xff0c;我是濤濤。今天我要給大家講解如何在扣子平臺上對接飛書電子表格。由于多維表格相對復雜&#xff0c;而很多業務場景其實只需要電子表格就能滿足&#xff0c;因此今天我們將演示如何在扣子平臺上讀取飛書電子表格并批量生成圖片。 先看效果&am…

java -jar指定類加載

在 Java 中&#xff0c;使用 java -jar 命令運行 JAR 文件時&#xff0c;默認會加載 JAR 文件的 MANIFEST.MF 文件中指定的 Main-Class。如果你想在運行時指定一個類來加載&#xff0c;可以通過以下方式實現&#xff1a; 方法 1&#xff1a;直接指定類路徑和類名 如果你不想使用…

多模態思維鏈(Multimodal Chain of Thought, MCoT)六大技術支柱在醫療領域的應用

多模態思維鏈(Multimodal Chain of Thought, MCoT)通過整合文本、圖像、視頻等多模態數據,結合邏輯推理與深度學習技術,在醫療領域展現出強大的應用潛力。其六大技術支柱在醫療場景中的具體應用如下: 一、推理構建視角:醫學診斷的流程優化 MCoT通過多模態推理鏈生成技術…

從文本到視頻:基于擴散模型的AI生成系統全解析(附PyTorch實現)

當語言遇見動態視覺 "用文字生成電影場景"曾是科幻作品中的幻想&#xff0c;如今借助擴散模型&#xff08;Diffusion Models&#xff09;正逐步成為現實。本文將手把手帶你實現一個創新的文本到視頻生成系統&#xff0c;通過深度解析擴散模型原理&#xff0c;結合獨…

科普:如何通過ROC曲線,確定二分類的“理論閾值”

在二分類問題中&#xff0c;已知預測概率&#xff08;如邏輯回歸、神經網絡輸出的概率值&#xff09;時&#xff0c;閾值的選擇直接影響分類結果&#xff08;正/負樣本判定&#xff09;。 一、實踐中的閾值選擇方法 1. 基于業務目標的調整 最大化準確率&#xff1a;適用于樣…

2025ArkTS基礎UI(一)——Column、Row、Text、Button組件

2025ArkTS基礎UI(一)——Column、Row、Text、Button組件 前言 臭寶們&#xff0c;今天我們來學習ArkTS基礎UI組件的使用&#xff0c;其中包括&#xff1a; Column、Row、Text、Button組件。 知識點 Colum、Row組件用于布局&#xff0c;Text、Image、Button組件用于展示。 …

強化學習:基于價值的方法做的是回歸,基于策略的方法做的是分類,可以這么理解嗎?

在強化學習領域,基于價值的方法(Value-based Methods)和基于策略的方法(Policy-based Methods)是兩種核心范式。本文將從目標函數、優化機制以及與機器學習任務的類比角度,探討這兩種方法是否可以被分別理解為回歸和分類任務,并深入分析其內在邏輯。 一、基于價值的方法…

折疊屏手機:技術進步了,柔性OLED面板測試技術需求跟上了嗎?

全球智能手機市場陷入創新焦慮&#xff0c;折疊屏手機被寄予厚望&#xff0c;2023 年出貨量同比增長 62%。但在供應鏈技術狂歡背后&#xff0c;存在諸多問題。消費端數據顯示&#xff0c;用戶使用頻率低&#xff0c;定價策略反常。產業鏈重構雖讓部分企業獲利&#xff0c;卻推高…

前端在線工具 CodePen 和 JSFiddle

前端在線工具 CodePen 和 JSFiddle CodePen 概述&#xff1a;CodePen 是一個社交化的前端開發環境&#xff0c;用戶可以在這里創建代碼片段&#xff08;稱為“Pens”&#xff09;&#xff0c;分享和展示自己的前端開發作品。 主要功能&#xff1a; 實時預覽&#xff1a;用戶在…

Redis-場景緩存+秒殺+管道+消息隊列

緩存一致性 1.兩次更新 先更新數據庫&#xff0c;再更新緩存&#xff1b;先更新緩存&#xff0c;再更新數據庫&#xff1b; 出現不一致問題場景&#xff1a; 先更新數據庫&#xff0c;再更新緩存&#xff1b; 先更新緩存&#xff0c;再更新數據庫&#xff1b; 兩次更新的適…

[Windows] 字體渲染 mactype v2025.4.11

[Windows] 字體渲染 mactype 鏈接&#xff1a;https://pan.xunlei.com/s/VONeCUP2hEgO5WIQImgtGUmrA1?pwdyruf# 025.4.11 Variable font support 可變字體支持已到來。 本版本將可變字體支持擴展到所有 GDI 應用程序。 所有 win32 程序中的字體&#xff0c;如 Noto Sans、Se…

【C++】深拷貝與淺拷貝

重開也不是不可能 ~.~ 淺拷貝 #include <iostream> #include <cstring>class ShallowCopyExample { public:int m_nValue;int* m_pData;// 構造函數&#xff0c;初始化指針成員ShallowCopyExample(int value) : m_nValue(value) {m_pData new int(0);*m_pData va…

SpringBoot企業級開發之【用戶模塊-更新用戶頭像】

功能如下所示&#xff1a; 我們先看一下接口文檔&#xff1a; 為什么頭像是一串字符串呢&#xff1f;因為我們是將頭像圖片放到第三方去存儲&#xff0c;比如&#xff1a;阿里云等 開發思路&#xff1a; 實操&#xff1a; 1.controller 注意!這里使用【PatchMapping】注解…

vue3+vite+js項目引入electron構建跨平臺桌面應用

1.準備工作 ① 必要安裝node.js、vue、vite、electron、pnpm 本人用的node版本v18.17.1、vue版本^3.4.19、vite版本^3.2.7、electron版本^35.1.4 ② 開發調試打包安裝 "devDependencies": {"concurrently": "^9.1.2","electron-builder&…

(51單片機)串口通訊(串口通訊教程)(串口接收發送教程)

前言&#xff1a; 今天有兩個項目&#xff0c;分別為&#xff1a; 串口接收: 串口發送&#xff1a; 如上圖將文件放在Keli5 中即可&#xff0c;然后燒錄在單片機中就行了 燒錄軟件用的是STC-ISP&#xff0c;不知道怎么安裝的可以去看江科大的視頻&#xff1a; 【51單片機入門…

《汽車制造技術基礎》第一次作業

作業內容 查閱相關資料&#xff0c;談談對汽車制造技術的發展的理解。 可以是關于汽車的先進制造技術 或 汽車先進制造技術 與 制造理念的發展趨勢 或 汽車先進制造技術對環境與可持續發展的影響等。 以下從技術突破、制造理念轉型及環境影響三個維度展開對汽車制造技…