1. 程式人生 > >菜雞的Java課筆記 第六 方法

菜雞的Java課筆記 第六 方法

前提:現在所講解的方法定義格式,只屬於JAVA 方法定義的其中一種組成方式。而完整的組成方式將隨著學習逐步滲透。
  1.方法的基本定義
    方法(Method(麥斯而))在一些書中也會有人將其說是  函式(Function(防滲)) 。但是兩者的含義完全相同的,那什麼是方法?為什麼需要有方法?實際上所謂的方法指的就是一段程式碼封裝在一個結構體之中,並且可以重複呼叫。
    方法的定義語法原則(本次所講解的語法指的是在主類中定義的方法,並且由主方法直接呼叫。)
  2.方法呼叫
    java中的方法分為(1)靜態方法 直接使用 類名.方法名 呼叫
    (2)普通方法 通過new建立物件 然後使用 物件.方法 呼叫

public static 返回值型別 方法名稱([引數型別 變數,引數型別 變數,...]){
    方法中包含的程式碼;
    [return 返回值;]
}


返回值型別可以設定為兩種:
   JAVA 中的資料型別:基本資料型別,引用資料型別;如果現在有返回的內容則需要通過 retum(瑞特)返回
  不返回任何的結果:void(wo的);

方法就是留給使用者進行重複呼叫的。

