什麼是方法
方法:封裝了特定功能的代碼塊;
方法的定義格式:
有返回值的方法:
修飾符 返回值類型 方法名(形式參數列表){
方法體;
return 返回值;
}
無返回值的方法:
修飾符 void 方法名(形式參數列表){
方法體;
}
格式解釋:
修飾符:
若在main方法所在的類中定義方法,修飾符寫 public static (在下一篇關於static介紹中解釋)
若在事物描述類中定義方法,修飾符寫 public
返回值類型:
1.約束了方法的返回值的數據類型;
2.約束了調用方法接收方法結果變量的數據類型;
方法名:提供我們找到方法的方式
形式參數列表:
參數類型 參數名
參數類型:約束調用方法傳入實際參數的數據類型;
參數名:接收調用方法傳入實際參數的具體值;
方法體:完成功能的代碼
return:
1.用於結束方法;
2.在有返回值的方法內,結束方法並把方法的結果返回給調用者
返回值:方法的結果
//方法只能由一個結果,若有多個結果需要返回,可以使用容器把結果包裹起來一併返回;
void:被 void 修飾的方法是無返回值的方法;
方法的調用方式:
有返回值的方法:
1.直接調用:方法執行了但是沒意義
2.輸出調用:可以在控制檯看到方法的結果,但是沒有接收方法的結果
3.賦值調用:接收方法的結果並可以進行進一步操作 -->推薦
無返回值的方法:
只能使用直接調用;
方法的重載:
在同一個類中,出現了方法名相同,形式參數列表不同的情況且不報錯叫方法的重載;
注意:
1.在同一個類中;
2.方法名相同
3.形式參數列表不同:
a.形式參數的個數不同;
b.形式參數的類型不同;
c.形式參數的類型順序不同;
4.與返回值無關
方法的形式參數是基本數據類型的時候,形式參數的改變不影響實際參數;
方法的形式參數是引用數據類型的時候,形式參數的改變直接影響實際參數;
//注意:String作爲方法的形參時,把它當做基本數據類型來看;
可變參數:
格式:
數據類型...數組名
注意:
1.可變參數寫在形式參數的位置上,在調用方法的時候可以傳入任意個該類型的實參;
2.可變參數的後面不可以再接任何類型的形式參數
3.可變參數的前面可以有其他類型的形式參數
下面通過內存圖的方式瞭解方法
1.方法的形式參數是基本數據類型的時候形式參數的改變不影響實際參數
這個圖的過程是這樣的:
首先這個字節碼文件(.class文件)加載到方法區,創建相應的空間.成員方法main方法先進棧,在棧中開闢一塊空間,創建兩個變量並賦值,然後調用function方法,function方法入棧,開闢一塊空間,此時形參a,b分別被賦值10,和20.然後,局部變量a和b又在方法內操作,值發生變化,但不會影響main方法中a和b的值.function方法運行完,出棧銷燬,main方法運行完也要出棧銷燬.
2.當方法的形式參數是應用數據類型的時候形式參數的改變直接影響實際參數
這個圖的過程是這樣的:
首先這個字節碼文件(.class文件)加載到方法區,創建相應的空間.成員方法main方法先進棧,在棧中開闢一塊空間,new一個數組,則在堆內存中開闢一塊空間存數組的內容,默認賦值,把這個數組在堆內存的地址傳給數組名.然後對數組賦值,根據數組索引,對數組賦值.調用打印方法,將數組內容打印(因爲板塊問題,沒有展示).調用method方法.method方法入棧,開闢一塊空間,arr數組的地址傳給method方法的參數.之後method的操作都是對地址是0x001的數組操作,所以當方法的形式參數是應用數據類型的時候形式參數的改變直接影響實際參數.