一、方法的調用以及方法參數傳遞
1、方法的定義:
訪問修飾符 返回值類型 方法名 ([參數列表]){
方法體
}
如果方法體中需要一些未知的數據作為執行條件,那么這些數據可以作為參數。
如果方法需要返回數據,在定義有返回值的方法時需要明確返回值類型
方法調用的兩種方式:
1、對象名.方法名(參數)
2、直接寫方法名調用,但必須是static修飾的
//獲取這個字符串的第一個字符
public static char method1(String str){
return str.charAt(0);//獲取字符串的第一個字符
}
//方式一:調用方法
對象名.method1();
//方式二:調用靜態方法(static修飾的)
String s="abc";
char c=method1(s)//s將賦值給方法的形參str,那么方法執行時str有值
//c就是方法調用后的返回值
1、方法的參數是基本數據類型,它傳遞的是值
//計算一個數的平方
public static int pow(int a){
a=a+2;//6
return a*a;//6*6=36
}
public static void main(String[] args){
int num=4;
int sum=pow(num);//num是實參 num賦值給a
System,out,println(num);//4
System.out.println(sum);//36
}
2、方法的參數是引用數據類型,它傳遞的是地址(String類型除外)
//參數 是數組類型
public static int pow(int[] arr){
arr[0]=arr[0]+2;//根據地址 改變數組的第一個元素值arr[0]=4;
return arr[0]*arr[0];//4*4
}
調用
//調用另一個pow
int[] array={2,3};
int sum2=pow(array);//array中存放數組的地址,將地址賦值給arr 形參
System.out.println(array[0]);//4
System.out.println(sum2);//16
方法的重載:
在一個類中,存在相同方法名的兩個及以上的方法,且他們的參數列表不同(參數類型不同,參數個數不同,參數順序不同),不考慮參數名,不考慮返回值類型
一個類中不能存在完全相同的方法,他們是重復的方法JVM編譯不通過
例如:
public int add(int a,int b){
return a+b;
}
public int add(long a,long b){
return (int)(a+b);
}
//與前兩個 不重載
public void add(int c,int d){
}
//能與 方法1,2構成重載
public void add(int a){
}
//能與 方法1,2構成重載
public void add(int a,long b){
}
//能與 方法1,2構成重載
public void add(long a,int b){
}
把握;方法名是否相同,同時參數列表是否相同(參數個數不同 或者參數類型不同或者參數順序不同)
在一個方法中可以調用其它的方法,它們的執行流程
/**
* 程序入口
* @param args
*/
public static void main(String[] args) {
System.out.println("這里是main方法的開始");
method1();
System.out.println("這是main方法的結束");
}
// 在一個方法中可以調用另一個方法, 它們的執行順序是這樣的
public static void method1(){
System.out.println("這是method1 的開始語句塊 ");
// 調用method2
method2();
System.out.println("這是method1的 結束語句塊");
}
public static void method2(){
System.out.println("這是method2 的開始語句塊 ");
// 調用method3
method3();
System.out.println("這是method2 的結束語句塊");
}
public static void method3(){
System.out.println("這是method3的執行語句塊");
}
二、方法的遞歸調用
1、定義
在一個方法中,運用方法自身調用,這樣的調用稱為方法的遞歸調用,為了避免出現方法調用時出現死循環,遞歸調用中必須定義方法結束調用的條件。
方法遞歸調用執行流程
public static void m3(int i){
if(i==5){
return ;
}
System.out.println("這是m3方法開始i :"+ i);
i++;
m3(i);
System.out.println("m3方法的結束 i:"+ i );
}
public static void main(String[] args) {
m3(0); //
}
練習1 : 使用遞歸計算一個數的階乘
n =5 = 5! = 5*4的階乘
f(n) = n* f(n-1) = (n-1)*f(n-1-1)
public static int f(int n ){
if(n==1){
return 1;
}
int s = n*f(n-1);
System.out.println("結束 --"+s);
return s;
}
// n =5 n=4 n=3 n=2 n=1 return 1
// s = 5*f(4) s=4* f(3) s= 3* f(2) s=2*f(1)
// s=5*24 s=4* 6 s=3* 2= 6 s=2
// s = 120