亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Java中方法的使用、重載與遞歸的詳細(xì)介紹

 更新時(shí)間:2021年11月12日 12:04:27   作者:ViolentAsteroid  
前面我們提到了方法需要參數(shù)類型,但是如果我們需要用一個(gè)函數(shù)同時(shí)兼容多種參數(shù)的情況應(yīng)該怎么辦呢? 這里就可以使用到方法重載,對(duì)Java中方法的使用、重載與遞歸相關(guān)知識(shí)感興趣的朋友一起看看吧

一.方法的基本使用

1.什么是方法

方法是一個(gè)代碼片段,類似于C語(yǔ)言中的函數(shù)

2.方法基本語(yǔ)法

基本語(yǔ)法

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

看到這里可能有點(diǎn)抽象,接下來(lái)寫一個(gè)具體的方法:兩個(gè)整數(shù)相加

public class TestDemo {
    // 方法定義
    public static int Add(int x,int y){
        int sum = x+ y;
        return sum;
    }
 
    public static void main(String[] args) {
        //方法的調(diào)用
        Add(10,20);
        System.out.println(Add(10,20));
    }
}

注意事項(xiàng)

1.方法定義時(shí), 參數(shù)可以沒(méi)有。每個(gè)參數(shù)要指定類型

2.方法定義時(shí), 返回值也可以沒(méi)有, 如果沒(méi)有返回值, 則返回值類型應(yīng)寫成 vo

3.方法定義時(shí)的參數(shù)稱為形式參數(shù)(形參),方法調(diào)用時(shí)的參數(shù)稱為實(shí)際參數(shù)(實(shí)參)

4.方法的定義必須在類之中, 代碼書寫在調(diào)用位置的上方或者下方都可以

5.所有程序的入口:main函數(shù)

形參與實(shí)參的關(guān)系

首先我們寫一個(gè)交換兩個(gè)數(shù)的方法,并運(yùn)行一下

public class Test1 {
    public static void swap(int a,int b){
        int temp = a;
        a = b;
        b = temp;
    }
 
    public static void main(String[] args) {
        int a = 10;
        int b = 20;
        System.out.println("交換實(shí)參前:"+a+" "+b);
        swap(a,b);
        System.out.println("交換實(shí)參后:"+a+" "+b);
    }
}

為什么沒(méi)有發(fā)生任何改變呢?

