天天看點

11 java中的方法

方法

方法是什麼,方法有什麼用
方法是就是一段普通的代碼片段,并且這段代碼可以完成某個特定的功能,而且可以被重複的調用/使用.
方法的作用是完成某個特殊功能并且可以重複使用的代碼塊,可以減少代碼的重複編寫提高程式設計效率


方法的定義
[修飾符清單] 傳回值類型 方法名(形式參數清單){
		方法體; 
	}
1修飾符裂表是可選項,可以寫也可以不寫

2傳回值類型可以是任何資料類型,如果沒有傳回值可以寫成void,

大多數情況下都有傳回值,傳回值是方法執行後的結果.傳回值以return 值;進行傳回
隻要執行了return那麼目前方法就終止了,如果沒有傳回值直接執行return或者讓方
法執行完效果是一樣的.

3方法名的書寫規則和規範以辨別符為準

4形式參數清單可以寫也可以不寫也可以是多個或者一個,如果有形式參數需要傳進來那麼就必須寫

5方法體中的語句以:結尾按從上而下依次執行,方法執行時需要資料則通過形式參數傳進來


方法的調用
1 main方法不需要程式員手動調用,其他反複需要手動調用

2調用方法是如果是靜态方法則是: 類名.方法名(形式參數);
 如果在同一個類中類名可以省略. 如果是執行個體方法則靜态方法不能直接調用需要new一個執行個體并且 執行個體.方法名(形式參數);
如果同一個類中的執行個體方法調用執行個體方法那麼可以直接調用,不需要執行個體.

3方法必須調用才能執行

4在同一個類中執行個體方法調用執行個體方法時可以不用對象.進行調用

5方法執行時其内部的語句是按從上到下順序執行的

方法調用時記憶體的變化
JVM三塊主要的記憶體:棧記憶體、堆記憶體、方法區記憶體。
方法區最先有資料:方法區中放代碼片段。存放class位元組碼。
堆記憶體:後面講。
棧記憶體:方法調用的時候,該方法需要的記憶體空間在棧中配置設定。
方法不調用是不會在棧中配置設定空間的。

方法隻有在調用的時候才會在棧中配置設定空間,并且調用時就是壓棧。
方法執行結束之後,該方法所需要的空間就會釋放,此時發生彈棧動作。

方法調用叫做:壓棧。配置設定空間
 方法結束叫做:彈棧。釋放空間
 棧的執行順序的後執行的方法先執行完成彈棧,是以main方法都是最後執行完畢的

棧中存儲什麼?方法運作過程中需要的記憶體,以及棧中會存儲方法的局部變量。
           

方法重載overload

1.1、什麼情況下我們考慮使用方法重載機制?
	當功能相似的時候,建議将方法名定義為一緻的,
	這樣代碼美觀,又友善程式設計。

	注意:如果功能不相似,堅決要讓方法名不一緻。

1.2、代碼滿足什麼條件的時候構成了方法重載?
	條件1:在同一個類當中
	條件2:方法名相同
	條件3:形式參數清單不同(類型、個數、順序)

	注意:
		方法重載和傳回值類型無關,和修飾符清單無關。

1.3、方法重載的優點?
	代碼美觀
	友善代碼的編寫
           

2、方法遞歸

2.1、需要了解什麼是方法遞歸?
	方法自身調用自身。

2.2、使用遞歸的時候,必須添加結束條件,沒有結束條件,會發生棧記憶體溢出錯誤。
	StackOverflowError
	原因:一直壓棧,沒有彈棧,棧記憶體不夠用。

2.3、會畫出遞歸方法的記憶體結構圖。
	遞歸的過程當中可以将圖畫出來。

2.4、能夠使用循環代替遞歸的盡量使用循環,循環的執行耗費記憶體少一些,
遞歸耗費記憶體相對多一些,另外遞歸使用不當很容易記憶體溢出,JVM停止工作。
當然,隻有極少數情況下,隻能用遞歸,其它代碼解決不了問題。

2.5、當遞歸有結束條件,并且結束條件合法的時候,就一定不會記憶體溢出嗎?
	也不一定。可能遞歸的太深了。

2.6、分享了一些遞歸方面的經驗
	在實際的開發中遇到遞歸導緻的棧記憶體溢出錯誤是怎麼辦?
		第一步:先檢查結束條件是否正确。
		第二步:如果正确,可以調整JVM的棧記憶體大小。(java -X)
           

3、我們要一味地将變量縮減嗎?代碼縮減嗎?這樣好嗎?

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:可讀性差也可以會牽連到代碼的開發效率。
	
	其實計算機記憶體不差這個。。。。。。

	注意:在編碼過程中,有一些變量名是必須要定義的。
	因為在後面代碼中還需要通路這個資料。重複的通路這個
	資料。