方法的定義及呼叫
- 方法是語句的集合,它們在一起執行一個功能,類似於函式
- 設計方法時儲存方法的原子性,一個方法只完成一個功能
- 方法命名規則:首字母小寫+駝峰
- 方法包含於類或物件中
- 方法在程式中被建立,在其他地方被引用
- Java都是值傳遞
修飾符 返回值型別 方法名(引數型別 引數名){
...方法體
return 返回值;
}
//修飾符可選
//return 0; 終止方法
//main方法
public static void main(String[] args) {
int sum = add(1, 2);
System.out.println(sum);
test();
System.out.println(add(1, 2, 3));
}
//加法
//修飾符+static(使之成為類方法,以在主函式里呼叫) 返回值型別 方法名 (形參)
public static int add(int a,int b){
return a+b;
}
//過載
public static int add(int a,int b,int c){
return a+b+c;
}
public static void test(){
for (int i = 1; i < 1000; i++) {
if(i%5==0){
System.out.print(i + "\t");//跳脫字元\t
}
if(i%(5*3)==0){//當i能被三個5整除的時候,即第三個數被輸出,需換行
System.out.println();//空串代表換行
//System.out.print("\n");
}
}
}
方法過載
過載就是在一個類中,有相同的函式名稱,但形式不同的函式
規則:
- 方法名稱必須相同
- 引數列表必須不同(個數或型別或順序)
- 返回型別可以相同可以不同
System.out.println(max(2, 3));//自動呼叫引數為int型別的max
System.out.println(max(2.1, 3.2));//自動呼叫引數為double型別的max
}
//比大小
public static int max(int a,int b ){
return a>b? a:b;
}
//方法過載 函式名一樣 引數不同 ,呼叫時用什麼樣的引數就用什麼樣的方法
public static double max(double a,double b ){
return a>b? a:b;
}
命令列傳參
- 傳遞命令列引數給main()函式實現
可變引數
不定項引數
- 在方法宣告中,在指定引數型別後加一個省略號(...)
- 一個方法只能指定一個可變引數,它必須是方法的最後一個引數。
public class Demo04 {
public static void main(String[] args) {
//不用static宣告類方法 用物件呼叫方法
Demo04 demo04 = new Demo04();//建立Demo04這個類的物件demo04
//呼叫可變引數的方法
demo04.test(1,2,3,4,5);
demo04.test(new int[]{1,2,3});//用陣列丟進去也可以
}
//可變長引數 本質是陣列
public void test(int ... i){
System.out.println(i[0]);
System.out.println(i[1]);
System.out.println(i[2]);
System.out.println(i[3]);
System.out.println(i[4]);
}
}
遞迴
遞迴就是A方法呼叫A方法,自己呼叫自己
遞迴結構包括兩個部分:
- 遞迴頭:什麼時候不呼叫自身方法。若沒有頭,將陷入死迴圈
- 遞迴體:什麼時候需要呼叫自身方法。
java使用是棧機制,對於一些巢狀層次比較深的演算法,遞迴就會帶來大量函式呼叫,產生很多格外時間開銷,甚至崩潰。(能不用遞迴就不用遞迴)
//階乘
public static int fun(int n){
if(n==1){
return 1;
}else {
return n*fun(n-1);
}
}