Java方法的重載

方法重載

1. 為什么需要方法重載

public class TestMethod{public static void main (String[] args){int a = 10;int b = 20;int ret = add(a,b);System.out.println("ret = "+ret);double a2 = 10.5;double b2 = 20.5;double ret2 = add(a2,b2);System.out.println("ret2 = "+ret2);}public static int add(int x,int y){return x + y;}}//編譯出錯Test.java:13: 錯誤: 不兼容的類型: 從double轉換到int可能會有損失double ret 2 = add ( a2 , b2 ) ;^

由于參數類型不匹配,所以不能直接使用現有的 add 方法。

一種比較簡單粗暴的解決方法如下:

public class TestMethod{public ststic void main(String[] args){int a = 10;int b = 20;int ret = addInt(a,b);sout("ret = " + ret);double a2 = 10.5;double b2 = 20.5;double ret2 = addDouble(a2, b2);System.out.println("ret2 = " + ret2);}public static int addInt(int x, int y) {return x + y;}public static double addDouble(double x, double y) {return x + y;}}

上述代碼確實可以解決問題,但不友好的地方是:需要提供許多不同的方法名,而取名字本來就是讓人頭疼的事 情。那能否將所有的名字都給成 add 呢?


2. 方法重載概念

在自然語言中,經常會出現“一詞多義”的現象,比如:“好人”

在自然語言中,一個詞語如果有多重含義,那么就說該詞語被重載了,具體代表什么含義需要結合具體的場景。在Java中方法也是可以重載的。

在Java中,如果多個方法的名字相同,參數列表不同,則稱該幾種方法被重載了。

public class TestMethod {public static void main(String[] args) {add(1, 2); // 調用add(int, int)add(1.5, 2.5); // 調用add(double, double)add(1.5, 2.5, 3.5); // 調用add(double, double, double)}public static int add(int x, int y) {return x + y;}public static double add(double x, double y) {return x + y;}public static double add(double x, double y, double z) {return x + y + z;}}

注意:

  1. 方法命必須相同

  2. 參數列表必須不同(參數的個數不同、參數的類型不同、類型的次序必須不同)

  3. 與返回值類型是否相同無關

//注意:兩個方法如果僅僅只是因為返回值類型不同,是不能構成重載的public class TestMethod{public static void main(String[] args){int a = 10;int b = 20;int ret = add(a,b);System.out.println}("ret = "+ ret);}public static int add(int x,int y){return x + y;}public static double add(int x,int y){return x + y;}}//編譯出錯Test.java:13: 錯誤: 已在類 Test中定義了方法 add(int,int)public static double add(int x, int y) {^1 個錯誤

4.編譯器在編譯代碼時,會對實參類型進行推演,根據推演結果來確定調用哪個方法


3. 方法簽名

在同一個作用域中不能定義兩個相同名稱的標識符。比如:方法中不能定義兩個名字一樣的變量,那為什么類中就可以定義方法名相同的方法呢?

方法簽名即:經過編譯器編譯修改過后方法最終的名字。具體方式:方法全路徑名+參數列表+返回值類型,構成方法完整的名字

public class TestMethod {public static int add(int x, int y){return x + y;}public static double add(double x, double y){return x + y;}public static void main(String[] args) { add(1,2);add(1.5, 2.5);}

}

上述代碼經過編譯之后,然后使用JDK自帶的javap反匯編工具查看,具體操作:

  1. 先對工程進行編譯生成.class字節碼文件

  2. 在控制臺中進入到要查看的.class所在的目錄

