1. 程式人生 > 其它 >java(方法定義、呼叫、過載)

java(方法定義、呼叫、過載)

1.方法

  • Java方法是語句的集合,它們在一起執行一個功能
    • 方法是解決一類問題的步驟的有序組合
    • 方法包含於類或物件中
    • 方法在程式中被建立,在其他地方被引用
  • 設計方法的原則:就是一個方法只完成一個功能,這樣利於我們後期的擴充套件。(原子性)

2.定義

  • Java的方法類似於其他語言的函式,是一段用來完成特定功能的程式碼片段,一般情況下,定義一個方法包含以下語法:
  • 方法包含一個方法頭和一個方法體
    • 修飾符:可選的,告訴編譯器,如何呼叫該方法,定義了該方法的訪問型別。
    • 返回值型別:方法可能會返回值,returnValueType是方法返回值的資料型別,沒有返回值,用關鍵字void。
    • 方法名:方法的實際名稱,方法名和引數表共同構成方法簽名。
    • 引數型別:引數像一個佔位符,當方法被呼叫時,傳遞值給引數,這個值被稱為實參或變數,引數列表是指方法的引數型別,順序和引數的個數。引數是可選的,方法可以不包含任何引數。
    • 形參:在方法呼叫時用於接收外界輸入的資料
    • 實參:呼叫方法時實際傳給方法的資料
  • 方法體:方法體包含具體的語句,定義該方法的功能

3.呼叫

  • 呼叫方法:物件名.方法名(實參列表)

  • Java支援兩種呼叫方法的方式,根據方法是否返回值來選擇。

  • 當方法返回一個值的時候,方法呼叫通常被當做一個值

  • 如果方法返回值是void,方法呼叫一定是一條語句;

  • Java值傳遞

  • 值傳遞:指在呼叫函式時將實際引數複製一份傳遞到函式中,這樣在函式中如果對引數進行修改,將不會影響到實際引數。

  • 引用傳遞:是指在呼叫函式時將實際引數的地址直接傳遞到函式中(的形參),那麼在函式中對引數所進行的修改,將影響到實際引數。

  • 基本資料型別傳值,對形參的修改不會影響實參;

  • 引用型別傳引用

    • 形參和實參指向同一個記憶體地址,所以對引數的修改會影響到實際的物件;
    • 形參和實參指向不同記憶體地址的,則對引數的修改不會影響到實際的物件;

4.過載、

  • 過載就是在一個類中,有相同的函式名稱,但形參不同的函式

  • 方法過載的規則:

    • 方法名稱必須相同
    • 引數列表必須不同(個數不同,引數排列順序或型別不同)
    • 方法的返回型別可以相同,也可以不同。
    • 僅僅返回型別不同不足以成為方法的過載。
  • 實現理論:

    • 方法名稱相同,編譯器會根據呼叫方法的引數個數,引數型別等去逐個匹配,以選擇對應的方法,如果匹配失敗,則編譯器報錯。
public class Demo02 {
    public static void main(String[] args) {
        int max = max(10,20,80);
        System.out.println(max);

    }
    public static int max(int a,int b){
        int result = 0;
        if(a==b){
            System.out.println("a==b");
        }
        if(a>b){
            result = a;
        }else {
            result = b;
        }
        return result;
    }

    public static double max(double a,double b){
        double result = 0;
        if(a==b){
            System.out.println("a==b");
        }
        if(a>b){
            result = a;
        }else {
            result = b;
        }
        return result;
    }

    public static int max(int a,int b,int c){
        int result = 0;
        if(a==b){
            System.out.println("a==b");
        }
        if (a==c){
            System.out.println("a==c");
        }
        if(b==c){
            System.out.println("b==c");
        }
        if(a>b&&a>c){
            result = a;
        }
        else if(b>c)
        {
            result = b;
        }else{
            result = c;
        }
        return result;
    }
}