最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java由淺入深全面講解方法的使用

 更新時(shí)間:2022年04月29日 16:46:24   作者:影子,你陪著我累嗎?  
方法,也稱函數(shù),如果想要重復(fù)一段或者多段代碼塊的使用,可以將這些代碼封裝成一個(gè)方法,方法具體表現(xiàn)為某種行為,使用方法可以提高代碼的復(fù)用性

一、方法的概念及其使用

1.1、什么是方法

方法就是一個(gè)代碼片段. 類似于 C 語言中的 “函數(shù)”。作用如下:

1. 是能夠模塊化的組織代碼(當(dāng)代碼規(guī)模比較復(fù)雜的時(shí)候).

2. 做到代碼被重復(fù)使用, 一份代碼可以在多個(gè)位置使用.

3. 讓代碼更好理解更簡單.

4. 直接調(diào)用現(xiàn)有方法開發(fā), 不必重復(fù)造輪子.

1.2、方法的定義

定義格式:

示例:寫函數(shù)實(shí)現(xiàn)求多少項(xiàng)的階乘的和

public class TeseDemo220424 {
//    計(jì)算某一個(gè)數(shù)的階乘
    public static int func(int n){
        int ret = 1;
        for(int i = 1;i <= n;i++){
            ret *= i;
        }
        return ret;
    }
//    計(jì)算前多少項(xiàng)階乘之和
    public static int func1(int k){
        int sum = 0;
        for(int i = 1;i <= k;i++){
            sum += func(i);
        }
        return sum;
    }
    public static void main(String[] args) {
//        寫函數(shù)來求階乘之和
        Scanner myscanner = new Scanner(System.in);
        System.out.println("請(qǐng)輸入你想要求取前多少項(xiàng)的階乘的和:");
        int num = myscanner.nextInt();
        int sum = func1(num);
        System.out.println("前 " + num + "項(xiàng)的階乘和為" + sum);
    }
}

注意:

1. 修飾符:現(xiàn)階段直接使用public static 固定搭配(因?yàn)閙ain方法是public static ,所以在里面調(diào)用的也只能是靜態(tài)的方法)。

2. 返回值類型:如果方法有返回值,返回值類型必須要與返回的實(shí)體類型一致,如果沒有返回值,必須寫成void。

3. 方法名字:采用小駝峰命名。

4. 參數(shù)列表:如果方法沒有參數(shù),()中什么都不寫,如果有參數(shù),需指定參數(shù)類型,多個(gè)參數(shù)之間使用逗號(hào)隔開。

5. 方法體:方法內(nèi)部要執(zhí)行的語句。

6. 在java當(dāng)中,方法必須寫在類當(dāng)中。

7. 在java當(dāng)中,方法不能嵌套定義。

8. 在java當(dāng)中,沒有方法聲明一說。(聲明與定義不區(qū)分)

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

調(diào)用過程:

調(diào)用方法—>傳遞參數(shù)—>找到方法地址—>執(zhí)行被調(diào)方法的方法體—>被調(diào)方法結(jié)束返回—>回到主調(diào)方法繼續(xù)往下執(zhí)行

形象圖示:

注意:

1,定義方法的時(shí)候, 不會(huì)執(zhí)行方法的代碼. 只有調(diào)用的時(shí)候才會(huì)執(zhí)行.

2,一個(gè)方法可以被多次調(diào)用.

1.4、實(shí)參和形參的關(guān)系(重要)

對(duì)于形參與實(shí)參的關(guān)系,大家肯定不陌生,那就是形參是實(shí)參的一份臨時(shí)拷貝,也就是說形參的改變不會(huì)影響到實(shí)參。

具體原因圖示:(因?yàn)榫唧w涉及到函數(shù)棧幀的問題比較復(fù)雜,這里就給大家簡略的解釋下)

所以,由圖可以知道,傳值調(diào)用的話,形參與實(shí)參的值根本就不是存儲(chǔ)在同一個(gè)空間,所以而這不會(huì)相互干擾,在C語言中,如果你希望形參的改變能夠影響到實(shí)參,那就必須是傳址調(diào)用,但是在Java里面沒有傳址這種說法,解決方法只能是利用引用(具體后面會(huì)詳細(xì)介紹)。

二、方法的重載

2.1、為什么需要方法重載

public class TestDemo220426 {
    public static int addInt(int x,int y){
        return x + y;
    }
    public static double addDouble(double x,double y){
        return x + y;
    }
    public static void main(String[] args) {
        int a = 10;
        int b = 10;
        int ret = addInt(a,b);

        double c = 11.1;
        double d = 12.1;
        double ret1 = addDouble(c,d);
    }
}

看這段代碼,addint,adddouble這兩個(gè)方法,目的都是為了求兩個(gè)數(shù)的和,但是你得定義兩個(gè)不同的函數(shù),函數(shù)名不同,但往往有時(shí)候取名字又是一件頭疼的事,所以既然方法的本質(zhì)功能都是一樣的,只是可能參數(shù)不同,那我們能不能都用同一個(gè)函數(shù)名呢?