因?yàn)槲覀兘粨Q的是形參,而不是交換的實(shí)參。如果要交換實(shí)參,我們應(yīng)該拿到a和b的地址,但是!a和b在main函數(shù)中,函數(shù)里的變量屬于局部變量,存放在棧上。但是在Java中,拿不到棧上的地址,所以a和b的實(shí)際值并沒(méi)有發(fā)生改變。如果要交換a和b的值,只能把a(bǔ)和b的值放在堆上(放在堆上的都是對(duì)象?。。?/p>

二.方法的重載

1.重載的作用

前面我們提到了方法需要參數(shù)類型,但是如果我們需要用一個(gè)函數(shù)同時(shí)兼容多種參數(shù)的情況應(yīng)該怎么辦呢? 這里就可以使用到方法重載

在我們寫了一個(gè)add方法后,如果我們想用這個(gè)方法計(jì)算double類型的時(shí)候,會(huì)出現(xiàn)類型不兼容的問(wèn)題,那么我們應(yīng)該怎么解決呢?或許可以像下面這樣

public class Test2 {
    public static int addInt(int a, int b){
        int sum = a+b;
        return sum;
    }
 
    public static double addDouble(double a,double b){
        double sum = a+b;
        return sum;
    }
 
    public static void main(String[] args) {
        double a = 10.5;
        double b = 20.5;
        addDouble(a,b);
        System.out.println(addDouble(a,b));
    }
}

這種寫法不存在任何問(wèn)題,例如在go語(yǔ)言中就這樣使用,但是Java認(rèn)為addInt這種名字不太好,不如直接叫add,這就有了如下寫法

public class Test2 {
    public static int add(int a, int b){
        int sum = a+b;
        return sum;
    }
 
    public static double add(double a,double b){
        double sum = a+b;
        return sum;
    }
 
    public static void main(String[] args) {
        double a = 10.5;
        double b = 20.5;
        add(a,b);
        System.out.println(add(a,b));
    }
}

運(yùn)行起來(lái)也沒(méi)有任何問(wèn)題,這就是重載的作用!能解決參數(shù)類型不匹配等問(wèn)題。比如add方法,你還能添加更多版本的使用,比如多個(gè)數(shù)相加...

同一個(gè)方法名字, 提供不同版本的實(shí)現(xiàn),稱為方法的重載

2.重載的使用規(guī)則

針對(duì)同一個(gè)類:

1.方法名相同

2.方法的參數(shù)不同(參數(shù)個(gè)數(shù)或者參數(shù)類型)

3.方法的返回值類型不影響重載

4.當(dāng)兩個(gè)方法的名字相同, 參數(shù)也相同, 但是返回值不同的時(shí)候, 不構(gòu)成重載。比如int add(int a,int b)和double add(int a,int b)

三.方法的遞歸

1.遞歸的概念

遞歸就是方法調(diào)用自己的過(guò)程。實(shí)現(xiàn)遞歸,需要去推導(dǎo)出遞歸公式。

遞歸的前提:有一個(gè)趨近于終止的條件、自己調(diào)用自己

遞歸的關(guān)鍵:就是要找到遞歸公式!理解"遞"和"歸"的過(guò)程

2.遞歸執(zhí)行過(guò)程分析

public class Test3 {
    public static int fac(int n){
        if(n==1){
            return 1;
        }
        int temp = n*fac(n-1);
        return temp;
    }
 
    public static void main(String[] args) {
        System.out.println(fac(3));
    }
}

具體過(guò)程分析:

3.遞歸練習(xí)

相信看到這里,你對(duì)遞歸也有了一定的認(rèn)識(shí),可以適當(dāng)練習(xí)一些題增加熟練度。附上筆者的答案,如有錯(cuò)誤,請(qǐng)斧正!

1.按順序打印一個(gè)數(shù)字的每一位

按順序打印一個(gè)數(shù)字的每一位(例如 1234 打印出 1 2 3 4)

public class Demo1 {
    public static void print(int n){
        if(n>9){
            print(n/10);
        }
       System.out.print(n%10+" ");;
    }
 
    public static void main(String[] args) {
        int n = 1234;
        print(n);
    }
}

2.遞歸求 1 + 2 + 3 + ... + 10

遞歸求 1 + 2 + 3 + ... + 10

public class Demo2 {
    public static int func(int n){
        if(n!=0){
            n += func(n-1);
        }
        return n;
    }
    public static void main(String[] args) {
        System.out.println(func(10));
    }
}

3.返回組成它的數(shù)字之和

寫一個(gè)遞歸方法,輸入一個(gè)非負(fù)整數(shù),返回組成它的數(shù)字之和. 例如,輸入 1729, 則應(yīng)該返回1+7+2+9, 它的和是19

public class Demo3 {
    public static int func(int n){
        if(n<10){
            return n;
        }
        return n%10+func(n/10);
    }
 
    public static void main(String[] args) {
        System.out.println(func(1792));
    }
}

4.求斐波那契數(shù)列的第 N 項(xiàng)

解法一:使用遞歸,時(shí)間復(fù)雜度為O(2^n),空間復(fù)雜度為O(n)

public class Demo4 {
    public static int fib(int n){
        if(n==1 || n == 2){
            return 1;
        }else{
            return fib(n-1)+fib(n-2);
        }
    }
 
    public static void main(String[] args) {
        System.out.println(fib(1));
        System.out.println(fib(2));
        System.out.println(fib(3));
        System.out.println(fib(4));
        System.out.println(fib(123456));
    }
}

但是這種解法效率并不高,再計(jì)算較大數(shù)字時(shí)就會(huì)明顯出現(xiàn)停頓,因?yàn)樗鼤?huì)進(jìn)行很多重復(fù)的運(yùn)算,于是我們可以用循環(huán)寫這個(gè)代碼,也叫迭代解法

解法二:使用迭代,時(shí)間復(fù)雜度為O(n),空間復(fù)雜度為O(1)

public class Demo4 {
    
    public static int fib2(int n){
        if(n==1 || n==2){
            return 1;
        }
        int f1 = 1;
        int f2 = 1;
        int f3 = 0;
        for (int i = 3; i <= n; i++) {
            f3 = f1 + f2;
            f1 = f2;
            f2 = f3;
        }
        return f3;
    }
 
    public static void main(String[] args) {
        System.out.println(fib2(1));
        System.out.println(fib2(2));
        System.out.println(fib2(3));
        System.out.println(fib2(4));
        System.out.println(fib2(40));
    }
}

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

