方法的最大好處是可以進行重復調用,但是至於說那些操作要形成方法,這些都要根據你的實際項目經驗而自我總結的。 ##方法的基本定義 限制條件:在主類中定義,並且由主方法直接調用的方法形式。 方法就是一段可以被重復調用的方法塊。在Java中要想進行方法的定義,則可以使用如下的語法完成。
public static 返回類型 方法名稱([參數類型 變量, ......]) {
方法體代碼;
[return [返回值];]
}
1234
在定義方法的時候對於方法的返回值有以下的兩類:
-
void:沒有返回值;
-
數據類型(基本類型,引用類型)。
示范: 定義一個沒有返回值,沒有參數的方法
public class TestDemo {
public static void main(String[] args) {
print(); //主方法里面直接調用方法
}
public static void print() {
System.out.println("Hello World!"); //定義方法
}
}
12345678
示例: 定義一個有參數無返回值的方法
public class TestDemo {
public static void main(String[] args) {
print("Hello"); //主方法里面直接調用方法
print(" world");
print("!");
}
public static void print(String msg) { //定義方法
System.out.print(msg);
}
}
12345678910
示例: 有參數有返回值的方法
public class TestDemo {
public static void main(String[] args) {
int result = add(10, 20);
System.out.println(result);
//既然方法有返回值,那么這些返回值也可以直接輸出
System.out.println(add(100, 200));
}
public static int add(int x, int y) { //定義方法
return x + y;
}
}
1234567891011
但是在定義方法的時候有一點特別要注意,如果某一個方法上使用了void定義,那么該方法可以直接用return來結束調用。一般而言,這種return的處理往往需要結合if判斷來實現。
public class TestDemo {
public static void main(String[] args) {
print(10);
print(20);
}
public static void print(int x) { //定義方法
if(x == 20) //表示的是方法結束的判斷
return; //此語句之后的代碼不再執行
System.out.println("x = " + x);
}
}
1234567891011
對於第一次接觸方法的人來講,先將語法記住,至於怎么用,需要時間來消化。 ##方法重載(重點) 方法重載指的是:方法名稱相同,參數的類型和個數不同。
示例: 實現方法重載
public class TestDemo {
public static void main(String[] args) {
//此時將根據參數的類型和個數的不同執行不同的方法體
System.out.println(add(10, 20));
System.out.println(add(30, 40, 50));
System.out.println(add(1.1, 2.1));
}
public static int add(int x, int y) {
return x + y;
}
//此時方法名稱相同,參數的個數不同
public static int add(int x, int y, int z) {
return x + y + z;
}
public static double add(double x, double y) {
return x + y;
}
}
123456789101112131415161718
在進行方法重載的時候有一個重要的原則:要求方法的返回值類型一定要相同。
示例: 觀察如下程序
public class TestDemo {
public static void main(String[] args) {
//此時將根據參數的類型和個數的不同執行不同的方法體
System.out.println("hello"); //輸出字符串
System.out.println(1); //輸出整形
System.out.println(1.1); //輸出浮點型
System.out.println('A'); //輸出字符
System.out.println(true); //輸出布爾
}
}
12345678910
證明:System.out.println()是一個被重載的方法
方法遞歸調用
方法的遞歸調用指的是一個方法自己調用自己的形式。一般如果要進行方法的遞歸操作往往都具備有以下的特點:
-
方法必須有一個遞歸的結束條件;
-
方法在每次遞歸處理的時候一定要做出一些變更;
示例: 實現1 ~ 100的累加操作
public class TestDemo {
public static void main(String[] args) {
System.out.println(sum(100));
}
public static int sum(int num) {
if(num == 1)
return 1;
return num + sum(--num);
}
}
12345678910
-
[main()調用] 第1次執行sum()方法 return 100 + sum(99);
-
[sum()遞歸] 第2次執行sum()方法 return 99 + sum(98);
-
[sum()遞歸] 第3次執行sum()方法 return 98 + sum(97);
-
…
-
[sum()遞歸] 倒數第2次執行sum()方法 return 2 + sum(1);
-
[sum()遞歸] 倒數第1次執行sum()方法 return 1;
示例: 實現60!,這個結果太大,應該使用double。
public class TestDemo {
public static void main(String[] args) {
System.out.println(mul(60));
}
public static double mul(int num) {
if(num == 1)
return 1;
return num * mul(--num);
}
}
12345678910
通過代碼可以發現使用while循環的操作其實大部分都可以更換為遞歸,之所以使用遞歸主要是一個方法可以執行的操作很多,而且結構要好。
階乘使用遞歸方法
package methods;
public class digui {
public static void main(String[] args) {
// TODO Auto-generated method stub
//5! = 5*4*3*2*1
//4! = 4*3*2*1
//3! = 3*2*1
//2! = 2*1
//1! = 1
System.out.println(f(5));
}
public static int f(int n){
if(n==1){
return 1;
}else{
return n*f(n-1);
}
}
}
注意點:
遞歸好處:代碼更簡潔清晰,可讀性更好!
但是
遞歸壞處:由於遞歸需要系統堆棧,所以空間消耗要比非遞歸代碼要大很多。而且,如果遞歸深度太大,可能系統撐不住。 個人覺得:非必要時不遞歸 遞歸方法只能處理一些數據量較小的問題!!!
