Java基礎知識篇05——方法

白夜的白發表於2024-04-02

哈嘍,大家好!我是白夜,今天給大家聊聊Java裡面的方法。

一、什麼是方法

1.1、方法的概念與作用

1.1.1、概念

​ 方法(method),又稱為函式(function),代表一段“獨立的”“可複用”的“功能”程式碼

1.1.2、作用

​ 方法可以複用程式碼,減少了程式碼的冗餘,提高效率和程式的可讀性。

1.2、方法的定義

定義一個方法的語法

/**
 * 修飾符 返回值型別 方法名稱([引數型別 形參 ...]){
 *  方法體程式碼;
 *  (return 返回值;)
 * }
 */
public static void main(String[] args) {
    int num1 = 10;
    int num2 = 20;
    System.out,println(Add(a,b));
}

  • 修飾符:修飾符,這是可選的,告訴編譯器如何呼叫該方法。定義了該方法的訪問型別。
  • 返回值型別∶方法可能會返回值。returnValueType 是方法返回值的資料型別。有些方法執行所需的操作,但沒有返回值。在這種情況下,returnValueType 是關鍵字 void。
  • 方法名:是方法的實際名稱,採用小駝峰命名。方法名和參數列共同構成方法簽名。
  • 引數型別:引數像是一個佔位符。當方法被呼叫時,傳遞值給引數。這個值被稱為實參或變數。引數列表是指方法的引數型別、順序和引數的個數。引數是可選的,方法可以不包含任何引數。
    • 形式引數:在方法被呼叫時用於接收外界輸入的資料。
    • 實參:呼叫方法時實際傳給方法的資料。

注意事項:

  • 修飾符:現階段直接使用 static 固定搭配,static 表示靜態的,後面根據具體使用場景是否用static 修飾
  • 引數列表:如果方法沒有引數,()中什麼都不寫,如果有引數,需指定引數型別,多個引數之間使用逗號隔開

定義方法時一般有以下幾種情況:

  1. 無引數無返回值的
  2. 無引數有返回值的
  3. 有引數無返回值的
  4. 有引數有返回值的
//無引數無返回值
public void m1() { }
//無引數有返回值
public int m2() {
	return 1;
}
//有引數無返回值
public void m3(String s) { }
//有引數有返回值
public boolean m4(int a) {
	return true;
}

定義方法時基本上就是以上幾種情況,可以選擇加或者不加訪問許可權修飾符和靜態修飾符,但是返回值型別和方法簽名是必不可少的。

注意:有返回值的方法,必須在方法體中,使用 return 關鍵字,返回對應型別的值。比如你定義的方法返回值是int型別,那麼在大括號中就必須有 return 整數數字; 如果 return 後的資料型別與返回值型別不同,也會報錯。

在 java 中,return 關鍵字和 break 關鍵字的作用相似,在當前這行程式碼使用 return 關鍵字時表示程式碼到此執行結束,下邊的程式碼都不會再執行了。如果寫了就會報錯。

二、方法的呼叫

2.1、語法

主要是看否是靜態方法(被 static 修飾)

靜態方法:在本類中可以直接使用方法名(引數)呼叫,在其他類中使用類名點方法名(引數)呼叫

非靜態方法:在任何地方呼叫,都需要建立類的引用物件,使用引用物件點方法名(引數)呼叫

//靜態方法呼叫 類名+方法名()
User.getName();//無參的
User.getName("毛毛"); //有參的

//非靜態方法呼叫 物件名+方法名()
User u = new User();
u.getName();//無參的
u.getName("毛毛"); //有參的

注意事項:

  • 定義方法的時候, 不會執行方法的程式碼. 只有呼叫的時候才會執行
  • 一個方法可以被多次呼叫
  • 一個方法只完成一個功能,方法完成的功能越多,複用性越差

2.2、形參和實參的關係

Java中方法的形參的名字可以隨意取,對方法都沒有任何影響,形參只是方法在定義時需要藉助的一個變數,用來儲存方法在呼叫時傳遞過來的值。

  1. 形參:方法定義中的引數
  2. 實參:方法呼叫中的引數
//n1和n2就是形參
public static int add (int n1,int n2) {    
    return n1 + n2;
}
add(num1,num2);//num1和num2就是實參,在方法被呼叫時,形參n1用來儲存num1的數值,形參n2用來儲存num2的數值

2.3、關鍵字return

return用於結束當前方法的執行。

圖片01

return的使用有兩種形式:

  • return; ==> 只能用於方法的返回值型別是 void 的場景
  • return 結果值; ==>只能用於方法的返回值型別不是 void 的場景。
