Java可變參數:靈活編程的秘密武器

Java可變參數的理解與應用

Java中的可變參數(Varargs)允許方法接受數量不定的同類型參數,簡化了方法調用時的參數傳遞。可變參數通過在參數類型后添加...實現,本質上是一個數組,但在調用時可以傳入多個單獨的參數。

可變參數的基本語法

可變參數的聲明格式如下:

public void methodName(Type... parameterName) {// 方法體
}

可變參數的使用場景

可變參數適用于參數數量不確定但類型相同的場景,例如日志記錄、數值計算等。需要注意的是:

  1. 一個方法只能有一個可變參數
  2. 可變參數必須是方法的最后一個參數

代碼示例:基礎應用

public class VarargsDemo {// 計算任意數量整數的和public static int sum(int... numbers) {int total = 0;for (int num : numbers) {total += num;}return total;}public static void main(String[] args) {System.out.println(sum(1, 2));          // 輸出3System.out.println(sum(1, 2, 3, 4));    // 輸出10System.out.println(sum());              // 輸出0}
}

可變參數與數組參數的區別

雖然可變參數本質上轉換為數組,但調用方式更靈活:

// 數組參數方法
public static void arrayMethod(int[] arr) {// 必須傳入數組
}// 可變參數方法
public static void varargsMethod(int... nums) {// 可以傳入多個單獨參數
}// 調用對比
arrayMethod(new int[]{1, 2, 3});  // 必須構造數組
varargsMethod(1, 2, 3);           // 可直接傳入多個參數
varargsMethod(new int[]{1, 2, 3}); // 也可以傳入數組

可變參數的高級用法

可變參數可以與其他固定參數組合使用:

public class AdvancedVarargs {// 打印消息前綴和任意數量的值public static void printValues(String prefix, Object... values) {System.out.print(prefix + ": ");for (Object val : values) {System.out.print(val + " ");}System.out.println();}public static void main(String[] args) {printValues("Numbers", 1, 2.5, "three");  // 輸出:Numbers: 1 2.5 three printValues("Alert");                     // 輸出:Alert: }
}

實例一:

