Java方法

十四2001發表於2024-07-02

方法

什麼是方法

Java方法是語句的集合,在一起實現一個功能

  • 方法是解決一類問題的步驟的有序集合
  • 方法包含於類或物件中
  • 方法在程式中被建立,在其他地方被引用

方法的設計原則:保持方法的原子性,一個方法只完成一個功能,利於後期擴充。

方法命名規則:小寫開頭+駝峰

方法的定義

方法包含一個方法頭和方法體

  • 修飾符

  • 返回值型別:方法可能會有返回值

  • 方法名

  • 引數型別:

    • 形參

    • 實參

  • 方法體:具體實現語句

  • 返回值:return

    修飾符 返回值型別 方法名(引數型別 引數名, 引數型別 引數名 ···){
    
    	···
    	方法體
    	···
    	
     	return 返回值;
    }
    

方法呼叫

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

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

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

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

    System.out.println();
    

Java都是值傳遞

方法的過載

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

方法過載的規則:

  • 方法名稱必須相同

  • 引數列表必須不同(個數不同、型別不同、引數排列順序不同等)

  • 方法的返回型別可以相同或不同

  • 只有返回型別不同不能成為方法的過載

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


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

實現原理:

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

可變引數

若不確定方法的引數數量 可在最後一個引數的型別後+...

public void test(int... i){
    for (int j = 0; j < i.length; j++) {
        System.out.println(i[j]);
    }
}

HelloWorld helloWorld = new HelloWorld();
        helloWorld.test(1,2,3,4); //呼叫方法1
        helloWorld.test(new int[]{11,22,33,44});//呼叫方法2

遞迴

A方法呼叫A方法,自己呼叫自己

  • 把一個大型複雜的問題層層轉換為一個與原問題相似的規模較小的問題來求解

遞迴結構包含兩個部分:

  • 遞迴頭:什麼時候不呼叫自身方法,如果沒有頭,將陷入死迴圈

  • 遞迴體:什麼時候呼叫自身方法

    //階乘
    public static int jieChen(int a){
            if ( a == 1 ){
                return 1;
            }else {
                return a*jieChen(a-1);
            }
        }
    
    jieChen(4);
    

能不用遞迴就別用遞迴

作業:計算器

import java.util.Scanner;

/**
 * @version: java version 1.8
 * @Author: Mr Orange
 * @description:
 * @date: 2024-07-02 0:14
 */
public class Calculator {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int num1 = 0;
        int num2 = 0;
        int flag = 0;
        String operator = "";
        System.out.print("請輸入: ");
        while (true){
            if (scanner.hasNextInt()){
                if (flag == 0){
                    flag++;
                    num1 = scanner.nextInt();
                }else {
                    flag++;
                    num2 = scanner.nextInt();
                }
            }else {
                operator = scanner.next();
            }
            if (flag == 2){
                rusult(operator, num1, num2);
                flag = 0;
                System.out.print("請輸入: ");
            }
        }

    }
    public static void rusult(String operator,int num1,int num2){
        int number = 0;
        switch (operator){
            case "+":
                number=add(num1,num2);
                System.out.println("結果為:"+number);
                break;
            case "-":
                number=sub(num1,num2);
                System.out.println("結果為:"+number);
                break;
            case "*":
                number=mul(num1,num2);
                System.out.println("結果為:"+number);
                break;
            case "/":
                number=div(num1,num2);
                System.out.println("結果為:"+number);
                break;
            default:
                break;
        }
    }
    public static int add(int a, int b) {
        return a + b;
    };
    public static int sub(int a, int b) {
        return a - b;
    };
    public static int mul(int a, int b) {
        return a * b;
    };
    public static int div(int a, int b) {
        return a / b;
    };

}