一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - 一篇文章帶你了解Java方法的使用

一篇文章帶你了解Java方法的使用

2021-11-19 14:32一朵花花 Java教程

這篇文章主要給大家介紹了關于Java中方法使用的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

方法的基本用法 

方法定義

方法就是一個功能

方法就是一個代碼片段,類似于 C 語言中的 “函數”

基本語法格式:

?
1
2
3
4
5
//方法定義
修飾符 返回值類型 方法名稱([形式參數列表 ...]){
    方法體;
    [return 返回值];
}

注意事項:

在現階段,方法的修飾暫時采用—> public static 固定搭配[ ]內部的表示可有可無方法必須定義在類中方法名要采用小駝峰的形式Java中的返回值可有可無,看業務需求,若有返回值,返回值類型需要和方法的返回值類型匹配行書參數列表:形參,是實參的一份拷貝方法體:具體功能的實現

為什么方法一般用public static修飾?

因為當前所有方法寫完之后,若調用,都會在main方法中調用,而main方法是public static的

代碼示例:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
public class DemoOne {
    // 實現一個兩個整數相加的方法
    public static int add(int x,int y){
        return x+y;
    }
    public static void main(String[] args) {
        int a = 212;
        int b = 454;
        //方法調用
        int ret = add(a,b);
        System.out.println(ret);
    }
}

注意事項: 

  • 方法定義時,參數可以沒有,若有參數,每個參數要指定類型
  • 方法定義時,返回值也可以沒有,比如main方法,如果沒有返回值,則返回值類型必須寫成 void
  • 方法定義不能嵌套
  • Java 中沒有 “函數聲明” 這個概念
  • 方法必須定義在類之中,方法定義的位置在調用位置的上方或者下方均可 

方法調用的調試過程

一個程序猿最厲害的不在于能寫出多牛X的代碼,而是能夠解決代碼的問題!!

IDEA 的調試過程: 

打斷點

一篇文章帶你了解Java方法的使用

開始調試,點擊"甲殼蟲"

一篇文章帶你了解Java方法的使用

點擊后,會出現下邊這個框

一篇文章帶你了解Java方法的使用

注意事項: 

  • 參數傳遞完畢后,就會執行到方法代碼體
  • 定義方法的時候, 不會執行方法的代碼. 只有調用的時候才會執行
  • 一個方法可以被多次調用
  • (遇到 return ) 方法執行完畢后,回到方法調用位置繼續執行
  • 當方法被調用時,會將實參賦值給形參
  • Java中只有按值傳遞 

暫停調試

一篇文章帶你了解Java方法的使用

方法的重復調用:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
//求三個數的最大值
public static int maxThreeNum(int num1,int num2,int num3){
    return maxNum(maxNum(num1,num2),num3);     //方法的重復調用
}
//兩個數的最大值
public static int maxNum(int x,int y){
    return x>y ? x : y;
}
public static void main(String[] args) {
    Scanner scan = new Scanner(System.in);
    int num1 = scan.nextInt();
    int num2 = scan.nextInt();
    int num3 = scan.nextInt();
    int max = maxThreeNum(num1,num2,num3);
    System.out.println("max="+max);
}

實參和形參的關系

形參只是方法在定義時需要借助的一個變量,用來保存方法在調用時傳遞過來的值

代碼示例:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
交換兩個整型變量
public static void swap(int x,int y){
    int tmp = x;
    x = y;
    y = tmp;
}
public static void main(String[] args) {
   //交換兩個整數
    int a = 10;
    int b = 20;
    swap(a,b);
    System.out.println(a + " " + b);
}

運行后會發現,這個方法不能實現交換兩個整型變量的功能

可用類和對象 / 數組 來實現,后邊會講到

原因分析:

方法里交換的是形參 x 和 y 的值,而main方法中打印的是實參 a 和 b 的值

一篇文章帶你了解Java方法的使用

實參a和b是main方法中的兩個變量,其空間在main方法的棧(一塊特殊的內存空間)中,而形參x和y是swap方法中的兩個變量,x和y的空間在swap方法運行時的棧中,因此:實參a和b 與 形參x和y是兩個沒有任何關聯性的變量,在swap方法調用時,只是將實參a和b中的值拷貝了一份傳遞給了形參x和y,因此對形參x和y操作不會對實參a和b產生任何影響。

解決方法:

這里不過多解釋,之后寫數組章節再作解釋

?
1
2
3
4
5
6
7
8
9
10
public static void main(String[] args) {
    int[] arr = {10, 20};
    swap(arr);
    System.out.println("arr[0] = " + arr[0] + " arr[1] = " + arr[1]);
}
public static void swap(int[] arr) {
    int tmp = arr[0];
    arr[0] = arr[1];
    arr[1] = tmp;
}

結論: 

  • 在Java中,實參的值永遠都是拷貝到形參中,形參和實參本質是兩個實體
  • 對于基礎類型來說,形參相當于實參的拷貝,即:傳值調用 

方法的重載 (Overload) 

什么是方法重載? 

舉例:

在方法sumInt中,若要求兩小數之和,就不能實現,必須再寫一個sumDouble方法,這樣使用很不靈活

?
1
2
3
4
5
6
7
8
兩整數之和
public static int sumInt(int x,int y){
    return x+y;
}
兩小數之和
public static double sumDouble(double x,double y){
    return x+y;
}

解決方法:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
方法1 兩整數之和
public static int sum(int x,int y){
    return x+y;
}
方法2 兩小數之和
public static double sum(double x,double y){
    return x+y;
}
public static void main(String[] args) {
    double a = 19.9;
    double b = 18.8;
    double ret = sum(a,b); //直接使用 sum
    System.out.println(ret);
}

上述方法1 和方法2 的關系就是重載