相關(guān)文章

  • Spring探秘之如何妙用BeanPostProcessor

    Spring探秘之如何妙用BeanPostProcessor

    BeanPostProcessor也稱為Bean后置處理器,它是Spring中定義的接口,在Spring容器的創(chuàng)建過(guò)程中會(huì)回調(diào)BeanPostProcessor中定義的兩個(gè)方法,這篇文章主要給大家介紹了關(guān)于Spring探秘之如何妙用BeanPostProcessor的相關(guān)資料,需要的朋友可以參考下
    2022-01-01
  • Java反射之靜態(tài)加載和動(dòng)態(tài)加載的簡(jiǎn)單實(shí)例

    Java反射之靜態(tài)加載和動(dòng)態(tài)加載的簡(jiǎn)單實(shí)例

    下面小編就為大家?guī)?lái)一篇Java反射之靜態(tài)加載和動(dòng)態(tài)加載的簡(jiǎn)單實(shí)例。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2016-10-10
  • MyBatis接口的簡(jiǎn)單實(shí)現(xiàn)原理分析

    MyBatis接口的簡(jiǎn)單實(shí)現(xiàn)原理分析

    這里僅僅舉個(gè)簡(jiǎn)單例子來(lái)說(shuō)明原理,不是完全針對(duì)MyBatis的,這種思想我們也可以應(yīng)用在其他地方。地mybatis接口實(shí)現(xiàn)原理感興趣的朋友一起看看吧
    2017-07-07
  • Spring MVC 攔截器 interceptor 用法詳解

    Spring MVC 攔截器 interceptor 用法詳解

    這篇文章主要介紹了Spring MVC 攔截器 interceptor 用法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • Java多線程中的ReentrantLock可中斷鎖詳細(xì)解讀

    Java多線程中的ReentrantLock可中斷鎖詳細(xì)解讀

    這篇文章主要介紹了Java多線程中的ReentrantLock可中斷鎖詳細(xì)解讀,ReentrantLock中的lockInterruptibly()方法使得線程可以在被阻塞時(shí)響應(yīng)中斷,比如一個(gè)線程t1通過(guò)lockInterruptibly()方法獲取到一個(gè)可重入鎖,并執(zhí)行一個(gè)長(zhǎng)時(shí)間的任務(wù),需要的朋友可以參考下
    2023-12-12
  • 解讀controller層,service層,mapper層,entity層的作用與聯(lián)系

    解讀controller層,service層,mapper層,entity層的作用與聯(lián)系

    這篇文章主要介紹了關(guān)于controller層,service層,mapper層,entity層的作用與聯(lián)系,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • Java使用selenium爬取b站動(dòng)態(tài)的實(shí)現(xiàn)方式

    Java使用selenium爬取b站動(dòng)態(tài)的實(shí)現(xiàn)方式

    本文主要介紹了Java使用selenium爬取b站動(dòng)態(tài)的實(shí)現(xiàn)方式,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • Java并發(fā)包線程池ThreadPoolExecutor的實(shí)現(xiàn)

    Java并發(fā)包線程池ThreadPoolExecutor的實(shí)現(xiàn)

    本文主要介紹了Java并發(fā)包線程池ThreadPoolExecutor的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-04-04
  • SpringBoot導(dǎo)出Excel的四種實(shí)現(xiàn)方式

    SpringBoot導(dǎo)出Excel的四種實(shí)現(xiàn)方式

    近期接到了一個(gè)小需求,要將系統(tǒng)中的數(shù)據(jù)導(dǎo)出為Excel,且能將Excel數(shù)據(jù)導(dǎo)入到系統(tǒng),對(duì)于大多數(shù)研發(fā)人員來(lái)說(shuō),這算是一個(gè)最基本的操作了,本文就給大家總結(jié)一下SpringBoot導(dǎo)出Excel的四種實(shí)現(xiàn)方式,需要的朋友可以參考下
    2024-01-01
  • spring Boot 應(yīng)用通過(guò)Docker 來(lái)實(shí)現(xiàn)構(gòu)建、運(yùn)行、發(fā)布流程

    spring Boot 應(yīng)用通過(guò)Docker 來(lái)實(shí)現(xiàn)構(gòu)建、運(yùn)行、發(fā)布流程

    這篇文章主要介紹了spring Boot 應(yīng)用通過(guò)Docker 來(lái)實(shí)現(xiàn)構(gòu)建、運(yùn)行、發(fā)布流程,圖文詳解,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2017-11-11

最新評(píng)論