答案是肯定的,而這種就叫做方法的重載。

2.2、方法重載的定義

在Java中,如果多個(gè)方法的名字相同,參數(shù)列表不同,則稱該幾種方法被重載了。也就是一個(gè)名字但卻有不同的涵義。

public class TestDemo220426 {
    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) {
        int a = 10;
        int b = 10;
        int ret = add(a,b);
        System.out.println(ret);
        double c = 11.1;
        double d = 12.1;
        double ret1 = add(c,d);
        System.out.println(ret1);
    }
}

程序運(yùn)行截圖:

由上面的程序可以看出,都是實(shí)現(xiàn)相加的功能,但是定義的是兩個(gè)不同的函數(shù)實(shí)現(xiàn),只是函數(shù)名一樣,這就是函數(shù)重載。編譯器會(huì)根據(jù)你傳入的參數(shù)的不同去調(diào)用相應(yīng)的函數(shù)。

注意:

1. 方法名必須相同。

2. 參數(shù)列表必須不同(參數(shù)的個(gè)數(shù)不同、參數(shù)的類型不同、類型的次序必須不同)(需要以參數(shù)來區(qū)分)

3. 與返回值類型是否相同無關(guān)

4. 不能定義僅僅以返回值區(qū)分的兩個(gè)函數(shù),這樣不能構(gòu)成重載

5. 編譯器在編譯代碼時(shí),會(huì)對(duì)實(shí)參類型進(jìn)行推演,根據(jù)推演的結(jié)果來確定調(diào)用哪個(gè)方法

2.3、方法簽名

方法簽名即:經(jīng)過編譯器編譯修改過之后方法最終的名字。具體方式:方法全路徑名+參數(shù)列表+返回值類型,構(gòu)成方法完整的名字。用來區(qū)分重載的函數(shù)

如何可以查看到我們的方法簽名:

1. 先對(duì)工程進(jìn)行編譯生成.class字節(jié)碼文件

2. 在控制臺(tái)中進(jìn)入到要查看的.class所在的目錄

3. 輸入:javap -v 字節(jié)碼文件名字即可

三、遞歸

3.1、遞歸的概念

定義:一個(gè)方法在執(zhí)行過程中調(diào)用自身, 就稱為 "遞歸。

遞歸的必要條件:

1. 遞歸的公式。

2. 遞歸的終止條件。

3.2、遞歸過程分析

    public static  int func(int num){
        if(num == 1){
            return 1;
        }
        return num*func(num - 1);
    }
    public static void main(String[] args) {
//        遞歸求階乘
        Scanner scan = new Scanner(System.in);
        System.out.println("請(qǐng)輸入一個(gè)數(shù):");
        int num = scan.nextInt();
        int ret = func(num);
        System.out.println("階乘為:" + ret);
    }
}

在這里我們以求一個(gè)數(shù)的階乘的代碼為例來分析一個(gè)遞歸的過程:

遞歸的過程其實(shí)不復(fù)雜,看成兩個(gè)部分,一個(gè)是遞出去,而是歸回來,上面的藍(lán)色箭頭是遞的過程,紅色箭頭是歸的過程。

3.3、遞歸小練習(xí)

  • 按順序打印一個(gè)數(shù)字的每一位(例如 1234 打印出 1 2 3 4)
public class TestDemo220427 {
    public static void myprint(int num){
        if(num < 10){
            System.out.println(num%10);
            return;
        }
        myprint(num/10);
        System.out.println(num%10);
        return;
    }
    public static void main(String[] args) {
//        遞歸實(shí)現(xiàn)按順序打印數(shù)字的每一位
        Scanner scan = new Scanner(System.in);
        System.out.println("請(qǐng)輸入一個(gè)數(shù):");
        int num = scan.nextInt();
        myprint(num);
    }
}
  • 求斐波那契數(shù)列的第 N 項(xiàng)
public class TestDemo220428 {
    public static int fib1(int n){
        int f1 = 1;
        int f2 = 1;
        int f3 = 1;
        for(int i = 3;i <= n;i++){
            f3 = f1 + f2;
            f1 = f2;
            f2 = f3;
        }
        return f3;
    }
    public static int fib(int n){
        if(n == 1 || n == 2){
            return 1;
        }
        return fib(n-1) + fib(n-2);
    }
    public static void main(String[] args) {
//        遞歸求斐波那契數(shù)列的第n項(xiàng)
        Scanner scan = new Scanner(System.in);
        System.out.println("請(qǐng)輸入您想要求取的項(xiàng)數(shù):");
        int n = scan.nextInt();
        int ret = fib1(n);
        System.out.println("第" + n + "項(xiàng)為:" + ret);
    }
}

利用遞歸求斐波那契數(shù)列的第n項(xiàng)的話,其實(shí)是一個(gè)雙路遞歸,不推薦這種求解的方法,因?yàn)闀?huì)算很多重復(fù)的項(xiàng),效率很低,一般都是選擇循環(huán)迭代的方式來生成斐波那契數(shù)即可。