public class TestDemo{
    public static void main(Srting args[]){
        printlnfo(); // 呼叫方法
printlnfo(); // 呼叫方法 } public static void printlnfo(){ // 此方法沒有引數沒有返回值 System.out.println("........................."); System.out.println("-- Hello World! --"); System.out.println("........................."); } }


範例:定義一個可以接收引數的方法

public class TestDemo{
    
public static void main(Srting args[]){ printlnfo(10); // 呼叫方法 printlnfo(100); // 呼叫方法 } public static void printlnfo(int age){ if(age > 250){ System.out.println("您是人嗎?"); }else{ System.out.println("您的年齡是:"+ age); } } }

  實際上在進行方法編寫的時候有其自己的定義格式:要求定義方法的單詞第一個單詞字母小寫,而後每個單詞的首字母大寫。

  那麼以上定義了無參無返回值,有參無返回值的方法,那麼下面在來定義有引數有返回值的方法
    範例:定義一個加法操作

public class TestDemo{
    public static void main(Srting args[]){
        int result = add(10,20); // 由於返回的是int型資料,所以可以利用變數接收
        System.out.println(result);
        System.out.println(add(100,300)); // 直接將方法的返回值輸出
public static int add(int x,int y){
        if(x<0){
            return 0; // 只要有返回值型別宣告,那麼必須使用return 返回
        }
        if(y<0){
            return 0; // 只要有返回值型別宣告,那麼必須使用return 返回
        }
        return x + y; // 只要有返回值型別宣告,那麼必須使用return 返回
    }
}

  在學習迴圈語句的時候學習過 break 與 continue語句,這兩個語句主要是進行迴圈控制,合理的利用可以讓迴圈語句之後的程式碼不在執行,但是必須與 if 判斷一起使用。
而同樣的操作在方法中也提供,如果說你的方法使用了 void 宣告,那麼就是可以
在方法執行過程之中直接利用“return”來結束方法呼叫。
  範例:利用return 結束方法呼叫

public class TestDemo{
    public static void main(Srting args[]){
        print(10);
        print(100);
    }
    public static void print(int age){ // 此時方法沒有返回值
        if(age > 250){
            return; // 後續程式碼不再執行,前提:方法必須返回 void
        }
        System.out.println("年齡是:" + age);
    }
}

  不管什麼情況,只要是在return之後的程式碼都不再執行,但是需要區分的是,如果方法返回的是 void,那麼就可以直接寫 return,但是如果方法本身有返回值,那麼就必須在編寫return的同時返回內容。

  return的常用作用有以下兩種
    一種是返回引數所用的關鍵字,假如一個有返回值的方法執行完了之後需要返回一個引數,示例:

  public string functionTest(){
         String a = "abc";
         return a;
  }

  那麼這個方法被呼叫之後就會返回一個值為abc的字串,string result = functionTest();


  第二種用法是,程式碼執行到此處終止。
    比如當代碼執行到某個地方會出現幾種結果,然後其中一種結果就不能執行後續程式碼,這時候在那裡加上一個return就可以終止後面的程式碼執行

    實際的開發之中是否使用方法有兩個決定性的原則:
      主方法裡的程式碼是不是太多了,如果多了,可以將其拆分到方法之中;
      在你編寫程式碼的過程之中總是在不斷的進行復制和貼上;就可以考慮將這部分程式碼封裝為方法


3. 方法過載(重點)
  方法過載指的是方法名稱相同,引數的型別或個數不同。為了理解方法過載的意義   要求:
    現在要求定義有三個加法操作,包括兩個整型相加,三個整型相加,兩個小數相加。

public class TestDemo{
    public static void main(Srting args[]){
        System.out.println("兩個整數相加:" + add1(10,20));
        System.out.println("三個整數相加:" + add2(10,20,30));
        System.out.println("兩個小數相加:" + add3(10.2,30.4));
    }
    public static int add1(int x,int y){
        return x+y;
    }
    public static int add2(int x,int y,int z){
        return x + y + z;
    }
    public static double add3(double x,double y){
        return x+y;
    }
}

    如果說功能相同的方法名字不一樣,那麼在呼叫的時候實在是很麻煩的,這種情況下最好的解決方案就是方法過載(像這樣有幾十個就會很麻煩,要自己去找合適的方法,不過現在可以用方法過載來解決)
  範例:利用過載解決
    呼叫過載方法時會根據傳遞的引數型別以及個數呼叫不同的方法執行。

public class TestDemo{
    public static void main(Srting args[]){
        System.out.println("兩個整數相加:" + add(10,20));
        System.out.println("三個整數相加:" + add(10,20,30));
        System.out.println("兩個小數相加:" + add(10.2,30.4));
    }
    public static int add(int x,int y){
        return x+y;
    }
    public static int add(int x,int y,int z){
        return x + y + z;
    }
    public static double add(double x,double y){
        return x+y;
    }
}

  兩類操作完成的是同一個功能,但是很明顯,在呼叫的時候利用方法過載的操作會更加簡單。

  但是在進行方過載的時候有一項重要的說明----關於 返回值的問題。在方法過載的時候本身只規定了引數的型別與個數的不同,但是並沒有針對於返回值的型別是否相同進行限制。但是在實際來講,方法過載時返回值型別一定要相同。

  方法過載時返回值型別可以不同,但是從開發的標準來講應該相同的。


2.3 方法的遞迴呼叫
  如果以開發中出現的程式碼為主的畫,那麼遞迴操作幾乎不會出現,但是如果你要想分析一些開發工具原理的話那麼就必須使用遞迴。遞迴是邁入資料結構的第一步,但是這並不是說一下子就就可以理解遞迴,相反,如果真的想理解遞迴操作,那麼可以將本次的程式碼自己編寫50遍以上。

  所謂的遞迴指的是方法自己呼叫自己的情況。而對於遞迴操作一般都要滿足如下操作。
    遞迴必須在方法上進行
    遞迴中必須有明確的結束條件
    遞迴的過程之中必須進行結束條件的變更。
  範例:利用while迴圈實現一個累加操作。

public class TestDemo{
    public static void main(Srting args[]){
        int x = 1;
        int sum = 0;
        while(x <= 100){
            sum += x;
            x ++;
        }
        System.out.println(sum);
    }
}

那麼下面講此程式碼修改為遞迴的呼叫形式。

public class TestDemo{
    public static void main(Srting args[]){
        System.out.println(sum(100));
    }
    public static int sum(int num){ // 進入到方法之中
        if(num == 1){ // 已經到了最後一個數據
            return 1; // 直接返回1
        }
        // 100+99+98+...+2+1;
        return num + sum(num -1); // 每次修改接收條件

  對於此程式碼的呼叫分析如下:
    第一次呼叫(主方法呼叫):retum 100 + sum(99);
    第二次呼叫(sum(99)方法):retum 99 + sum(98);
    第三次呼叫(sum(98)方法):retum 98 + sum(97);
    ...............................
    倒數第二次呼叫(sum(2)方法):retum 2 + sum(1);
    最後一次呼叫(sum(1)方法):if 判斷條件滿足,retum 1。
  最終變為了:retum 100 +99+98+......+3+2+1(if 語句);

  實際上遞迴操作有一件很可怕的影響:由於其操作所佔用的時間(包括記憶體佔用)的時間過長,那麼有可能會造成記憶體的溢位。導致程式出現問題。所以不是必須用到的情況下,不建議使用遞迴操作。


3.總結
  方法的定義結構,但是本次的方法有限制性:只能夠在主類中定義由主方法進行呼叫;
  方法的過載:方法名稱相同,引數的型別和個數不同,方法過載對返回值型別沒有要求,但是一定要統一返回值型別。