  3. 輸入:javap -v字節文件名字即可

方法簽名中的一些特殊符號說明:

特殊字符數據類型
Vvoid
Zboolean
Bbyte
Cchar
Sshort
Iint
Jlong
Ffloat
Ddouble
[數組(以[開頭,配合其他的特殊字符,表述對應數據類型的數組,幾個[表述幾維數組)
L引用類型,以L開頭,以;結尾,中間是引用類型的全類名

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

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

相關文章

《QT實用小工具·六十二》基于QT實現貝塞爾曲線畫炫酷的波浪動畫

1、概述 源碼放在文章末尾 該項目實現了通過貝塞爾曲線畫波浪動畫,可控制 顏色密度速度加速度 安裝與運行環境 語言:C 框架:Qt 11.3 平臺:Windows 將屏幕水平平均分為10塊,在一定范圍內隨機高度的12個點(…

飛天使-k8s知識點29-kubernetes安裝1.28.0版本

文章目錄 選用版本初始化服務器,自己修改里面的ipreboot haproxy安裝 ,可以參考我之前寫的內核參數調整,安裝docker 安裝cri-dockerd開始安裝集群工具下載鏡像以及啟用完畢之后 此時的coredns 不通結果展示 選用版本 k8s 1.24版本之前還可以使用docker&…

【初階數據結構】順序表OJ題講解

前言 📚作者簡介:愛編程的小馬,正在學習C/C,Linux及MySQL。 📚本文收錄與初階數據結構系列,本專欄主要是針對時間、空間復雜度,順序表和鏈表、棧和隊列、二叉樹以及各類排序算法,持…

基于ambari hdp的kafka用戶授權讀寫權限

基于ambari hdp的kafka用戶授權讀寫權限 版本Kafka 2.0.0添加自定義配置修改admin密碼重啟kafka授權讀取授權寫入有效通配符部分舉例 版本Kafka 2.0.0 添加自定義配置 authorizer.class.name kafka.security.auth.SimpleAclAuthorizer super.users User:admin allow.everyo…

【LLM 論文】Step-Back Prompting:先解決更高層次的問題來提高 LLM 推理能力

論文:Take a Step Back: Evoking Reasoning via Abstraction in Large Language Models ???? Google DeepMind, ICLR 2024, arXiv:2310.06117 論文速讀 該論文受到的啟發是:人類再解決一個包含很多細節的具體問題時,先站在更高的層次上解…

Android 屏幕適配全攻略(上)-掌握屏幕單位,應對千變萬化的設備

本文從 Android 開發中常見的長度單位 px、dp、sp 入手,詳細介紹了它們的特點及轉換關系。 接著深入探討了屏幕尺寸、分辨率、像素密度等重要的屏幕指標,幫助讀者全面理解它們之間的聯系。最后,通過實例代碼演示了如何在代碼中進行單位轉換&…

三分鐘上手安全滲透系統Kali Linux

kali linux系統集成了常用的安全滲透工具,省去了安裝工具的時間,做安全相關的工作是非常推薦使用的。 安裝Kalii Linux 安裝系統 一般使用虛擬機進行安裝,Kali Linux基于Debian內核,虛擬機的操作系統選擇Debian 7.x 64 選擇系統…

【SRC實戰】一鍵完成全部任務獲取獎勵

挖個洞先 https://mp.weixin.qq.com/s/LkPfJuuP1K8vaFXRn-8wVg “ 以下漏洞均為實驗靶場,如有雷同,純屬巧合 ” 01 — 漏洞證明 一、業務邏輯 “ 如何欺騙APP完成任務獲取獎勵? ” 1、記錄金幣數量20 2、瀏覽商品詳情頁 3、點擊瀏覽提…

我們應該如何做參與式觀察

記得多年以前,有個朋友問我:對于做觀察,有人通過教授繪畫技巧來教人如何做觀察。你們研究員又不會畫畫,你們如何讓人相信你們更會觀察呢?坦率說,當時我被問住了,因為我從來沒有進行過這樣的對比…

day5Qt作業

服務器端 #include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this);//準備組件,初始化組件狀態this->setFixedSize(800,600);chatwidget new QListWidge…

代碼隨想錄算法訓練營第四十九天| 123.買賣股票的最佳時機III,188.買賣股票的最佳時機IV

目錄 題目鏈接:123.買賣股票的最佳時機III 思路 代碼 題目鏈接:188.買賣股票的最佳時機IV 思路 代碼 總結 題目鏈接:123.買賣股票的最佳時機III 思路 與之前買賣股票不同的是本題要求最多買賣兩次,那么dp數組以及遞推公式都…

攻擊者正在利用AI,對保險公司發起大規模欺詐

保險欺詐一直是保險行業面臨的重要挑戰之一,尤其隨著技術的進步,欺詐者也在不斷更新其手段,利用AI技術,包括生成式模型、機器學習和數據分析工具等欺騙保險公司,而AI技術的應用正成為他們的新工具,使其犯罪…

如何打造個人IP?

打造個人IP(Intellectual Property)是當今社會中越來越受到關注的話題。個人IP指的是個人在某個領域內所擁有的獨特的、具有商業價值的知識、技能、品牌和影響力。為什么要打造個人IP?如何打造個人IP?下面我將為您詳細解答。 首先…

Navicat連接遠程數據庫時,隔一段時間不操作出現的卡頓問題

使用 Navicat 連接服務器上的數據庫時,如果隔一段時間沒有使用,再次點擊就會出現卡頓的問題。 如:隔一段時間再查詢完數據會出現: 2013 - Lost connection to MySQL server at waiting for initial communication packet, syste…

LinkedList鏈表

LinkedList 的全面說明 LinkList底層實現了雙向鏈表和雙端隊列特點可以添加任意元素(元素可以重復),包括null線程不安全,沒有實現同步 LinkedList 的底層操作機制 LinkedList底層維護了一個雙向鏈表LinkList中維護了兩個屬性fi…

【算法入門賽】A.坐標變換(推薦學習)C++題解與代碼

比賽鏈接:https://www.starrycoding.com/contest/8 題目描述 武漢市可以看做一個二維地圖。 牢 e e e掌握了一項特異功能,他可以“瞬移”,每次瞬移需要分別設定 x x x和 y y y的偏移量 d x dx dx和 d y dy dy,瞬移完成后位置會…

【Fastadmin】表格列改input框輸入編輯,以排序權重為例

目錄 1.自定義權重排序,以字段sort為例 js列代碼 在// 初始化表格table.bootstrapTable({ });的后面添加事件 api里面增加formatter方法,如果存在角色權限問題,控制器添

谷歌外鏈怎么發?

既要數量也要質量,要保證你的鏈接廣泛分布,在數量上,確實需要你的鏈接在各種平臺上有所展現,這樣能提升你網站的知名度和曝光率,但是,光有數量是不夠的,如果這些鏈接的內容不行,那對…

ARIMA模型在河流水質預測中的應用_含代碼

#水質模型 #時間序列 #python應用 ARIMA 時間序列模型簡介 時間序列是研究數據隨時間變化而變化的一種算法,是一種預測性分析算法。它的基本出發點就是事物發展都有連續性,按照它本身固有的規律進行。ARIMA(p,d,q)模型全稱為差分自回歸移動平均模型 (A…

SSH文件傳輸

一、設置SSH密鑰對,實現記住密碼 要避免每次使用scp或ssh時都輸入密碼,你可以設置SSH密鑰對(一對公鑰和私鑰),并將公鑰添加到遠程服務器上。這樣,你的系統可以通過密鑰自動驗證身份,而無需手動…