何謂方法
比如之前用到的 System.out.println();
System爲一個類;out爲這個類的一個輸出對象;println()爲這個對象的方法
調用System類中out輸出對象的println方法
Java方法是語句的集合,他們在一起執行一個功能
方法是解決一類問題的步驟的有序組合
方法包含在類或對象中
方法在程序中被創建,在其他地方被引用
方法的本意是功能塊,就是實現某個功能的語句塊的集合。我們設計方法的時候,最好保持方法的原子性,即一個方法只完成一個功能,以便於後期的擴展。
命名規則:首字母小寫,駝峯命名
public static void main(String[] args) {
int sum = add(1, 2);
System.out.println(sum);
}
public static int add(int a, int b){
return a+b;
}
方法的定義
Java的方法類似於函數,用來完成特定功能的代碼片段。
方法包含一個方法頭和方法體
修飾符:修飾符,可選,告訴編譯器如何調用方法。定義了該方法的訪問類型。
返回值類型:方法可能會返回值,returnValueType是方法返回值的數據類型。有些方法執行所需操作,但沒有返回值,這時返回值類型也就是returnValueType是關鍵字void
方法名:是方法的實際名稱。方法名和參數表共同構成方法簽名。
參數類型:參數像是一個佔位符。當方法被調用時,傳遞值給參數。這個值被稱爲實參或變量。參數列表是指方法的參數、順序和參數的個數。方法是可選的,方法可以不包含任何參數。
形式參數:在方法被調用時用於接收外界輸入的數據。
實參:調用方法時實際傳給方法的數據。
方法體:方法體包含具體的語句,定義該方法的功能。
修飾符 返回值類型 方法名(參數類型 參數名){
方法體
...
return 返回值;
}
方法的調用
調用方法:對象名.方法名(實參列表)
Java支持兩種調用方法的方式,根據方法是否有返回值來選擇。
return不僅可以返回值,同樣可以結束這個方法。例:return 0;結束當前方法。
當方法返回一個值的時候,方法調用通常被當作一個值賦值給一個變量。
int larger = max(30, 40);
當方法返回值爲void時,方法調用一定是一條語句
System.out.println("Hello, Zh1z3ven!");
方法重載
重載就是在一個類中,有相同的函數名稱,但形參不同的函數。
方法重載的原則:
- 方法名稱必須相同
- 參數列表必須不同(個數不同、或類型不同、參數排列順序不同等)
- 方法的返回類型可以相同也可以不相同
- 僅僅返回類型不同不足以成爲方法的重載
實現原理:方法名稱相同時,編譯器會根據調用方法的參數個數、參數類型等去逐個匹配,以選擇對應的方法,如果匹配失敗,則編譯器報錯。
public static void main(String[] args) {
double max = max(10.0, 20.0);
int max2 = max(10, 20);
System.out.println(max);
System.out.println(max2);
}
public static int max(double num1, double num2){
double result = 0;
if (num1==num2){
System.out.println("num1==num2");
return 0; //終止方法
}
if (num1>num2){
result = num1;
}else {
result = num2;
}
return result;
}
public static int max(int num1, int num2){
int result = 0;
if (num1==num2){
System.out.println("num1==num2");
return 0; //終止方法
}
if (num1>num2){
result = num1;
}else {
result = num2;
}
return result;
}
命令行傳參
main函數命令行傳參
注意IDEA裏不能運行,需要在項目src目錄下運行編譯好的class文件
public static void main(String[] args) {
// 數組長度
for (int i=0;i < args.length; i++){
System.out.println("args[" + i + "]: " + args[i]);
}
}
可變參數
JDK1.5開始,Java支持傳遞同類型的可變參數給一個方法。
在方法聲明中,在制定參數類型後加一個省略號(...)
一個方法中只能制定一個可變參數,他必須是方法的最後一個參數。任何普通參數必須在他之前聲明。
就是當你定義一個方法時,你並不確定要傳遞多少個某一數據類型的參數給該方法,就可以用可變參數,相當於讓傳遞的參數的個數爲一個不確定的值。
public class Demo04 {
public static void main(String[] args) {
Demo04 demo04 = new Demo04();
demo04.test(1,2,3,4,5,6);
}
// 注意相同類型參數定義,可變參數一定要在最後面定義
public void test(int x, int... i){
for (int j=0;j<i.length;j++){
System.out.println(i[j]);
}
}
}
遞歸
方法A調用自身。
遞歸結構包括兩個部分
遞歸頭:什麼時候不調用自身方法。如果沒有頭,將陷入死循環
遞歸體:什麼時候需要調用自身方法。
因爲Java是棧機制,先進後出,當遞歸次數很大時會很佔內存,所以能不用遞歸就不用遞歸。
public static void main(String[] args) {
System.out.println(f(5));
}
public static int f(int n){
if (n==1){
return 1;
}else {
return n*f(n-1);
}
}