java方法
什么是方法
-
java方法是陳述句的集合,集合在一起執行一個功能- 方法是結局一類問題的步驟的有序組合
- 方法包含于類或者物件中
- 方法在程式中被創建,在其他地方被參考
-
設計方法的原則:方法的本意是功能塊,就是實作某個功能的陳述句塊的集合.注意保證方法的原子性,即一個方法只完成一個功能,利于后期拓展
package scanner; public class Demo02 { public static void main(String[] args) { int sum = add(1, 2); System.out.println(sum); } //方法名前面的int為回傳值的型別 public static int add(int a, int b) { return a + b; } }
方法的定義和呼叫
-
java的方法類似于其他語言的函式,是一段用來完成特定功能的代碼片段 -
方法包含一個方法頭和一個方法體,下面是一個方法的所有部分
- 修飾符:可選,告訴編譯器如何呼叫該方法,定義了該方法的訪問型別
- 回傳值型別:方法可能會回傳值.
returnValueType是方法回傳值的資料型別.有些方法執行所需的操作,但沒有回傳值.在這種情況下,returnValueType是關鍵字void - 方法名:是方法的實際名稱.方法名和引數表共同構成方法簽名
- 引數型別:引數像是一個占位符.當方法被呼叫時,傳遞值給引數.這個值被稱為實參或變數.引數串列是指方法的引數型別,順序和引數的個數.引數是可選的,方法可以不包含任何引數.
- 形式引數:在方法被呼叫時用于接受外界輸入資料
- 實參:呼叫方法是實際傳給方法的資料
-
方法體:方法體包含具體的陳述句,定義該方法的功能
修飾符 回傳值型別 方法名(引數型別 引數名){ ... 方法體 ... return 回傳值; } -
方法呼叫:
物件名.方法名(實參串列) -
java支持兩種呼叫方法的方式,根據方法是否回傳值來進行選擇-
當方法回傳一個值,方法呼叫通常被當作一個值
int larger = max(30,40); -
如果方法回傳值是
void,方法呼叫一定是一條陳述句System.out.println("hello")
-
package scanner;
public class Demo02 {
public static void main(String[] args) {
int max = max(10, 20);
System.out.println(max);
}
public static int max(int a, int b) {
int result = 0;
if (a == b) {
System.out.println("兩數相等");
return 0; //return可以作為停止條件
} else if (a > b) {
result = a;
} else {
result = b;
}
return result;
}
}
方法的多載
- 多載就是在一個類中,有相同的函式(方法)名稱,但形參不同的引數,即我們可以給函式相同的函式名稱,只用調整形參的型別等引數,
jvm會自動地幫我們呼叫正確的函式 - 多載的規則:
- 方法名稱必須相同
- 引數串列必須不同(個數不同或型別不同或引數的排列順序不相同等)
- 方法的回傳型別可以相同也可以不相同.
- 僅僅回傳型別不同不足以成為方法的多載
- 實作方法:方法名稱相同時,編譯器會根據呼叫方法的引數個數,引數型別去逐個匹配,以選擇對應的方法,如果匹配失敗,則編譯器報錯
package scanner;
public class Demo02 {
public static void main(String[] args) {
double max = max(10.0, 20.0);
System.out.println(max);
}
public static int max(int a, int b) {
int result = 0;
if (a == b) {
System.out.println("兩數相等");
return 0; //return可以作為停止條件
} else if (a > b) {
result = a;
} else {
result = b;
}
return result;
}
public static double max(double a, double b) {
double result = 0;
if (a == b) {
System.out.println("兩數相等");
return 0; //return可以作為停止條件
} else if (a > b) {
result = a;
} else {
result = b;
}
return result;
}
}
命令列傳參
- 有時候我們希望運行一個程式的時候再傳遞給它引數,這要靠傳遞命令列引數給
main()方法實作
package scanner;
public class Demo02 {
public static void main(String[] args) {
// args.length 陣列長度
for (int i = 0; i < args.length; i++) {
System.out.println("args[" + i + "]:" + args[i]);
}
}
}
可變引數
java支持傳遞同型別的可變引數給一個方法- 在方法宣告中,在指定的引數型別后面加一個省略號
- 一個方法中只能指定一個可變,同時必須是方法的最后一個引數,任何普通引數必須在它之前宣告
package scanner;
public class Demo02 {
public static void main(String[] args) {
Demo02 demo02 = new Demo02();
demo02.test(1, 2);
}
public void test(int... i) {
System.out.println(i[0]);
System.out.println(i[1]);
}
}
package scanner;
public class Demo02 {
public static void main(String[] args) {
// 呼叫可變引數的方法
printMax(34, 56.5, 62);
printMax(new double[]{12, 56.2});
}
public static void printMax(double... numbers) {
if (numbers.length == 0) {
System.out.println("No argment passed");
return;
}
double result = numbers[0];
// 排序
for (int i = 0; i < numbers.length; i++) {
if (numbers[i] > result) {
result = numbers[i];
}
}
System.out.println("The max value is:" + result);
}
}
遞回
- 遞回:就是A方法呼叫A方法本身,自己呼叫自己
- 利用遞回可以實作使用一些簡單的程式來解決復雜的問題 ,通常把一個大型的復雜的問題轉變為一個與原問題相似嘚規模較小的問題來進行求解.通常只需要少量的代碼就可以描述出解題程序所需的多次重復計算,大大減少程式的代碼量,遞回的能力在于用有限的陳述句來定義物件的無限集合.
- 遞回結構主要包括兩個部分
- 遞回頭(邊界條件):什么時候不呼叫自身方法,即什么時候停止,如果沒有頭,將陷入死回圈
- 遞回體:什么時候需要呼叫自身方法
- 注意:遞回對資源開銷較大,一般用于小型問題當中
package scanner;
public class Demo02 {
public static void main(String[] args) {
System.out.println(f(4));
}
// 階乘運算
public static int f(int n) {
if (n == 1) {
return 1;
} else {
return n * f(n - 1);
}
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/277297.html
標籤:其他
下一篇:Servlet-第一個專案的發布