package com.itheima.a06args;public class ArgsDemo3 {public static void main(String[] args) {//JDK5//可變參數//方法形參的個數是可以發生變化的,0 1 2 3 ...//格式:屬性類型...名字//int...argsint sum = getSum(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);System.out.println(sum);}//底層://可變參數底層就是一個數組//只不過不需要我們自己創建了,Java會幫我們創建好public static int getSum(int...args){//System.out.println(args);//[I@119d7047int sum = 0;for (int i : args) {sum = sum + i;}return sum;}
}

實例二:

package com.itheima.a06args;public class ArgsDemo4 {public static void main(String[] args) {//可變參數的小細節://1.在方法的形參中最多只能寫一個可變參數//可變參數,理解為一個大胖子,有多少吃多少//2.在方法的形參當中,如果出了可變參數以外,還有其他的形參,那么可變參數要寫在最后getSum(1,2,3,4,5,6,7,8,9,10);}public static int getSum( int a,int...args) {return 0;}
}

可變參數的注意事項

  1. 避免在性能關鍵路徑上過度使用可變參數,因為每次調用都會創建新數組
  2. 當存在多個重載方法時,可變參數方法可能引發歧義
  3. 可變參數可以接受空參數(0個參數),此時會創建空數組而非null
// 可能導致歧義的例子
public static void confusing(Object... objs) {}
public static void confusing(String s, Object... objs) {}// 調用時可能產生編譯錯誤
confusing("hello");  // 兩個方法都匹配,編譯器無法確定

1. 可變參數本質上就是一個數組
2. 作用:在形參中接收多個數據
3. 格式:數據類型...參數名稱
? ?舉例:int...a
4. 注意事項:
? ?- 形參列表中可變參數只能有一個
? ?- 可變參數必須放在形參列表的最后面

通過合理使用可變參數,可以顯著提高代碼的靈活性和可讀性,特別是在需要處理不定數量參數的場景下。

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

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

相關文章

汽車 CDC威脅分析與風險評估

汽車 CDC(連續阻尼控制系統)的威脅分析與風險評估需結合其技術特性、應用場景及行業標準展開。以下是詳細解析及實例說明: 一、CDC 系統技術原理與結構 CDC(Continuous Damping Control)通過實時調節懸掛阻尼力提升駕…

TensorFlow 安裝與 GPU 驅動兼容(h800)

環境說明TensorFlow 安裝與 GPU 驅動兼容CUDA/H800 特殊注意事項PyCharm 和終端環境變量設置方法測試 GPU 是否可用的 Python 腳本 # 使用 TensorFlow 2.13 在 NVIDIA H800 上啟用 GPU 加速完整指南在使用 TensorFlow 進行深度學習訓練時,充分利用 GPU 能力至關重要…

Laravel 項目中圖片上傳后無法訪問的問題

情況: Laravel 提供了 php artisan storage:link 命令,用于創建符號鏈接(Symbolic Link),將 storage/app/public 映射到 public/storage。但是上傳圖片之后 文件目錄確實有 但是無法訪問。 1. 刪除已經創建的 rm -rf…

Tesollo攜人形機器人手進軍國內市場

Tesollo靈巧手是Tesollo公司研發的一系列機器人靈巧手產品,涵蓋兩指到五指的設計 產品型號與特點 Delto-5F五指靈巧手:具備20個自由度,每個手指配備4個獨立關節,抓握力達到7公斤,每個關節空載可達75轉/分鐘&#xff0…

Python文件操作的“保險箱”:with語句深度實戰指南

目錄 一、with語句的底層運作原理 資源獲取階段 資源釋放階段 二、文件操作實戰場景解析 場景1:基礎文件讀寫 場景2:異常處理進階 場景3:復合資源管理 三、自定義上下文管理器 四、with語句的性能考量 五、實戰經驗總結 在Python編程中,文件操作是日常開發的高頻…

openKylin高校沙龍 | 走進成都高校,推動開源技術交流與人才培養

openKylin高校沙龍 | 成都高校 4月25日,CCF開源發展委員會“開源高校行”暨紅山開源openKylin高校行成都站圓滿舉辦,這場連接兩所大學的開源知識盛會,為成都信息工程大學與電子科技大學的300余名與會師生帶來了前沿的行業思考與技術實踐。Op…

即夢3.0更新后市面上的的評價如何?

設計師緊握數位板縮在墻角,全息投影中的AI正在生成同風格設計圖,地面倒影顯示“人類設計師生涯倒計時”。當最新一代AI繪圖工具悄然開啟測試時,設計圈陷入集體震動——有人驚嘆“以后還干XX,都回家賣煎餅吧”,也有人徹…

haproxy搭建nginx網站訪問

文章目錄 一.案例概述2.1 HTTP請求2.2 負載均衡常用調度算法①RR(Round robin)②LC(least connections)③SH(source hashing) 2.3 常見的web群集調度器3.實驗環境 二.實驗步驟1.兩臺web網站步驟相同 安裝we…

進程間通信之socketpair

進程間通信之socketpair 源代碼 #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <sys/types.h> #include <sys/socket.h> #include <sys/wait.h>int main() {//父子通訊管道int m_pipe[2];//創建管道if(socketpa…

跟著AI學習C# Day29

&#x1f4c5; Day 29&#xff1a;C# 綜合進階知識回顧與職業發展建議 ? 學習目標&#xff1a; 回顧 C# 進階學習路徑&#xff1b;總結核心知識點&#xff0c;構建完整的技能體系&#xff1b;理解 C# 高級開發者應具備的核心能力&#xff1b;探索 C# 在不同技術領域的應用場…

茶席布置實訓室:傳承與創新的茶文化空間

一、茶席布置實訓室的重要意義 茶席布置實訓室是茶文化傳承與創新的重要載體。在現代社會&#xff0c;茶文化的弘揚不僅是對傳統的尊重&#xff0c;更是對生活品質和精神境界的追求。茶席布置實訓室為人們提供了一個專業、系統地學習和實踐茶文化的場所。它將理論知識與實際操…

jar is missing

在父POM中通過dependencyManagement統一管理版本&#xff0c;然后在子模塊中省略版本號。

Linux 內核中 TCP 協議棧的輸出實現:tcp_output.c 文件解析

在網絡通信領域,TCP(傳輸控制協議)作為核心的傳輸層協議,確保了數據在網絡中的可靠傳輸。Linux 內核中的 TCP 協議棧實現復雜而高效,其中 net/ipv4/tcp_output.c 文件是整個 TCP 協議棧的關鍵組成部分,負責處理數據包的發送、重傳、連接管理等核心功能。本文將深入解析該…

MySQL分頁原理與慢SQL優化實戰

分頁查詢的本質 在Web應用中&#xff0c;分頁是處理大量數據的常見需求。MySQL中的分頁通常使用LIMIT offset, size語法實現&#xff0c;例如&#xff1a; SELECT * FROM users ORDER BY id LIMIT 10000, 20; 這條語句看似簡單&#xff0c;但隱藏著性能陷阱。讓我們深入理解…

Taro:跨端開發的終極解決方案

在當今多終端并存的互聯網時代&#xff0c;開發者經常面臨一個難題&#xff1a;如何高效地為不同平臺&#xff08;如微信小程序、H5、React Native 等&#xff09;開發功能一致的應用&#xff1f;傳統的開發方式需要針對每個平臺單獨編寫代碼&#xff0c;不僅效率低下&#xff…

STM32F103C8T6 學習筆記摘要(三)

第一節 跑馬燈實驗 1. 了解電路 結構圖 說明一下&#xff1a; 那幾個LED的引腳線和數碼管的是一樣的&#xff0c;如果不想讓LED亮&#xff0c;就可以把J11的接線帽拔了這里的引腳是PA0-PA7 原理圖 說明一下&#xff1a; 當J11接線帽蓋上時&#xff0c;VCC3.3_LED就會有一個正…

GitHub Copilot 配置快捷鍵

GitHub Copilot 常用快捷鍵&#xff08;VS Code&#xff09; 功能快捷鍵&#xff08;Windows/Linux&#xff09;快捷鍵&#xff08;macOS&#xff09;接受建議&#xff08;選中的&#xff09;TabTab下一個建議Alt ]Option ]上一個建議Alt [Option [手動觸發建議Ctrl Ente…

C++異常處理:深入理解與實踐指南

C異常處理&#xff1a;深入理解與實踐指南 在現代編程中&#xff0c;異常處理是確保程序健壯性和可靠性的重要機制。C作為一種功能強大的編程語言&#xff0c;提供了豐富的異常處理機制&#xff0c;幫助開發者應對程序運行時可能出現的各種意外情況。本文將深入探討C異常處理的…

MySQL數據庫的類型

文章目錄 數值類型tinyint類型bit類型小數類型decimal 日期類型日期和時間類型 字符串類型charvarchar enum和set 數值類型 類型大小范圍&#xff08;有符號&#xff09;范圍&#xff08;無符號&#xff09;用途TINYINT1 Bytes(-128&#xff0c;127)(0&#xff0c;255)小整數值…

【Docker基礎】Docker鏡像管理:docker build詳解

目錄 1 Docker鏡像基礎概念 1.1 什么是Docker鏡像 1.2 鏡像的分層結構 2 docker build命令詳解 2.1 docker build基本語法 2.2 構建上下文概念 3 Dockerfile編寫實踐示例 3.1 Dockerfile指令詳解 3.1.1 FROM 3.1.2 RUN 3.1.3 COPY vs ADD 3.1.4 CMD vs ENTRYPOINT …