Java方法基礎


Java方法基礎

  1. 何謂方法?

  2. 方法的定義及使用

  3. 方法重載

  4. 命令行傳參

  5. 可變參數

  6. 遞歸

  7. 作業


1.何謂方法?

  • Java方法是語句的集合,它們在一起執行一個功能,比如 System.out.println() 專門打印輸出的

    • 方法是解決一類問題的步驟的有序組合

    • 方法包含於類或對象中

    • 方法在程序中被創建,在其他地方被引用

  • 設計方法的原則:方法的本質計算實現某個功能的語句的集合。設計的時候保持方法的原子性。

    即一個方法只完成一個功能,有利於后期的擴展

  • 注意方法的命名規則

2.方法的定義及調用

  • 方法的定義

    • 修飾符:告訴編譯器任何調用該方法,定義了該方法的訪問類型。可選

    • 返回值類型:returnValueType 是方法的返回值類型。沒有返回值的方法 returnValueType 關鍵字是void

    • 方法名:是方法的名稱,用於被調用

    • 參數類型:調用方法時,傳遞的時實參;定義方法時,設置形式參數作占位符。可選

    • 方法體:定義該方法的功能

      修飾符 返回值類型 方法名(參數類型 參數名){
         方法體;
        ...;
         return 返回值;
      }
      //例子
      public static double sumCdt(double a,double b){
         return a*a+b*b;
      }
  • 方法調用

    • 調用方法:對象名.方法名(實參列表)

    • Java支持兩種調用方法的方式,根據方法是否有返回值來選擇

    • 方法有返回值時,調用方法

      // 定義於返回值同類型的變量 result 用於接收返回值,returnValueType result = 方法名(實參);
      // 例子
      int num = add(30,40);
      String str_1 = printSort("hello,world");
      int[] array_1 = sort(array);
    • 沒有返回值,調用方法

      //沒有返回值,不需要定義變量去接受,直接執行方法即可, 方法名(實參);
      // 例子
      System.out.println("hello,world!");
  • 值傳遞 和 引用傳遞

    • 值傳遞:Java 是 值傳遞

    • 引用傳遞

