0019 Java學習筆記-面向對象-方法

来源:http://www.cnblogs.com/sonng/archive/2016/11/16/6068553.html
-Advertisement-
Play Games

方法屬於誰 方法要麼屬於類,要麼屬於對象 static修飾的方法屬於類 沒有static修飾的方法屬於對象 方法只能定義在類裡面,不能獨立定義 不能獨立的執行方法,要麼通過類調用,要麼通過方法調用 一個類里,一個方法調用另一個方法,看似沒有調用者,實際上對於非static方法使用this調用,sta ...


方法屬於誰

  • 方法要麼屬於類,要麼屬於對象
  • static修飾的方法屬於類
  • 沒有static修飾的方法屬於對象
  • 方法只能定義在類裡面,不能獨立定義
  • 不能獨立的執行方法,要麼通過類調用,要麼通過方法調用
  • 一個類里,一個方法調用另一個方法,看似沒有調用者,實際上對於非static方法使用this調用,static方法使用類名調用
  • 註意:static方法也可以通過對象調用,這符合語法,但不推薦

方法的參數傳遞

  • Java里,參數的傳遞方式只有一種:值傳遞,就是將實際參數的副本傳給方法,而參數本身不受影響
  • 示例:對於基本類型的參數
public class SwapTest {  
    public static void main(String[] args) {  
      int a=3;
      int b=7;
      System.out.println("主方法裡面,用swap(a,b)交換前:a="+a+"  b="+b);
      swap(a,b);
      System.out.println("主方法裡面,用swap(a,b)交換後:a="+a+"  b="+b);
    }
    public static void swap(int a,int b){
        System.out.println("swap(a,b)方法內部,交換前:a="+a+"  b="+b);
        int temp;
        temp=a;
        a=b;
        b=temp;
        System.out.println("swap(a,b)方法內部,交換後:a="+a+"  b="+b);
    }
   
}
  • 上面代碼中,用swap()方法並沒能對main方法的a和b實現交換,因為在調用swap方法時,棧記憶體中又開了個swap棧區,裡面有兩個變數a和b,這個ab跟main方法的ab毫無關係,接下來傳遞參數的值,也就是將main的3傳給swap的a變數,將7傳給b變數,然後swap方法內部將二者進行了交換,但這絲毫不影響main方法里的ab。這裡的swap就像人睡覺一樣,你在夢裡中了500萬,但這絲毫改變不了你的現實。
  • 再看下麵的代碼,引用類型的參數:
public class T1 {  
    public static void main(String[] args) {  
      DataWrap dw=new DataWrap();
      dw.a=3;
      dw.b=7;
      System.out.println("main方法里,交換前,dw.a="+dw.a+"  dw.b="+dw.b);
      swap(dw);
      System.out.println("main方法里,交換後,dw.a="+dw.a+"  dw.b="+dw.b);
    }
    public static void swap(DataWrap dw){
        System.out.println("swap方法里,交換前,dw.a="+dw.a+"  dw.b="+dw.b);
        int temp;
        temp=dw.a;
        dw.a=dw.b;
        dw.b=temp;
        System.out.println("swap方法里,交換後,dw.a="+dw.a+"  dw.b="+dw.b);
    }
}  
class DataWrap{
    int a;
    int b;
}
  • 對於引用類型的參數而言,依然是採用的值傳遞方式。但這裡容易存在一個假象:調用swap()方法時,傳進去的是dw這個對象本身,並沒有複製一個dw。實際上傳進去的是dw這個對象的引用的複製,而不是複製了一個dw對象,也就是說調用swap()方法後,記憶體中有兩個引用指向dw對象,一個main方法的dw變數,另一個是swap方法的dw變數。

形參個數可變的方法

  • 如果要傳入某類型的參數個數不能確定,那可以用下麵這種方式
    methodName(int a,float b,String...strings);
  • 規則:
    • 個數可變的形參只能放在參數列表的最後
    • 一個方法只能有一個個數可變的形參
    • 調用這種方法時,可以傳入一個對應類型的數組
  • 參數數組
    • 個數可變的形參實際上就是個數組,下麵的定義與上面的相同
      methodName(int a,float b,String[] strings);

