程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 更多關於編程 >> Java語法基礎之函數的使用說明

Java語法基礎之函數的使用說明

編輯:更多關於編程
    函數就是定義在類中的具有特定功能的一段獨立小程序,函數也稱為方法  

    函數
    四個方面:
    函數的定義
    函數的特點
    函數的應用
    函數的重載

    一、函數的定義及特點
    1) 什麼是函數?
    函數就是定義在類中的具有特定功能的一段獨立小程序,函數也稱為方法
    2)Java中函數的格式:
    修飾符 返回值類型函數名(參數類型 形式參數1,參數類型 形式參數2,。。)
    {  執行語句;
     return 返回值;

    返回值類型:函數運行後的結果的數據類型
    參數類型:是形式參數的數據類型
    形式參數:是一個變量,用於存儲調用函數時傳遞給函數的實際參數
    實際參數:傳遞給形式參數的具體數值
    return:用於結束函數
    返回值:該值會返回給調用者
    3) 函數的特點
    a) 定義函數可以將功能代碼進行封裝
    b) 便於對該功能進行復用
    c) 函數只有被調用才會被執行
    d) 函數的出現提高了代碼的復用性
    e) 對於函數沒有具體返回值的情況,返回值類型用關鍵字void表示,那麼該函數中的return語句如果在最後一行可以省略不寫,系統會幫你自動加上。
    注:
    a) 函數中只能調用函數,不可以在函數內部定義函數。
    b) 定義函數時,函數的結果應該返回給調用者,交由調用者處理。
    c) 當函數運算後,沒有具體的返回值時,這是返回值類型用一個特殊的關鍵字來標識該關鍵字就是void,void:代表的是函數沒有具體返回值的情況。
    d)  當函數的返回值類型是void時,函數中的return語句可以省略不寫。
    4)  如何定義一個函數?
        函數其實就是一個功能,定義函數就是實現功能,通過兩個明確來完成:
           1)、明確該功能的運算完的結果,其實是在明確這個函數的返回值類型。
           2)、在實現該功能的過程中是否有未知內容參與了運算,其實就是在明確這個函數的參數列表(參數類型&參數個數)。
    5) 函數的作用:
    1)、用於定義功能。
    2)、用於封裝代碼提高代碼的復用性。
    注意:函數中只能調用函數,不能定義函數。
    6) 主函數:
        1)、保證該類的獨立運行。
        2)、因為它是程序的入口。
        3)、因為它在被jvm調用。
    7) 函數定義名稱是為什麼呢?
    答:1)、為了對該功能進行標示,方便於調用。
        2)、為了通過名稱就可以明確函數的功能,為了增加代碼的閱讀性。

    二、函數的應用
    1)  兩個明確
    a)  明確要定義的功能最後的結果是什麼?
    b)  明確在定義該功能的過程中,是否需要未知內容參與運算
    2)  示例:
    舉例1:

    復制代碼 代碼如下:
    class FunctionDemo
    {
     public static void main(String[] args)
     {
      int x = 4;
      System.out.println(x*3+5);
      x = 6;
      System.out.println(x*3+5);
      int y = 4*3+5;
      int z = 6*3+5;
            System.out.println(y);
            System.out.println(z);
     }
    }


    發現以上的運算,因為獲取不同數據的運算結果,代碼出現了重復。
    為了提高代碼的復用性。對代碼進行抽取。將這個部分定義成一個獨立的功能。方便與日後使用。
    java中對功能的定義是通過函數的形式來體現的。
    明確功能:需要定義功能,完成一個整數的*3+5的運算,

    1,先明確函數定義的格式。
        /*
        修飾符返回值類型函數名(參數類型形式參數1,參數類型形式參數2,)
        {
               執行語句;
               return 返回值;
        }

    復制代碼 代碼如下:
    class FunctionDemo
    {
     public static void getResult(int num)
     {
      System.out.println(num * 3 + 5);
      return;//可以省略
     }
    public static void main(String[] args)
     {
      getResult(5);
     }
    }


    對上述關於return是否省略這一小小知識點的總結:
    當函數運算後,沒有具體的返回值時,這是返回值類型用一個特殊的關鍵字來標識。
    該關鍵字就是void。void:代表的是函數沒有具體返回值的情況。
    當函數的返回值類型是void時,函數中的return語句可以省略不寫。

    舉例2:

    復制代碼 代碼如下:
    class FunctionDemo2
    {
     public static void main(String[] args)
     {
      int sum = getSum(4,6);
      System.out.println("sum="+sum);
      sum = getSum(2,7);
      System.out.println("sum="+sum);
     }

     /*下面的這個功能定義思想有問題,為什麼呢?因為只為完成加法運算,至於是否要對和進行打印操作,
     那是調用者的事,不要在該功能中完成。*/
     public static void get(int a,int b)
     {
      System.out.println(a+b);
      return ;
     }
    }


    如何定義一個函數呢?
        1,既然函數是一個獨立的功能,那麼該功能的運算結果是什麼先明確
           因為這是在明確函數的返回值類型。
        2,在明確在定義該功能的過程中是否需要未知的內容參與運算。
           因為是在明確函數的參數列表(參數的類型和參數的個數)。

    復制代碼 代碼如下:
    class FunctionDemo2
    {
     public static void main(String[] args)
     {
    /*
      int sum = getSum(4,6);
      System.out.println("sum="+sum);
      sum = getSum(2,7);
      System.out.println("sum="+sum);
      */
      //get(4,5);
      int x = getSum(4,4);
      int y = getSum(7,9);
      int num = getMax(x,y);
     }
     //需求:定義一個功能。完成3+4的運算。並將結果返回給調用者。
     /*
     1,明確功能的結果:是一個整數的和。
     2,在實現該功能的過程中是否有未知內容參與運算,沒有。
     其實這兩個功能就是在明確函數的定義。
     1,是在明確函數的返回值類型。
     2,明確函數的參數列表( 參數的類型和參數的個數)。
     */

     public static int getSum()
     {
      return 3+4;
     }

     /*
     以上這個函數的功能,結果是固定的,毫無擴展性而言。
     為了方便用戶需求。由用戶來指定加數和被加數。這樣,功能才有意義。
     思路:
     1,功能結果是一個和。返回值類型是int。
     2,有未知內容參與運算。有兩個。這個兩個未知內容的類型都是int。
     */
     public static int getSum(int x,int y)
     {
      return x+y;
     }

     /*
     需求:判斷兩個數是否相同。
     思路:
     1,明確功能的結果:結果是:boolean 。
     2,功能是否有未知內容參與運算。有,兩個整數。
     */
     public static boolean compare(int a,int b)
     {
      /*
      if(a==b)
       return true;
      //else
       return false;
      */
      //return (a==b)?true:false;
      return a==b;
     }
     /*
     需求:定義功能,對兩個數進行比較。獲取較大的數。
     */
     public static int getMax(int a,int b)
     {
      /*
      if(a>b)
       return a;
      else
       return b;
       //或者用下面的三元運算符
       */
      return (a>b)?a:b;
     }
    }


    3)   練習:
    1,定義一個功能,用於打印矩形。
    2,定義一個打印99乘法表功能的函數。

    復制代碼 代碼如下:
    class  FunctionTest
    {
     public static void main(String[] args)
     {
    draw(5,6);
      printHr();
      draw(7,9);
      printHr();
      print99();
     }
     /*
     定義一個功能,用於打印矩形。
     思路:
     1,確定結果:沒有,因為直接打印。所以返回值類型是void
     2,有未知內容嗎?有,兩個,因為矩形的行和列不確定。
     */
     public static void draw(int row,int col)
     {
      for(int x=0; x<row; x++)
      {
       for(int y=0; y<col; y++)
       {
        System.out.print("*");
       }
       System.out.println();
      }
     }
     public static void printHr()
     {
      System.out.println("------------------------------");
     }
     /*
     定義一個打印99乘法表功能的函數。
     */
     public static void print99()
     {
      for(int x=1; x<=9; x++)
      {
       for(int y=1; y<=x; y++)
       {
        System.out.print(y+"*"+x+"="+y*x+"t");
       }
       System.out.println();
      }
     }
    }


    三、函數的重載(overload)
    重載的概念:
    在同一個類中,允許存在一個以上的同名函數,只要它們的參數個數或者參數類型不同即可。
    重載的特點:
    與返回值類型無關,只看參數列表。
    重載的好處:
    方便於閱讀,優化了程序設計。
    重載示例:
    返回兩個整數的和
    int add(int x,int y){return x+y;}
    返回三個整數的和
    int add(int x,int y, int z){return x+y+z;}
    返回兩個小數的和
    double add(double x,double y){return x+y;}
    什麼時候用重載?
    當定義的功能相同,但參與運算的未知內容不同。
    那麼,這時就定義一個函數名稱以表示起功能,方便閱讀,而通過參數列表的不同來區分多個同名函數。
    重載范例:

    復制代碼 代碼如下:
    class FunctionOverload
    {
     public static void main(String[] args)
     {
      add(4,5);
      add(4,5,6);
      print99();
     }
     public static void print99(int num)
     {
      for(int x=1; x<=num; x++)
      {
       for(int y=1; y<=x; y++)
       {
        System.out.print(y+"*"+x+"="+y*x+"t");
       }
       System.out.println();
      }
     }
     //打印99乘法表
     public static void print99()
     {
      print99(9);
     }
     //定義一個加法運算,獲取兩個整數的和。
     public static int add(int x,int y)
     {
      return x+y;
     }
     //定義一個加法,獲取三個整數的和。
     public static int add(int x,int y,int z)
     {
      return add(x,y)+z;
     }
    }


    練習:區分是否是重載

    復制代碼 代碼如下:
    void show(int a,char b,double c){}
    下面的a,b,c,d,e,f與上述一句的區別:
    a.
    void show(int x,char y,double z){}//沒有,因為和原函數一樣。
    b.
    int show(int a,double c,char b){}//重載,因為參數類型不同。注意:重載和返回值類型沒關系。
    c.
    void show(int a,double c,char b){}//重載,因為參數類型不同。注意:重載和返回值類型沒關系。
    d.
    boolean show(int c,char b){}//重載了,因為參數個數不同。
    e.
    void show(double c){}//重載了,因為參數個數不同。
    f.
    double show(int x,char y,double z){}//沒有,這個函數不可以和給定函數同時存在與一個類中。


    如何區分重載:當函數同名時,只看參數列表。和返回值類型沒關系。

    1. 上一頁:
    2. 下一頁:
    Copyright © 程式師世界 All Rights Reserved