3.方法重載

  • 定義:方法重載就是在一個類中,有相同的方法名稱,但形參不同的方法

  • 方法重載的規則

    • 方法名必須相同,且形參一定不同(個數不同,或類型不同,或參數排列順序不同等

    • 方法的返回類型可以相同也可以不同

    • 僅僅返回類型不同不是方法的重載

  • 方法重載實現的原理

    方法名稱相同時,編譯器會根據調用方法的實參個數,實參類型等去逐個匹配,來選擇使用對應的方法,如果匹配失敗就會報錯。

4.命令行傳參

有時候我們會希望運行一個程序的時候再傳遞給它信息。這要靠傳遞命令行參數給main()方法實現

比如 在 cmd 中輸入 java -version ,就會輸出java的版本信息

我們自己寫一個類似的例子,這要靠傳遞命令行參數給main()方法實現

1. 寫一個實現在 cmd 中簡單打印一下輸入參數的內容的功能

  1. 在cmd中進入文件對應路徑后,先編譯好 java 文件,在執行文件的時候報錯。

    為什么?因為在該路徑下找不到主類

  1. 進入主類所在路徑后,在執行文件,此時需要從主類依次向下調用

  1. 接着輸入參數,執行函數,就實現了 在cmd 命令行中傳參的簡單打印功能。

5.可變參數

  • JDK 1.5 開始,Java支持傳遞同類型的可變參數的方法

  • 在方法聲明中,在指定形式參數后面加一個省略號(...)

  • 一個方法智能指定一個可變參數,並且它必須是方法的最后一個參數。任何普通參數必須在它的前面聲明。

    //例子
    package MethodArray.MtehodStudy;

    public class MethodTest_3 {
       public static void main(String[] args) {
           // 可變參數輸入,相當於數組
           printMax(123,32,4,3,41,45.2);
      }

       public static void printMax(double... numbers){
           // 等價於數組的使用方法
           if (numbers.length==0){
               System.out.println("你沒有任何輸入");
          }
           double result = numbers[0];
           // 取最大值
           for (double number : numbers) {
               if (number > result) {
                   result = number;
              }
          }
           System.out.println("這組數據的最大值是:"+result);
      }

    }

6.遞歸

  • 定義:A方法調用B方法,叫引用,A方法調用A方法,叫遞歸

  • 意義:遞歸可以用簡單的程序來解決一下復雜的問題。它通常把一個大型問題層層轉化為小問題來求解。遞歸的能力在於用少量的語句定義對象的無限集合。

  • 遞歸結構包含兩個部分:

    • 遞歸頭:什么時候將不調用自身。如果沒有遞歸頭,程序將陷入死循環。

    • 遞歸體:什么時候需要調用自身方法。

  • 問題:利用遞歸求10的階乘

    package MethodArray.MtehodStudy;

    public class MethodTest_4 {
       public static void main(String[] args) {
           int result = fun(10);
           System.out.println(result);
      }

       public static int fun(int n){
           if(n==1){
               return n;
          }else {
               return n*fun(n-1);
          }
      }
    }
  • 注意:由於Java使用的是棧機制的(相當於一個瓶子,最底層是main方法,沒調用一個方法就在上面壓一層,因此不能無限壓)

    • 調用遞歸會帶來大量的函數調用,運用遞歸需注意基數問題,調用過多會因為電腦內存不夠而導致程序崩潰。

    • 調用次數少才使用遞歸,重要的是我們要學習遞歸的思想,遞歸是解決復雜問題的一種思路

7.作業

  • 寫一個計算器,要求實現加減乘除功能,並且能循環接收新的數據,通過用戶交互實現。

    package MethodArray.MtehodStudy;

    import java.util.Scanner;
    // 該計算器可以一直進行計算,通過輸入 非數字 來結束輸入並打印最終結果。
    // 如果運算符那里的輸入不合要求,還可以重新輸入運算符,進行運算
    public class CalcProject_2 {
       public static void main(String[] args) {
           Scanner scan = new Scanner(System.in);
           double result = 0;  // 用於存儲最后的結果
           int sure = 0;      // 判斷語句是否進入switch 語句選擇
           double temp = 0;    // 用於存儲每一輪臨時值
           double num1;
           System.out.println("請輸入數字:");
           if(scan.hasNextDouble()){
               num1 = scan.nextDouble();
               System.out.println("請輸入+ - * /");
               while (scan.hasNext()){
                   String str = scan.next();
                   System.out.println("請輸入數字:");
                   if(scan.hasNextDouble()){
                       double num2 = scan.nextDouble();
                       switch (str){
                           case "+":
                               temp = add(num1,num2);
                               sure = 1;
                               num1 = temp;
                               break;
                           case "-":
                               temp = sub(num1,num2);
                               sure = 1;
                               num1 = temp;
                               break;
                           case "*":
                               temp = cdt(num1,num2);
                               sure = 1;
                               num1 = temp;
                               break;
                           case "/":
                               temp = div(num1,num2);
                               sure = 1;
                               num1 = temp;
                               break;
                           default:
                               System.out.println("您輸入的運算符不合法");
                               break;
                      }
                       if(sure==0){
                           System.out.println("此時的結果為:"+num1);
                      }else {
                           System.out.println("此時的結果為:"+temp);
                      }
                       System.out.println("請輸入+ - * /");
                  }else {
                       if(sure==0){
                           result = num1;
                      }else {
                           result = temp;
                      }
                       break;
                  }
              }
               System.out.println("最終的結果為:"+result);
               scan.close();
          }else System.out.println("輸入不合法");

      }

       public static double add(double num1,double num2){
           return num1+num2;
      }

       public static double sub(double num1,double num2){
           return num1-num2;
      }

       public static double cdt(double num1,double num2){
           return num1*num2;
      }

       public static double div(double num1,double num2){
           return num1/num2;
      }
    }

     

  •  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM