Java零基礎_零基礎學Java必備的學習筆記(九)Java方法詳細解析

方法

一、什麼是方法,有什麼用?

(能夠先看一下一個程序若是沒有方法,會出現什麼問題?)java

方法(英語單詞:method)是能夠完成某個特定功能的而且能夠被重複利用的代碼片斷。算法

方法的出現,讓代碼具備了很強的複用性。編程

  • 在C語言中,方法被稱爲「函數」。markdown

  • 在java中不叫函數,叫作方法。數據結構

你定義了一個/抽取了一個方法出來,而這個方法確沒法完成某個功能,數據結構和算法

那麼你抽取的這個方法毫無心義。通常一個方法就是一個「功能單元」。ide

假設在之後的開發中,某個功能是能夠獨立抽取出來的,建議定義爲方法,這樣之後只要須要這個功能,那麼直接調用這個方法便可,而不須要重複編寫業務邏輯代碼。函數

二、方法最難實現的是:

根據業務怎麼進行方法的抽取。oop

方法的返回值類型定義爲 什麼?學習

方法的名字叫什麼?

方法的形式參數列表定義爲 什麼?

....

一個方法就是一個獨立的功能。

三、方法的定義

[修飾符列表] 返回值類型 方法名(形式參數列表){

方法體;

}
複製代碼

四、方法的每個細節學習

一、修飾符列表:可選項,目前先寫成:public static

二、怎麼理解返回值?返回值是一個方法執行結束以後的結果。

三、返回值類型均可以指定哪些類型?

四、返回值和「return語句」的關係。

五、方法名只要是合法的標識符就行,首字母小寫,後面每一個單詞首字母大寫。見名知意。

六、形式參數列表

七、方法體:方法體當中的代碼遵循自上而下的順序依次逐行執行。

八、方法怎麼調用?「類名.」何時能夠省略?

實際參數列表,簡稱實參。(調用方法時傳遞的實際數據。)

實參和形參的關係是一一對應。

五、JVM的內存結構中三塊比較重要的內存空間。

方法區:

存儲代碼片斷,存儲xxx.class字節碼文件,這個空間是最早有數據的,類加載器首先將代碼加載到這裏。

堆內存:

後面講(面向對象)

棧內存:

stack棧當中存儲什麼?

每一個方法執行時所須要的內存空間(局部變量)。

六、關於數據結構中的棧數據結構

原則:

  • 後進先出

  • 先進後出

棧數據結構相關的術語:

  • 棧幀:永遠指向棧頂部的元素(棧頂元素具備活躍權。)

  • 棧頂元素

  • 棧底元素

  • 壓棧,入棧,進棧,push

  • 彈棧,出棧,pop

昨天還聊了一些:什麼是數據結構?什麼是算法?

有一本書:數據結構與算法。

數據結構和算法的選擇很重要,選擇對了程序的執行效率大大提高。

能夠很好的優化程序。

七、分析程序運行過程當中的內存變化

方法只定義不調用是不會執行的。

方法調用時:壓棧 (在棧中給該方法分配空間)

方法執行結束時:彈棧(將該方法佔用的空間釋放,局部變量的內存也釋放。)

方法重載overload

一、什麼狀況下咱們考慮使用方法重載機制?

當功能類似的時候,建議將方法名定義爲一致的,

這樣代碼美觀,又方便編程。

注意:若是功能不類似,堅定要讓方法名不一致。

二、代碼知足什麼條件的時候構成了方法重載?

  • 條件1:在同一個類當中

  • 條件2:方法名相同

  • 條件3:形式參數列表不一樣(類型、個數、順序)

注意:

方法重載和返回值類型無關,和修飾符列表無關。

三、方法重載的優勢?

  • 代碼美觀

  • 方便代碼的編寫

方法遞歸

一、須要理解什麼是方法遞歸?

方法自身調用自身。

二、使用遞歸的時候,必須添加結束條件,沒有結束條件,會發生棧內存溢出錯誤。

StackOverflowError

緣由:一直壓棧,沒有彈棧,棧內存不夠用。

三、會畫出遞歸方法的內存結構圖。

遞歸的過程中能夠將圖畫出來。

四、可以使用循環代替遞歸的儘可能使用循環,循環的執行耗費內存少一些,遞歸耗費內存相對多一些,另外遞歸使用不當很容易內存溢出,JVM中止工做。

固然,只有極少數狀況下,只能用遞歸,其它代碼解決不了問題。

五、當遞歸有結束條件,而且結束條件合法的時候,就必定不會內存溢出嗎?

也不必定。可能遞歸的太深了。

六、分享了一些遞歸方面的經驗在實際的開發中遇到遞歸致使的棧內存溢出錯誤是怎麼辦?

第一步:先檢查結束條件是否正確。

第二步:若是正確,能夠調整JVM的棧內存大小。(java -X)

咱們要一味地將變量縮減嗎?代碼縮減嗎?這樣好嗎?

public class Test{

public static void main(String[] args){

/*

int i = 100;

System.out.println(i);

*/

 

System.out.println(100);

 

boolean flag = test();

if(flag){

...

}

 

// 縮減以後的

if(test()){

....

}

}

 

public static boolean test(){

return true;

}

}

複製代碼

太計較變量的數量會有什麼後果呢?(運行效率不會低)

後果1:代碼的可讀性差。

後果2:可讀性差也能夠會牽連到代碼的開發效率。

其實計算機內存不差這個。。。。。。

注意:在編碼過程當中,有一些變量名是必需要定義的。

由於在後面代碼中還須要訪問這個數據。重複的訪問這個數據。

最後

推薦給你們個比較詳細的Java零基礎教程,下面這個是我看過的以爲挺不錯的,值得觀看收藏。

分享給你們,點這裏

www.bilibili.com/video/BV1Rx…

看完若是對你有幫助,感謝點贊支持~

相關文章
相關標籤/搜索