1. 程式人生 > 其它 >Java學習筆記(八)—— 方法

Java學習筆記(八)—— 方法

技術標籤:Java學習java

方法的定義和呼叫

  • 對一個功能進行提取,提取出一段程式碼,這就是一個方法
  • 方法和方法是並列的關係,注意不要在main方法中寫方法

方法的定義格式

        修飾符 方法返回值型別 方法名(形參列表){
                方法體;
                return 方法返回值;
        }

方法的定義與呼叫例項

import java.util.Scanner;

public class Method_test1{
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.print("請輸入第一個整數:");
        int num1 = sc.nextInt();
        System.out.print("請輸入第二個整數:");
        int num2 = sc.nextInt();
        study(num1,num2); // 也可以直接傳入實參,例如 study(10,25);
    }
    public static void study(int num1,int num2){ // 形參
        int sum = 0;
        sum += num1;
        sum += num2;
        System.out.println("兩數的和為"+sum);
    }
}

要點

  • 如果方法有返回值的話:return + 返回值
  • 方法不需要返回值的話:return可以省略不寫,並且方法的返回值型別為 void
  • 一般使用不確定的因素當做方法的形參

方法的作用:提高程式碼的複用性,一個功能對應一個方法,要使用哪個功能就直接呼叫那個方法即可,減少重複程式碼

測試1

猜數字

// 猜數字:我心裡有一個數字,你來猜,看是否猜對

import java.util.Scanner;

public class Method_Test2 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.print("猜猜我心裡的數(1-6):");
        int guessNum = sc.nextInt();
        guess(guessNum);
    }
    public static void guess(int guess){
        int num = (int)(Math.random()*6)+1;
        System.out.println(guess==num?"猜對了":"猜錯了");
    }
}

擴充套件

兩個數是否交換成功

public class TestM{
        public static void main(String[] args){
                int a=10;
                int b=20;
                System.out.println("輸出交換前的兩個數:"+a+"---"+b);
                changeNum(a,b);
                System.out.println("輸出交換後的兩個數:"+a+"---"+b);
        }
        public static void changeNum(int num1,int num2){
                int t;
                t=num1;
                num1=num2;
                num2=t;
        }
}


/*
    結果為:
    輸出交換前的兩個數:10---20
    輸出交換後的兩個數:10---20
*/
  • 在棧中,先進後出,a先被定義,放在最底層
  • 一個方法有一塊記憶體區域,在方法執行完後,這塊記憶體區域也會消失

當a和b這兩個實參的值給了num1和num2,之後的執行都是在changenNum方法的記憶體區域內交換值,所以num1和num2的值交換後沒有返回給a和b,記憶體區域消失後,num1和num2也消失了


方法區
//
b20//
a10//

方法的過載

在同一個類當中,方法名相同但形參列表不同

public class Method_Test3{
    public static void main(String[] args){
        // 10+20
        int sum = add(10,20);
        System.out.println(sum);
        // 20+40+80
        System.out.println(add(add(20,40),80));
        // 30+60+90+120
        System.out.println(add(add(add(30,60),90),120));
        // 9.8+4.7
        System.out.println(add(9.8,4.7));
    }
    // 兩個數相加
    public static int add(int num1,int num2){
        return num1+num2;
    }
    // 三個數相加
    public static int add(int num1,int num2,int num3){
        return num1+num2+num3;
    }
    // 四個數相加
    public static int add(int num1,int num2,int num3,int num4) {
        return num1 + num2 + num3 + num4;
    }
    // 兩個double型別的數相加
    public static double add(double num1,double num2){
        return num1+num2;
    }
  • 方法的過載只需方法名一致,形參列表不同
  • 形參列表的不同為:
    【1】型別不同【2】個數不同【3】順序不同
  • 與方法的修飾符和返回值型別無關
  • 注意int a和int b不構成過載

在方法過載中,型別級別也同樣適用

byte,short,char—>int—>long—>float—>double

public class Method_Extend1 {
    public static void main(String[] args) {
        add(5);
    }
    public static void add(long num1){
        System.out.println(4);
    }
    public static void add(float num1){
        System.out.println(3);
    }
    public static void add(double num1){
        System.out.println(2);
    }
    public static void add(int num1){
        System.out.println(1);
    }
}