構成重載的 3 個條件: 

  • 方法名必須相同
  • 返回值可以不同
  • 參數列表必須不同(參數的個數不同 / 參數的類型不同)
  • (注意事項) 同一個類當中

重載和重寫的區別是什么?

方法的重載和重寫都是實現多態的方式,區別:重載實現的是編譯時的多態性,而重寫實現的是運行時的多態性

①.重載發生在一個類中,同名的方法如果有不同的參數列表(參數類型不同 / 參數個數不同)則視為重載
②.重寫發生在子類與父類之間,重寫要求子類被重寫方法與父類被重寫方法有相同的參數列表,有兼容的返回類型,比父類被重寫方法更好訪問,不能比父類被重寫方法聲明更多的異常。

重載對返回類型沒有特殊的要求,不能根據返回類型進行區分。

方法的遞歸 

什么是遞歸?

一個方法在執行過程中對自身的調用,稱為"遞歸"

  • 方法要調用自己本身
  • 要有一個趨近于終止的條件
  • 想辦法推導出"遞歸"的公式 

遞歸代碼示例:

求n的階乘:

?
1
2
3
4
5
6
public static int factor(int n){
    if(n == 1){
        return 1;
    }
    return n * factor(n-1);
}

代碼過程分析:

一篇文章帶你了解Java方法的使用

遞歸的理解

"遞" "歸"理解:

一篇文章帶你了解Java方法的使用

棧的角度理解:

方法的調用是要在棧上開辟內存的,給這個方法開辟棧幀

一篇文章帶你了解Java方法的使用

思考遞歸,要橫向思考,不要試圖去走進遞歸的代碼,代碼執行,是縱向執行

總結

本篇文章就到這里了,希望能給你帶來幫助,也希望您能夠多多關注服務器之家的更多內容!

原文鏈接:https://blog.csdn.net/m0_47988201/article/details/119645025

延伸 · 閱讀

精彩推薦
  • Java教程xml與Java對象的轉換詳解

    xml與Java對象的轉換詳解

    這篇文章主要介紹了xml與Java對象的轉換詳解的相關資料,需要的朋友可以參考下...

    Java教程網2942020-09-17
  • Java教程Java使用SAX解析xml的示例

    Java使用SAX解析xml的示例

    這篇文章主要介紹了Java使用SAX解析xml的示例,幫助大家更好的理解和學習使用Java,感興趣的朋友可以了解下...

    大行者10067412021-08-30
  • Java教程升級IDEA后Lombok不能使用的解決方法

    升級IDEA后Lombok不能使用的解決方法

    最近看到提示IDEA提示升級,尋思已經有好久沒有升過級了。升級完畢重啟之后,突然發現好多錯誤,本文就來介紹一下如何解決,感興趣的可以了解一下...

    程序猿DD9332021-10-08
  • Java教程20個非常實用的Java程序代碼片段

    20個非常實用的Java程序代碼片段

    這篇文章主要為大家分享了20個非常實用的Java程序片段,對java開發項目有所幫助,感興趣的小伙伴們可以參考一下 ...

    lijiao5352020-04-06
  • Java教程Java實現搶紅包功能

    Java實現搶紅包功能

    這篇文章主要為大家詳細介紹了Java實現搶紅包功能,采用多線程模擬多人同時搶紅包,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙...

    littleschemer13532021-05-16
  • Java教程Java BufferWriter寫文件寫不進去或缺失數據的解決

    Java BufferWriter寫文件寫不進去或缺失數據的解決

    這篇文章主要介紹了Java BufferWriter寫文件寫不進去或缺失數據的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望...

    spcoder14552021-10-18
  • Java教程Java8中Stream使用的一個注意事項

    Java8中Stream使用的一個注意事項

    最近在工作中發現了對于集合操作轉換的神器,java8新特性 stream,但在使用中遇到了一個非常重要的注意點,所以這篇文章主要給大家介紹了關于Java8中S...

    阿杜7482021-02-04
  • Java教程小米推送Java代碼

    小米推送Java代碼

    今天小編就為大家分享一篇關于小米推送Java代碼,小編覺得內容挺不錯的,現在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧...

    富貴穩中求8032021-07-12
主站蜘蛛池模板: 成人依依网 | 亚洲天堂激情 | 亚洲精品国精品久久99热 | 女班长的放荡日记高h | meyd–456佐山爱在线播放 | 嗯啊在线观看免费影院 | 三上悠亚精品专区久久 | 亚洲羞羞视频 | 亚洲成人免费 | 国内精品久久久久久野外 | 国产成人精品日本亚洲网址 | 校花在公车上被内射好舒服 | 草莓香蕉绿巨人丝瓜榴莲污在线观看 | 非洲黑人gay巨大 | 日韩香蕉视频 | 日本无吗免费一二区 | 欧美人与牲动交xxx 欧美人妖另类性hd 欧美人人干 | 天堂资源在线www中文 | 日本一区二区三区视频在线观看 | 欧美男男gaygayxxx | 91久久综合九色综合欧美98 | 激情小说欧美图片 | 亚洲高清视频网站 | 变态 调教 视频 国产九色 | 国产在线视频在线观看 | 欧美一级视频在线观看 | 久久精品动漫网一区二区 | 青草午夜精品视频在线观看 | 挺进白嫩老师下面视频 | 60岁妇女毛片免费观看 | 日本孕妇大胆孕交 | 好姑娘在线视频观看免费 | 久久久久夜 | 嫩草影院永久在线播放 | 504神宫寺奈绪大战黑人 | 美女操批 | 国产啪精品视频网给免丝袜 | 国产自在自线午夜精品之la | 欧美日韩中文国产一区二区三区 | 亚洲天堂2015| free性日本|