天天看點

Java基礎之(十一):方法

關于方法的一些筆記

Java方法詳解

何謂方法(了解)

System.out.println()
// 類  對象   方法
           
  • 方法是語句的集合,它們在一起執行一個功能。
    • 方法是解決一類問題的步驟的有序集合
    • 方法包含于類或對象中
    • 方法在程式中被建立,在其他地方被引用
  • 設計方法的原則:方法的本意是功能塊,就是實作某個功能的語句塊的集合。我們設計方法的時候,最好保持方法的原子性,就是一個方法隻完成1個功能,這樣利于我們後期的擴充。
//main方法
    public static void main(String[] args) {
//        int add = add(1,2);
//        System.out.println(add);
        test();
    }
    //加法
    public static int add(int a,int b){
        return a+b;
    }
    public static void test(){
        for (int i=0;i<=1000;i++){
            if(i%5==0){
                System.out.print(i + "\t");
            }
            if(i%(5*3)==0){
                System.out.print("\n");
            }
        }
    }
           

方法的定義及調用

方法的定義

  • Java的方法類似于C中的函數,是一段用來完成特定功能的代碼片段,一般情況下,定義一個方法包含以下文法:
  • 方法包含一個方法頭和一個方法體。下面是一個方法的所有部分:
修飾符 傳回值類型 方法名(參數類型 參數名){
	...
	方法體
	...
	return 傳回值;
}
           
    • 修飾符:修飾符,這是可選的,告訴編譯器如何調用該方法。定義了該方法的通路類型。
    • 傳回值類型:方法可能會傳回值。returnValueType是方法傳回值的資料類型。有些方法執行所需的操作,但沒有傳回值。在這種情況下,returnValueType是關鍵字void。
    • 方法名:是方法的實際名稱。方法名和參數表共同構成方法簽名。
    • 參數類型:參數像是以一個占位符。當方法被調用時,傳遞值給參數。這個值被稱為實參或變量。參數清單是指方法的參數類型、順序和參數的個數。參數是可選的,方法可以不包含任何參數。
      • 形式參數:在方法被調用時用于接收外界輸入的資料。
      • 實參:調用方法時實際傳給方法的資料。
    • 方法體:方法體包含具體的語句,定義該方法的功能。

方法的調用

  • 調用方法:對象名.方法名(實參清單)
  • Java支援兩種調用方法的方式,根據方法是否傳回值來選擇。
  • 當方法傳回一個值的時候,方法調用通常被當作一個值。例如:
int larger = max(30,40);
           
  • 如果方法傳回值是void,方法調用一定是一條語句。
System.out.println("Hello,world!");
           
  • 值傳遞(Java)和引用傳遞

方法重載

  • 重載就是在一個類中,有相同的函數名稱,但形參不同的函數。
  • 方法的重載的規則:
    • 方法名稱必須相同。
    • 參數清單必須不同(個數不同、或類型不同、參數排列順序不同等)。
    • 方法的傳回類型可以相同也可以不相同。
    • 僅僅傳回類型不同不足以成為方法的重載。
  • 實作理論:
    • 方法名稱相同時,編譯器會根據調用方法的而參數個數、參數類型等去逐個比對,以選擇對應的方法,如果比對失敗,則編譯器報錯。
public static void main(String[] args) {

    //int max = max(10,20);
    double max = max(10.0,20.0);
    System.out.println(max);
}

//比大小
public static double max(double num1,double num2){
    double result = -1;
    if (num1 == num2) {
        System.out.println("num1==num2");
        return 0;//終止方法
    }
    if(num1>num2){
        result = num1;
    }else{
        result = num2;
    }
    return result;
}
//比大小
public static int max(int num1,int num2){
    int result = -1;
    if (num1 == num2) {
        System.out.println("num1==num2");
        return 0;//終止方法
    }
    if(num1>num2){
        result = num1;
    }else{
        result = num2;
    }
    return result;
}
           

指令行傳參(拓展)

  • 有時候你希望運作一個程式的時候再傳遞給它消息。這要靠傳遞指令行參數給main()函數實作。
public class CommandLineDemo {
    public static void main(String[] args) {
        for (int i = 0; i < args.length; i++) {
            System.out.println("args[" + i + "]: " + args[i]);
        }
    }
}
           
Java基礎之(十一):方法

可變參數

不定項參數,即不一定傳遞幾個參數

  • JDK1.5開始,Java支援傳遞同類型的可變參數給一個方法。
  • 在方法聲明中,在指定參數類型後加一個省略号(...)。
  • 一個方法隻能指定一個可變參數,它必須是方法的最後一個參數。任何普通的參數必須在它之前聲明。
Java基礎之(十一):方法
public class Demo03 {
    public static void main(String[] args) {
        Demo03 demo03 = new Demo03();
        demo03.test();
    }
    public void test(int... i){
        System.out.println(i);
    }
           
Java基礎之(十一):方法
public class Demo03 {
    public static void main(String[] args) {
        Demo03 demo03 = new Demo03();
        demo03.test(1);
    }
    public void test(int... i){
        System.out.println(i[0]);
    }
           
Java基礎之(十一):方法
public class Demo03 {
    public static void main(String[] args) {
        Demo03 demo03 = new Demo03();
        demo03.test(1,2,2,3,4,5);
    }
    public void test(int... i){
        System.out.println(i[3]);
    }
           
Java基礎之(十一):方法
public class Demo03 {
    public static void main(String[] args) {
        Demo03 demo03 = new Demo03();
        demo03.test(1,2,2,3,4,5);
    }

    public void test(int... i){
        System.out.println(i[0]);
        System.out.println(i[1]);
        System.out.println(i[2]);
        System.out.println(i[3]);
        System.out.println(i[4]);
        System.out.println(i[5]);
    }
           
Java基礎之(十一):方法

源碼

public class Demo04 {
    //排序算法,判斷誰是最大的
    public static void main(String[] args) {
        //調用可變參數的方法
        printMax(34, 3, 3, 2, 56.5);
        printMax(new double[]{1,2,3});
    }
    public static void printMax(double... numbers){
        if (numbers.length == 0){
            System.out.println("No argument passed");
        }

        double result = numbers[0];

        //排序!
        for (int i = 1; i < numbers.length; i++) {
            if (numbers[i] > result){
                result = numbers[i];
            }
        }
        System.out.println("The max value is "+ result);
    }
           
Java基礎之(十一):方法

遞歸

  • 遞歸就是:A方法調用A方法!就是自己調用自己
  • 遞歸的能力在于用有限的語句來定義對象的無限集合
  • 遞歸結構包括兩個部分:
    • 遞歸頭:什麼時候不調用自身方法。如果沒有頭,将陷入死循環。
    • 遞歸體:什麼時候需要調用自身方法。
//2! 2*1
//3! 3*2*1
//5! 5*4*3*2*1
public static void main(String[] args) {
    System.out.println(f(5));
}

public static int f(int n){
    if(n==1){
        return 1;
    }else{
        return n*f(n-1);
    }
}
           
Java基礎之(十一):方法