方法/函數
將一段邏輯或者功能提取出來,這種提取的形式就是函數
格式
修飾符 返回值類型 函數名(參數列表){
方法體;
return 返回值;
}
//明確返回值類型---求兩個整數的和,確定結果一定是整數---返回值類型是int
//明確函數執行過程中是否有未知量參與---求兩個整數的和,這兩個整數在函數執行過程中不能自動產生,是兩個未知量,未知量需要以參數的形式體現
//定義參數相當於在聲明瞭幾個變量
//在函數中聲明的參數---形參---形式參數
//函數名+參數列表---方法簽名---add(int i, int j)
public static int add(int i, int j){
int sum = i + j;
return sum;
}
//調用函數的時候傳入的實際值---實參---實際參數
add(3,5);
注意:
1.如果函數沒有返回值,那麼返回值類型定義爲void
2. return後續的代碼不再執行
3. 任何一個實體函數都有return語句
構造方法
在類中與類同名而沒有返回值類型的方法---主要是用於創建對象
構造方法可以重載
如果一個類沒有手動提供構造函數,那麼JVM在編譯的時候會添加一個無參的構造方法。
構造方法沒有返回值類型,也沒有返回值,能寫return語句嗎?---可以---規避風險
重載
一個類中存在了函數名一致,而參數列表不一致的函數的時候,稱這多個函數之間構成了重載。
函數在調用的時候會最先匹配格式最一致
當進行函數重載的時候,儘量重載所有的情況,以防出現多個函數都匹配的情況
練習:
1.任何一個大於等於6的偶數都可以分解成兩個質數的和
14 = 3 + 11
14 = 7 + 7
2. 親密數:如果A的所有因數(含1,不含本身)之和等於B,且B的所有因數之和(含1不含本身)等於A,A和B是一對親密數。輸出3000以內所有的親密數
重寫
在父子類中存在了方法簽名完全一致的方法---產生了方法的重寫
注意:方法的重寫遵循 兩等兩小一大 這五個要求
1. 方法簽名要求完全一致
2. 如果父類中方法的返回值類型是基本類型/void/最終類,子類中重寫的方法的返回值類型必須一致
3. 如果父類方法的返回值類型是引用數據類型,那麼子類重寫的方法的返回值類型是父類方法返回值類型的子類或者是本身
class A {}
class B extends A{}
class C{
public A m(){
return null;
}
}
class D extends C {
public B m(){
return null;
}
}
4.子類拋出異常小於等於父類方法拋出異常
5. 子類方法的權限修飾符的範圍要大於等於父類方法的權限修飾符的範圍
class A{
protected void m(){}
}
class B extends A{
public void m(){}
}
權限修飾符
用於限定變量或者方法的使用範圍的
| 本類中 | 子類中 | 同包類中 | 其他類中 |
public | 可以 | 可以 | 可以 | 可以 |
protected | 可以 | 可以 | 可以 | 不可以 |
默認 | 可以 | 同包子類可以 | 可以 | 不可以 |
private | 可以 | 不可以 | 不可以 | 不可以 |
函數的遞歸
指在函數中調用自己本身
StackOverflowError---棧溢出錯誤---反應函數在棧中執行---函數在執行完成之前不會釋放棧內存---遞歸的次數太多,就會出現這個錯誤
注意:基本數據類型傳參傳的是實際值,對於引用類型而言傳參傳的是地址
練習:求任意一個數的階乘