方法的重載

  • 方法名+形參列表構成了方法簽名
  • Java里,即使方法名相同,只要形參列表不想同,就是不同的方法
  • 同一個類中,方法名相同,形參列表不同,這就叫做方法的重載,overload
  • 在調用方法的時候,JVM會根據方法名和傳入的參數的類型自動匹配對應的方法
  • 重載方法中包含個數可變的形參,看示例代碼:
public class Test {  
    public static void main(String[] args) {  
      test("A"); //輸出:有一個String參數
      test("B","C"); //輸出:有兩個String參數
      test("D","E","F"); //輸出:有三個String參數
      test("G","H","I","J","K"); //輸出:有很多個String參數
      String[] str={"A"}; 
      test(str); //輸出:有很多個String參數
    }
    public static void test(String str){
        System.out.println("有一個String參數");
    }
    public static void test(String str1,String str2){
        System.out.println("有兩個String參數");
    }
    public static void test(String str1,String str2,String str3){
        System.out.println("有三個String參數");
    }
    public static void test(String...strs){
        System.out.println("有很多個String參數");
    }
} 
  • 從上面的代碼可以看出,總是先匹配精確的個數,匹配不到再匹配個數可變的;
  • 如果傳入的是數組,直接匹配個數可變的
  • 一般不推薦用個數可變的形參,意義不大,可讀性差

遞歸方法

  • 簡單的說,遞歸方法就是在方法裡面調用自身,然後可能產生迴圈調用,最後在某種條件下退出
  • 使用原則:
    • 向已知的方向遞歸
    • 要設置某種條件能讓遞歸調用退出來,
  • 看下麵的示例代碼
public class T1 {  
    public static void main(String[] args) {  
      System.out.println("0~-50的和= "+sum(-50));
    }
    public static int sum(int num){
        if (num==0){
            return 0;
        }else if(num>0){
            return num+sum(num-1);
        }else{
            return num+sum(num+1);
        }
    }
}

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1.新的未跟蹤文件 新創建的README文件沒有進行任何跟蹤 $ git status On branch master Untracked files: (use "git add <file>..." to include in what will be committed) README no ...
  • Python地鐵的到站流程及原理(個人理解) 今天坐地鐵看著站牌就莫名的想如果用Python寫其工作原理 是不是很簡單就小試牛刀了下大佬們勿噴純屬小弟個人理解 首先來看看地鐵上顯示的站牌如下: 就想這首先站點固定的名稱固定的站點名稱長度可知道,這不是符合列表嘛[第一站,第二站,。。。,最後一站] 把 ...
  • 英文文檔: staticmethod(function) Return a static method for function. A static method does not receive an implicit first argument. The @staticmethod form ...
  • 英文文檔: sorted(iterable[, key][, reverse]) Return a new sorted list from the items in iterable. Has two optional arguments which must be specified as ke ...
  • 變數分為哪些 成員變數:類裡面,方法外面定義的變數 + 實例變數:沒有用static修飾的變數,屬於對象;存在期:創建實例~銷毀實例;作用域:與該實例的生存範圍相同 + 類變數:用static修飾的變數,屬於類;存在期:類的準備階段~銷毀該類;作用域:與類的生存範圍相同 局部變數: + 形參:方法簽 ...
  • ...
  • elasticsearch的config文件夾裡面有兩個配置文件:elasticsearch.yml和logging.yml,第一個是es的基本配置文件,第二個是日誌配置文件,es也是使用log4j來記錄日誌的,所以logging.yml里的設置按普通log4j配置文件來設置就行了。下麵主要講解下e ...
  • 個人理解: spring Aop 是什麼:面向切麵編程,類似於自定義攔截操作,支持攔截之前操作@Before,攔截之後操作@After,攔截環繞操作@Around。 什麼情況下使用spring Aop:舉例如下 code案例: applicationContext.xml 配置文件 maven po ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...