欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java程序中方法的用法重載和遞歸

 更新時間:2021年10月25日 15:26:36   作者:波風張三  
Java語言中的“方法”在其他語言當中也可能被稱為“函數(shù)”(Function)。對于一些復(fù)雜的代碼邏輯,如果希望重復(fù)使用這些代碼,并且做到“隨時任意使用”,那么就可以將這些代碼放在一個大括號“{}”當中,并且起一個名字。使用代碼的時候,直接找到名字調(diào)用即可

前言

“方法”又被稱為“函數(shù)”,其他的編程語言也有這個概念,重要性不言而喻,在這個文章,將介紹如何定義和使用方法。

一、方法的基本用法

1.什么是方法

在Java中,方法定義在類中,它和類的成員屬性(數(shù)據(jù)成員)一起構(gòu)建一個完整的類。構(gòu)成方法有四大類——返回值類型、方法名稱、參數(shù)、方法體。

方法就像一個功能,當我們需要用到的時候,就去調(diào)用它,不用的時候就放到一邊。

也可以說它是一本工具書,當我們需要查看的時候,我們就會去找這本書查資料,不用的時候就放在書柜里面。

2.方法的基本定義

//方法定義
public static 方法返回值 方法名稱([參數(shù)類型 形參 …]){
方法體代碼;
[return 返回值];
}
// 方法調(diào)用
返回值變量 = 方法名稱(實參…);

可以看出,方法包含一個方法頭和一個方法體。

返回值類型:指定了方法返回的數(shù)據(jù)類型。它可以是任意有效的類型,包括構(gòu)造類型(類就是一種構(gòu)造類型)。如果方法沒有返回值,則其返回類型必須是void。方法體中的返回值類型要與方法頭中定義的返回值類型一致。

public class TestDemo {

    public static void main(String[] args) {
        int a = 10;
        int b = 20;

// 方法的調(diào)用
        int ret = add(a, b);
        System.out.println("ret = " + ret);
    }
// 方法的定義
    public static int add(int x, int y) {
        return x + y;
    }
}

在這里插入圖片描述

3.方法調(diào)用的執(zhí)行過程

  •  定義方法的時候, 不會執(zhí)行方法的代碼. 只有調(diào)用的時候才會執(zhí)行.
  • 當方法被調(diào)用的時候, 會將實參賦值給形參.
  • 參數(shù)傳遞完畢后, 就會執(zhí)行到方法體代碼.
  • 當方法執(zhí)行完畢之后(遇到 return 語句), 就執(zhí)行完畢, 回到方法調(diào)用位置繼續(xù)往下執(zhí)行.
  • 一個方法可以被多次調(diào)用

4.方法中的實參和形參

形參:

在定義一個方法時,參數(shù)列表中的參數(shù)個數(shù)至少為1個。

實參:

調(diào)用方法時,需要調(diào)用者提供與原方法定義相匹配的參數(shù)(類型、數(shù)量、順序都一致)

在這里插入圖片描述

那么形參與實參的關(guān)系又是怎樣的呢?

  • 形參變量隸屬于方法體,也就是說它們是方法的局部變量,只有在被調(diào)用的時候才被創(chuàng)建,才被臨時性分配內(nèi)存,在調(diào)用結(jié)束后,立即釋放所分配的內(nèi)存單元。也就是說,當方法調(diào)用返回后,就不能再使用這些參數(shù)了。
  • 在調(diào)用方法時,實參和形參在數(shù)量上、類型上、順序上應(yīng)嚴格保證一一對應(yīng)的關(guān)系,否則就會出現(xiàn)參數(shù)類型不匹配的錯誤,從而導(dǎo)致調(diào)用方法失敗。如下:

在這里插入圖片描述

二、方法的重載

1.重載的概念

【概念】

方法重載是指在一個類中定義多個同名的方法,但要求每個方法具有不同的參數(shù)的類型或參數(shù)的個數(shù)。調(diào)用重載方法時,Java編譯器能通過檢查調(diào)用的方法的參數(shù)類型和個數(shù)選擇一個恰當?shù)姆椒ā?/p>

2.例題分析

認真看下面例子中的add方法

  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);
        double a3 = 10.5;
        double b3 = 10.5;
        double c3 = 20.5;
        double ret3 = add(a3, b3, c3);
        System.out.println("ret3 = " + ret3);
    }

    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;
    }


在這里插入圖片描述

【總結(jié)】

方法的名字都叫 add. 但是有的 add 是計算 int 相加, 有的是 double 相加; 有的計算兩個數(shù)字相加, 有的是計算三個數(shù)
字相加.
同一個方法名字, 提供不同版本的實現(xiàn), 稱為 方法重載

【注意】

一.方法名一定要相同。
二.方法的參數(shù)表必須不同,包括參數(shù)的類型或個數(shù),以此區(qū)分不同的方法體。
1.如果參數(shù)個數(shù)不同,就不管它的參數(shù)類型了!
2.如果參數(shù)個數(shù)相同,那么參數(shù)的類型必須不同。
三.方法的返回類型、修飾符可以相同,也可不同。

data = pd.read_csv(
    'https://labfile.oss.aliyuncs.com/courses/1283/adult.data.csv')
print(data.head())

三、方法的遞歸

1.遞歸定義

簡單來說,遞歸算是套娃。
從前有座山,山里有座廟,廟里有個老和尚,老和尚正在給小和尚講故事:從前有座山,山里有座廟,廟里有個老和尚,老和尚正在給小和尚講故事:…

除非老和尚不講了,否則這個故事就一直套娃下去。

遞歸,就是在運行的過程中調(diào)用自己。

構(gòu)成遞歸需具備的條件:

  • 子問題須與原始問題為同樣的事,且更為簡單;
  • 不能無限制地調(diào)用本身,須有個出口,化簡為非遞歸狀況處理。

2.例題分析

舉個例子:遞歸求 N 的階乘

 public static void main(String[] args) {
        int n = 5;
        int ret = factor(n);
        System.out.println("ret = " + ret);
    }
    public static int factor(int n) {
        System.out.println("函數(shù)開始, n = " + n);
        if (n == 1) {
            System.out.println("函數(shù)結(jié)束, n = 1 ret = 1");
            return 1;
     }else{
            int ret = n * factor(n - 1);
            System.out.println("函數(shù)結(jié)束, n = " + n + " ret = " + ret);
            return ret;
        }
    }

分析遞歸過程如下:

在這里插入圖片描述

在這里插入圖片描述

在這里插入圖片描述

3.遞歸應(yīng)用場景

遞歸算法一般用于解決三類問題:

  • 數(shù)據(jù)的定義是按遞歸定義的。(Fibonacci函數(shù))
  • 問題解法按遞歸算法實現(xiàn)。這類問題雖則本身沒有明顯的遞歸結(jié)構(gòu),但用遞歸求解比迭代求解更簡單,如Hanoi問題。
  • 數(shù)據(jù)的結(jié)構(gòu)形式是按遞歸定義的。如二叉樹、廣義表等,由于結(jié)構(gòu)本身固有的遞歸特性,則它們的操作可遞歸地描述。

【注意】

雖然遞歸操作有很多的優(yōu)點,但是缺點也很明顯

  • 使用遞歸實現(xiàn)需要函數(shù)壓棧和彈棧的操作,所以程序的運行速度比不用遞歸實現(xiàn)要慢得多。如果操作不慎,還極易出現(xiàn)死循環(huán),所以在使用遞歸一定要設(shè)置遞歸操作的終止條件。

下面給大家推薦遞歸的兩個經(jīng)典例題:

  • 求斐波那契數(shù)列的第 N 項
  • 求解漢諾塔問題(提示, 使用遞歸)
  • 青蛙跳臺階問題(提示, 使用遞歸)

有興趣的同學(xué)可以去自行嘗試!

總結(jié)

最近在看《士兵突擊》,迷惘了,希望能夠找點東西激勵自己?!妒勘粨簟吩谀撤N程度上,真的讓我感悟良多。推薦大家去看看。
里面的臺詞讓我受益良多。
“心穩(wěn)了,手也就穩(wěn)了”
“想到和得到之間還有兩個字,就是做到”

各位,共勉了!

到此這篇關(guān)于Java程序中方法的用法重載和遞歸的文章就介紹到這了,更多相關(guān)Java 方法 內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • SpringBoot項目微信云托管入門部署實踐

    SpringBoot項目微信云托管入門部署實踐

    本文主要介紹了SpringBoot項目微信云托管入門部署實踐,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • Java中可以實現(xiàn)負載均衡的算法詳解

    Java中可以實現(xiàn)負載均衡的算法詳解

    這篇文章主要介紹了Java中可以實現(xiàn)負載均衡的算法詳解,在Java中,有多種算法可以實現(xiàn)負載均衡,下面是兩個常見的算法示例,隨機算法和輪詢算法,需要的朋友可以參考下
    2023-08-08
  • java將XML文檔轉(zhuǎn)換成json格式數(shù)據(jù)的示例

    java將XML文檔轉(zhuǎn)換成json格式數(shù)據(jù)的示例

    本篇文章主要介紹了java將XML文檔轉(zhuǎn)換成json格式數(shù)據(jù)的示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-12-12
  • springboot部署linux訪問服務(wù)器資源的方法

    springboot部署linux訪問服務(wù)器資源的方法

    這篇文章主要介紹了springboot部署linux訪問服務(wù)器資源,部署springboot項目至服務(wù)器用了幾種不同方法,文中給大家詳細介紹,需要的朋友可以參考下
    2019-12-12
  • Java多線程中的CyclicBarrier使用方法詳解

    Java多線程中的CyclicBarrier使用方法詳解

    這篇文章主要介紹了Java多線程中的CyclicBarrier使用方法詳解,CyclicBarrier是一種同步輔助工具,它允許一組線程都等待對方到達公共障礙點,在涉及固定大小的線程的程序中,CyclicBarriers非常有用,這些線程間必須相互等待,需要的朋友可以參考下
    2023-12-12
  • springboot整合shiro登錄失敗次數(shù)限制功能的實現(xiàn)代碼

    springboot整合shiro登錄失敗次數(shù)限制功能的實現(xiàn)代碼

    這篇文章主要介紹了springboot整合shiro-登錄失敗次數(shù)限制功能,實現(xiàn)此功能如果是防止壞人多次嘗試,破解密碼的情況,所以要限制用戶登錄嘗試次數(shù),需要的朋友可以參考下
    2018-09-09
  • java獲取登錄者IP和登錄時間的兩種實現(xiàn)代碼詳解

    java獲取登錄者IP和登錄時間的兩種實現(xiàn)代碼詳解

    這篇文章主要介紹了java獲取登錄者IP和登錄時間的實現(xiàn)代碼,本文通過兩種結(jié)合實例代碼給大家介紹的非常詳細,對大家的學(xué)習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-07-07
  • Spring三級緩存思想解決循環(huán)依賴總結(jié)分析

    Spring三級緩存思想解決循環(huán)依賴總結(jié)分析

    這篇文章主要為大家介紹了Spring三級緩存思想解決循環(huán)依賴總結(jié)分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-08-08
  • MyBatis-Plus代碼生成器的使用詳解

    MyBatis-Plus代碼生成器的使用詳解

    這篇文章主要介紹了MyBatis-Plus代碼生成器的使用詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習或者工作具有一定的參考學(xué)習價值,需要的朋友們下面隨著小編來一起學(xué)習學(xué)習吧
    2020-11-11
  • Java基礎(chǔ)之枚舉Enum類案例詳解

    Java基礎(chǔ)之枚舉Enum類案例詳解

    這篇文章主要介紹了Java基礎(chǔ)之枚舉Enum類案例詳解,文中有非常詳細的代碼示例,對正在學(xué)習java基礎(chǔ)的小伙伴們有很好的幫助,需要的朋友可以參考下
    2021-05-05

最新評論