1. 程式人生 > 實用技巧 >安卓Spinner學習

安卓Spinner學習

用IDEA學習Java的第四天(Java方法詳解)

何為方法?

  • Java方法是語句的集合,他們在一起執行一個功能
  • 方法是解決一類問題的步驟的有序組合
  • 方法包含於類或物件中
  • 方法在程式中被建立,在其他地方被引用
  • 設計方法的原則:方法的本意是功能塊,就是實現某個功能的語句塊集合。我們設計方法的時候,最好保持方法的原子性,一個方法只完成一個功能。

方法的定義

  • Java的方法類似於其他語言的函式,是一段用來完成特定功能的程式碼片段。
  • 方法包含一個方法頭和一個方法體
  • 形式引數:在方法被呼叫時用於接收外界輸入的資料
  • 實參:呼叫方法時實際傳給方法的資料
修飾符 返回值型別 方法名(引數型別 引數名){
    ...
        方法體
    ...
        return 返回值;
}

注意:return在一些方法體內有返回值的作用,在一些方法體內也有終止方法的作用

方法呼叫

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

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

  • 當方法返回一個值的時候,方法呼叫通常被當作一個值。例如:

    int larage = max(30,40);
    
  • 如果方法返回值是void,方法呼叫一定是一條語句

    System.out.println("Hello");
    

    比大小

package com.zjl.method;

public class Demo02 {
    public static void main(String[] args) {
        //比大小
        int max=max(30,30);
        System.out.println(max);
    }
    public static int max(int num1,int num2){
        int result=0;
        if(num1==num2){
            System.out.println("兩個值相等");
            return 0;//終止方法
        }
        if(num1>num2){
            result=num1;
        }else {
            result=num2;
        }
        return result;
    }
}

值傳遞和引用傳遞

Java只有值傳遞

值傳遞: (形式引數型別是基本資料型別和String):方法呼叫時,實際引數把它的值傳遞給對應的形式引數,形式引數只是用實際引數的值初始化自己的儲存單元內容,是兩個不同的儲存單元,所以方法執行中形式引數值的改變不影響實際引數的值。

引用傳遞: (形式引數型別是引用資料型別引數除去String):也稱為傳地址。方法呼叫時,實際引數是物件(或陣列),這時實際引數與形式引數指向同一個地址,在方法執行中,對形式引數的操作實際上就是對實際引數的操作,這個結果在方法結束後被保留了下來,所以方法執行中形式引數的改變將會影響實際引數。

注意

(1)在Java裡面,當呼叫方法時,如果傳入的數值為基本資料型別(包含String型別),形式引數的改變對實際引數不影響,就是值傳遞。

(2)在Java裡面,當呼叫方法時,如果傳入的數值為引用資料型別(String型別除外),形式引數的改變對實際引數有影響,就是引用傳遞。

方法的過載

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

方法的過載的規則

  • 方法名稱必須相同
  • 引數列表必須不同(個數不同、或型別不同、引數排列順序不同等)
  • 方法的返回值型別可以相同也可以不相同
  • 僅僅返回值型別不同不足以成為方法的過載

實現理論

方法名稱相同時,編譯器會根據呼叫方法的引數個數、引數型別等去逐個匹配,以選擇對應的方法,如果匹配失敗則編譯器報錯。

方法過載和方法重寫的區別

方法過載:
1、同一個類中
2、方法名相同,引數列表不同(引數順序、個數、型別)
3、方法返回值、訪問修飾符任意
4、與方法的引數名無關

方法重寫:
1、有繼承關係的子類中
2、方法名相同,引數列表相同(引數順序、個數、型別),方法返回值相同
3、訪問修飾符,訪問範圍需要大於等於父類的訪問範圍
4、與方法的引數名無關

package com.zjl.method;

public class Demo02 {
    public static void main(String[] args) {
        //比大小
        double max=max(20.0,20.0);
        System.out.println(max);
    }
    public static int max(int num1,int num2){
        int result=0;
        if(num1==num2){
            System.out.println("兩個值相等");
            return 0;//終止方法
        }
        if(num1>num2){
            result=num1;
        }else {
            result=num2;
        }
        return result;
    }
    public static double max(double num1,double num2){ //方法的過載
        double result=0;
        if(num1==num2){
            System.out.println("兩個值相等啊");
            return 0;//終止方法
        }
        if(num1>num2){
            result=num1;
        }else {
            result=num2;
        }
        return result;
    }
}