public void max(int[] a){
    for(int i = 0; i<int.length i++;){
        if(int[i] == a){
            //結束方法
            return;
        }
    }
}
public int max(int a, int b){
    //返回值
    return a > b ? a : b
}

三、方法的過載

3.1、過載(OverLoad)

3.1.1、方法過載的概念和作用

概念:在同一個類中,方法名相同,形參列表不同,就是方法過載。

作用:

  1. 可以減少命名衝突
  2. 可以減少程式設計師記憶成本,方便解決了一類問題

3.1.2、語法

//構成過載關係,以為個數不一樣
public static int sum (int a,int b) {
    return a + b;
}
public static int sum (int a,int b,int c) {
    return a + b + c;
}
//構成過載,因為引數個數不同
public static float func (int a) {
    //方法體
}
public static int func (int a,int b) {
    //方法體
}


//不構成過載關係,因為引數都一樣,不用管返回值!
public static void func (int a) {
    //方法體
}
public static int func (int a) {
    //方法體
}
public class Test1 {
    public static void func (int a) {
        //方法體
    }
}
//不構成過載關係,因為分別在兩個類中
public class Test2 {
    public static int func (double b) {
        //方法體
    }
}

3.1.3、注意事項

  • 方法名必須相同。
  • 引數列表必須不同(引數的個數不同、引數的型別不同、型別的次序必須不同)。
  • 與返回值型別是否相同無關。
  • 編譯器在編譯程式碼時,會對實參型別進行推演,根據推演的結果來確定呼叫哪個方法。

3.2、方法簽名

概念:

方法簽名,是來區分不同方法的標示符。

語法:

​ 方法名和引數列表

方法名不同或者引數列表不同都可以用來區分不同的方法。

具體方式:方法全路徑名+引數列表+返回值型別,構成方法完整的名字。

四、方法使用的注意事項

  1. 方法呼叫的時候,實參(變數/值) 必須和 形參完全一致
  2. 一個類中,只能有一個方法簽名
  3. 返回值型別是 void,不能用變數接受,不能放在列印語句中
  4. 返回值不是void,必須return一個資料,並且資料型別和返回值型別完全一致
  5. return的資料,如果在if或者迴圈語句中,必須保證在條件語句和迴圈語句不成立的情況下,也有資料的返回

五、方法的引數傳遞

java 的引數傳遞:

基本資料型別傳遞的是:值本身

引用資料型別傳遞的是:變數在堆中的引用地址

5.1、值傳遞

值傳遞(Pass by Value)是指將引數的副本傳遞給方法,即方法內部對引數進行的操作不會影響到原始的引數

/**
 *	堆疊分析:
 *		基本型別是"值"的傳遞
 *		引用型別是引用地址的傳遞
 *		方法內部對引數的修改只會在方法內部生效,不會影響到方法外部
 */
public class _04StackHeap {
    public static void main(String[] args) {
        int a = 1;
        System.out.println("改變前:" + a);// 1
        // 呼叫change方法
        change(a);
        System.out.println("改變後================ :" + a);// 1	
    }

    public static void change(int a) {
        a = 2;
        System.out.println("改變中-------:" + a);// 2
    }
}

5.2、引用傳遞

引用傳遞(Pass by Reference)是指將引數的引用地址值傳遞給方法,即方法內部對引數的操作會影響到原始的引數。

*	堆疊分析:
 *		基本型別是"值"的傳遞
 *		引用型別是引用地址的傳遞
 *		在引用傳遞中,方法內部對引數的修改會直接反映到方法外部 
 */
public class _05StackHeap {
    public static void main(String[] args) {
        int[] arr = {1, 2};
        System.out.println("改變前:" + arr[0]);// 1
        System.out.println("改變前:" + arr[1]);// 2
        // 呼叫change方法
        change(arr);
        System.out.println("改變後================ :" + arr[0]);// 6
        System.out.println("改變後================ :" + arr[1]);// 9
    }
    public static void change(int[] arr) {
        arr[0] = 6;
        arr[1] = 9;
        System.out.println("改變中-------:" + arr[0]);// 6
        System.out.println("改變中-------:" + arr[1]);// 9
    }
}

5.3、可變引數

5.3.1、語法

//引數型別... 變數名
public void aa(int a, int... bs){ };

特點:

  • 一個方法中只能指定一個可變引數,
  • 它必須是方法的最後一個引數,任何普通的引數必須在它之前宣告。
public static int getSum(int... arr) {
	System.out.println(arr);// 地址
	System.out.println(arr.length);// 陣列長度
	int sum = 0;
	for (int e : arr) {
		System.out.println("元素:" + e);
		sum += e;
	}
	return sum;
}

相關文章