到此這篇關(guān)于Java由淺入深全面講解方法的使用的文章就介紹到這了,更多相關(guān)Java方法內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java鎖機(jī)制Lock用法示例

    Java鎖機(jī)制Lock用法示例

    這篇文章主要介紹了Java鎖機(jī)制Lock用法,結(jié)合具體實(shí)例形式分析了Java鎖機(jī)制的相關(guān)上鎖、釋放鎖、隱式鎖、顯式鎖等概念與使用技巧,需要的朋友可以參考下
    2018-08-08
  • spring boot開發(fā)遇到坑之spring-boot-starter-web配置文件使用教程

    spring boot開發(fā)遇到坑之spring-boot-starter-web配置文件使用教程

    Spring Boot支持容器的自動(dòng)配置,默認(rèn)是Tomcat,當(dāng)然我們也是可以進(jìn)行修改的。這篇文章給大家介紹了spring boot開發(fā)遇到坑之spring-boot-starter-web配置文件使用教程,需要的朋友參考下吧
    2018-01-01
  • Java 精煉解讀數(shù)據(jù)結(jié)構(gòu)邏輯控制

    Java 精煉解讀數(shù)據(jù)結(jié)構(gòu)邏輯控制

    在程序開發(fā)的過程之中一共會(huì)存在有三種程序邏輯:順序結(jié)構(gòu)、分支結(jié)構(gòu)、循環(huán)結(jié)構(gòu),對(duì)于之前所編寫的代碼大部分都是順序結(jié)構(gòu)的定義,即:所有的程序?qū)凑斩x的代碼順序依次執(zhí)行
    2022-03-03
  • SpringBoot接收前端參數(shù)的幾種方式分享

    SpringBoot接收前端參數(shù)的幾種方式分享

    這篇文章給大家分享幾種SpringBoot接收前端參數(shù)的方式,文中通過實(shí)例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2023-09-09
  • Java模擬QQ實(shí)現(xiàn)聊天互動(dòng)程序

    Java模擬QQ實(shí)現(xiàn)聊天互動(dòng)程序

    這篇文章主要介紹了如何利用Java語言模擬QQ實(shí)現(xiàn)一個(gè)簡易的聊天互動(dòng)程序,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2022-06-06
  • jsp+servlet實(shí)現(xiàn)簡單登錄頁面功能(附demo)

    jsp+servlet實(shí)現(xiàn)簡單登錄頁面功能(附demo)

    本文主要介紹了jsp+servlet實(shí)現(xiàn)簡單登錄頁面功能登錄成功跳轉(zhuǎn)新頁面,登錄失敗在原登錄界面提示登錄失敗信息,對(duì)初學(xué)者有一定的幫助,感興趣的可以了解一下
    2021-07-07
  • 常用數(shù)字簽名算法RSA與DSA的Java程序內(nèi)實(shí)現(xiàn)示例

    常用數(shù)字簽名算法RSA與DSA的Java程序內(nèi)實(shí)現(xiàn)示例

    這篇文章主要介紹了常用數(shù)字簽名算法RSA與DSA的Java程序內(nèi)實(shí)現(xiàn)示例,一般來說DSA算法用于簽名的效率會(huì)比RSA要快,需要的朋友可以參考下
    2016-04-04
  • java為何不能多繼承的原因詳解

    java為何不能多繼承的原因詳解

    多重繼承是一個(gè)子類從多個(gè)父類中繼承屬性和方法。C++, Common Lisp是時(shí)下支持多重繼承的流行語言。那java為何不能多繼承呢,下面小編帶大家來一起學(xué)習(xí)一下吧
    2019-06-06
  • 認(rèn)識(shí)Java底層操作系統(tǒng)與并發(fā)基礎(chǔ)

    認(rèn)識(shí)Java底層操作系統(tǒng)與并發(fā)基礎(chǔ)

    這篇文章主要介紹了認(rèn)識(shí)Java底層操作系統(tǒng)與并發(fā)基礎(chǔ),文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的朋友可以參考一下
    2022-07-07
  • IDEA配置java開發(fā)環(huán)境(maven、gradle、tomcat)

    IDEA配置java開發(fā)環(huán)境(maven、gradle、tomcat)

    這篇文章主要介紹了IDEA配置java開發(fā)環(huán)境(maven、gradle、tomcat),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09

最新評(píng)論

会东县| 曲水县| 和硕县| 明光市| 黄平县| 屏山县| 阜南县| 工布江达县| 大安市| 汾西县| 永泰县| 丰台区| 留坝县| 安义县| 沧源| 汝南县| 闻喜县| 高密市| 乌鲁木齐市| 塔城市| 平泉县| 长子县| 宁海县| 大关县| 英超| 高邮市| 临清市| 景德镇市| 秦安县| 保亭| 山丹县| 乃东县| 壶关县| 金川县| 中方县| 胶南市| 西城区| 营山县| 逊克县| 科技| 黎川县|