public class Test14
{
void method(int arg0, int arg1){}
//這種換參數名字的方式並不算重載
// void method(int arg1, int arg0){}
//參數列表類型的排列組合不一樣,可以形成重載
void method(int arg0, byte arg1){}
//參數類型位置調換也可以形成重載
void method(byte arg0, int arg1){}
//參數個數不一樣也可以形成重載
void method(int arg0, int arg1, int arg2){}
//返回值類型不同也不算重載,jvm會不知道應該使用
//哪個函數,但也不是無法避免
// char method(int arg0, int arg1){}
//如果對於相同參數列表的函數,有多種返回值,
//可以在函數內實現重載的情況,返回值爲Object
// Object method(int arg0, int arg1){}
/**
* 這裏我們可以想一下,如果我們不知道需要多少個參數
* 比如求任意個 數的和,難道還能定義無數個函數?因爲
* 我們並不知道用戶會什麼時候調用那些個組合的函數
*
* 在老版本的java裏,老程序員對於這種方式的處理,
* 都是採用數組爲參數來處理的。
*/
//像main函數吧
void method(int[] args)
{
//我們這裏的調用方式就將是這樣,但寫起來會很麻煩
method(new int[]{1,2});
method(new int[]{1,2,3,4,5});
}
//可變參數列表,該參數列表表示支持任意個數的參數
//這個新特性也是專門爲了解決上邊的問題而出現的,
//雖然實現是一樣的,但更簡便
void method$1(int... arg0)
{
//for example
method$1(1,2);
method$1(1,2,3,4,5);
//由於這種可變參數的實現,是以數組來實現的
//所以訪問方面,也是用數組的方式
arg0[0] = 1;
//所以由上邊的代碼我們也可以這樣調用
method$1(new int[]{1,2});
method$1(new int[]{1,2,3,4,5});
}
/**
* 函數的內聯
*
* 內聯在重構中是很關鍵也是很重要的一種方式,
* 簡單來說,就是把一段很長的代碼,不利於閱讀
* 的代碼分而治之,從而簡化閱讀以及維護
*/
//假設代碼我們這樣寫,第一段和第二段代碼都擠在一起
//對於閱讀的人來說很費勁,他不知道你的第二段功能是
//怎麼分割的,很不直觀,所以得理解整個函數的功能之後
//才能具體的區分出來,而有的代碼耦合性非常高,單獨
//分離出功能會很費勁
void A()
{
//case 1
//case 2
}
//如果代碼以這種方式來寫,並對內聯函數取個很形象的名字,
//不論是別人閱讀還是自己維護都會很方便,對於調試錯誤也
//有幫助
void B()
{
//case 1
case1();
//case 2
case2();
}
void case1(){}
void case2(){}
/**
* 內聯是一種很實用的技巧,但也不能過渡使用,如果一個函數
* 最後被分割成成百上千的內聯函數,最後只會變得更糟糕。
*
* 深度內聯是最可恥的,比如a內聯b和c,c又d和e,如此類推,
* 最後想找一個關鍵功能要累死
*/
}
複習筆記13 函數 重載 內聯
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.