Java學習筆記(八)—— 方法
阿新 • • 發佈:2021-01-26
方法的定義和呼叫
- 對一個功能進行提取,提取出一段程式碼,這就是一個方法
- 方法和方法是並列的關係,注意不要在main方法中寫方法
方法的定義格式
修飾符 方法返回值型別 方法名(形參列表){
方法體;
return 方法返回值;
}
方法的定義與呼叫例項
import java.util.Scanner; public class Method_test1{ public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.print("請輸入第一個整數:"); int num1 = sc.nextInt(); System.out.print("請輸入第二個整數:"); int num2 = sc.nextInt(); study(num1,num2); // 也可以直接傳入實參,例如 study(10,25); } public static void study(int num1,int num2){ // 形參 int sum = 0; sum += num1; sum += num2; System.out.println("兩數的和為"+sum); } }
要點
- 如果方法有返回值的話:return + 返回值
- 方法不需要返回值的話:return可以省略不寫,並且方法的返回值型別為 void
- 一般使用不確定的因素當做方法的形參
方法的作用:提高程式碼的複用性,一個功能對應一個方法,要使用哪個功能就直接呼叫那個方法即可,減少重複程式碼
測試1
猜數字
// 猜數字:我心裡有一個數字,你來猜,看是否猜對 import java.util.Scanner; public class Method_Test2 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.print("猜猜我心裡的數(1-6):"); int guessNum = sc.nextInt(); guess(guessNum); } public static void guess(int guess){ int num = (int)(Math.random()*6)+1; System.out.println(guess==num?"猜對了":"猜錯了"); } }
擴充套件
兩個數是否交換成功
public class TestM{ public static void main(String[] args){ int a=10; int b=20; System.out.println("輸出交換前的兩個數:"+a+"---"+b); changeNum(a,b); System.out.println("輸出交換後的兩個數:"+a+"---"+b); } public static void changeNum(int num1,int num2){ int t; t=num1; num1=num2; num2=t; } } /* 結果為: 輸出交換前的兩個數:10---20 輸出交換後的兩個數:10---20 */
- 在棧中,先進後出,a先被定義,放在最底層
- 一個方法有一塊記憶體區域,在方法執行完後,這塊記憶體區域也會消失
當a和b這兩個實參的值給了num1和num2,之後的執行都是在changenNum方法的記憶體區域內交換值,所以num1和num2的值交換後沒有返回給a和b,記憶體區域消失後,num1和num2也消失了
棧 | 堆 | 方法區 |
---|---|---|
— | / | / |
b20 | / | / |
a10 | / | / |
方法的過載
在同一個類當中,方法名相同但形參列表不同
public class Method_Test3{
public static void main(String[] args){
// 10+20
int sum = add(10,20);
System.out.println(sum);
// 20+40+80
System.out.println(add(add(20,40),80));
// 30+60+90+120
System.out.println(add(add(add(30,60),90),120));
// 9.8+4.7
System.out.println(add(9.8,4.7));
}
// 兩個數相加
public static int add(int num1,int num2){
return num1+num2;
}
// 三個數相加
public static int add(int num1,int num2,int num3){
return num1+num2+num3;
}
// 四個數相加
public static int add(int num1,int num2,int num3,int num4) {
return num1 + num2 + num3 + num4;
}
// 兩個double型別的數相加
public static double add(double num1,double num2){
return num1+num2;
}
- 方法的過載只需方法名一致,形參列表不同
- 形參列表的不同為:
【1】型別不同【2】個數不同【3】順序不同 - 與方法的修飾符和返回值型別無關
- 注意int a和int b不構成過載
在方法過載中,型別級別也同樣適用
byte,short,char—>int—>long—>float—>double
public class Method_Extend1 {
public static void main(String[] args) {
add(5);
}
public static void add(long num1){
System.out.println(4);
}
public static void add(float num1){
System.out.println(3);
}
public static void add(double num1){
System.out.println(2);
}
public static void add(int num1){
System.out.println(1);
}
}