方法是指一段具有獨立功能的代碼塊,只有被調用時才會執行
方法的主要作用體現在:
代碼組織:將原本擠在一起的臃腫代碼按照功能進行分類管理
- 例如:將用戶注冊的驗證邏輯、數據庫操作、結果返回等分離成不同方法
提高復用性:相同功能的代碼只需編寫一次,多處調用
- 例如:計算兩個數最大值的方法可以在程序多個地方復用
方法的定義和調用
public static void 方法名() {// 方法體
}調用方式:方法名();
注意:
????????1.平級關系:方法之間是并列關系,不允許嵌套定義
????????????錯誤示例:
public static void methodA() {public static void methodB() { // 不允許在方法內定義方法// ...}
}
????????2.調用執行:方法不調用就不會執行
????????????????即使定義了多個方法,如果沒有調用它們,這些方法都不會執行
????????3.執行順序:方法的定義順序與執行順序無關,執行順序取決于調用順序
方法的內存機制
????????方法在內存中的生命周期
- 未調用時:存放在方法區的字節碼文件中
- 調用時:進入棧內存運行
- 執行完畢:從棧內存中退出
?????????Java內存結構(部分)?????
???????????方法區:存儲加載的字節碼(.class)文件
????????????????????????字節碼文件是源代碼編譯后的結果,保留了原代碼的結構
???????????棧內存:方法運行時使用的內存區域????????? ? ? ? ?
????????????????????????遵循"先進后出"的原則,方法調用形成調用棧
public static void main(String[] args) {System.out.println("開始");getMax();System.out.println("結束");
}public static void getMax() {int num1=10;int num2=20;int max = num1>num2?num1:num2;System.out.println(max);
}
? 代碼執行流程詳解
????????
- main方法入棧:虛擬機自動調用main方法,main方法進入棧內存
- 打印"開始":執行第一條語句,控制臺輸出"開始"
- 調用getMax方法:
- getMax方法進入棧內存
- 執行getMax方法體:
- 定義變量num1=10, num2=20
- 計算最大值并存儲在max變量中
- 打印最大值20到控制臺
- getMax方法出棧:方法執行完畢,退出棧內存
- 繼續執行main方法:打印"結束"
- main方法出棧:程序執行完成
帶參數方法的定義和調用
public static void 方法名(數據類型 變量名) {// 方法體
}
// 多個參數:
public static void 方法名(數據類型 變量1, 數據類型 變量2, ...) {// 方法體
}調用方法:方法名(參數值)
??參數類型
- 形參(形式參數):方法定義時聲明的參數??
- 實參(實際參數):方法調用時傳入的具體值
帶返回值的定義和調用
public static 返回的數據類型 方法名(數據類型 變量名,……){方法體; return 值}調用的方式:返回的數據類型 變量名 = 方法名(參數值)
方法通用定義格式
public static 返回值類型 方法名(數據類型 變量名,……){方法體;return 數據;
}
定義方法時,要做到兩個明確:
????????明確參數:主要明確參數的類型和數量
????????明確返回值類型:主要時明確方法操作完畢后是否有結果數據,如果有,寫對應的數據類型,如果沒有,寫void
方法的常見問題
? ? ? ? 1.方法不調用不執行
????????2.方法與方法之間是平級關系,不能嵌套定義
????????3.方法的編寫順序和執行順序無關
????????4.方法的返回值類型為void,表示該方法沒有返回值,沒有返回值的方法可以省略return語句不寫,如果要寫return,后面不能跟具體的數據
????????5.return語句下面,不能編寫代碼,因為永遠執行不到,屬于無效代碼x