第六節:Java方法
在之前的章節中,我們經常使用到System.out.println(),它是什麼呢?
println() 是一個方法
System 是系統類
out 是標準輸出物件
這句語句的意思是呼叫系統類 System 中的標準輸出物件 out 中的方法 println()。
1 .方法的定義與語法規則
Java中的方法,我們可以將其看成一個功能的集合,他們是為了解決特定問題的程式碼組合。比如司機會開車,老師會教書一樣,不同的方法可以實現不同的功能。
方法的定義語法:

在上面的語法說明中:
訪問修飾符:代表方法允許被訪問的許可權範圍, 可以是 public、protected、private 甚至可以省略 ,其中 public 表示該方法可以被其他任何程式碼呼叫,其他幾種修飾符的使用我們會在後面章節中詳細講解。
返回值型別:方法返回值的型別,如果方法不返回任何值,則返回值型別指定為 void (代表無型別);如果方法具有返回值,則需要指定返回值的型別,並且在方法體中使用 return 語句返回值。
方法名:是方法的名字,必須使用合法的識別符號。
引數列表:是傳遞給方法的引數列表,引數可以有多個,多個引數間以逗號隔開,每個引數由引數型別和引數名組成,以空格隔開。當方法被呼叫時,傳遞值給引數。這個值被稱為實參或變數。引數列表是指方法的引數型別、順序和引數的個數。引數是可選的,方法可以不包含任何引數。
方法體:方法體包含具體的語句,定義該方法的功能。
根據方法是否帶參、是否帶返回值,可將方法分為四類:
無參無返回值方法
無參帶返回值方法
帶參無返回值方法
帶參帶返回值方法
例如一下程式碼的calcSum方法用來計算兩門課程的成績總分:

如上所示:方法名為calcSum,它的修飾符是public,它有兩個引數int a和int b,在方法呼叫的時候必須傳入這兩個引數。它有一個int 型的返回值,所以在方法裡,有一條語句return sum;用來返回sum的值,其中sum型別也為int 型。而在方法呼叫的時候,我們用一個int 型變數rSum來接收這個返回值。方法calcSum實現了將兩門課程的總成績算出並返回。
注意:
方法體放在一對大括號中,實現特定的操作
方法名主要在呼叫這個方法時使用,需要注意命名的規範,一般採用第一個單詞首字母小寫,其它單詞首字母大寫的形式
呼叫方法的語法是物件名.方法名(類和物件後面會講到)
2. 引數與引數列表
在現實生活中,我們為了完成某件事情之前是需要一些條件的,比如我們買東西肯定是需要錢的。當然,方法也是如此。我們需要方法幫我們完成某項功能的時候,需要根據需求去調整條件。於是就有了引數。
我們可以通過在方法中加入引數列表接收外部傳入的資料資訊,引數可以是任意的基本型別資料或引用型別資料。
例如:

上面就是一個方法,方法名為printName,無返回值,引數型別為String,引數名name,它的功能是列印姓名,我們通過引數將姓名傳入到這個方法中,利用方法將姓名輸出到控制檯上。
呼叫帶參方法與呼叫無參方法的語法類似,但在呼叫時必須傳入實際的引數值。語法為物件名.方法名(引數1,引數2...)
在這裡我們必須區分什麼是實參什麼是形參。我們先看一個例子。

現在我們可以通過記憶體的圖示來簡單地說明一下。

上圖是方法呼叫前記憶體的情況,所有的變數都存放在桟中,由系統統一管理,因為我們在定義變數rAve時未對它進行初始化,所以它的值是隨機的,由它所在空間原有的值決定。
我們在建立物件時系統也會為物件分配記憶體空間,這裡不詳細說明


方法呼叫時,系統會專門為方法開闢一塊空間用來存放方法內的變數。此時大家可以看到,sub1和sub2兩個實參其實並沒有進入方法中,只是將它們兩個的值賦值個了形參a和b。

方法呼叫結束後,系統會釋放掉方法所產生的空間,回收系統資源。該方法有返回值,並被rAve接收了。
注意:
呼叫帶參方法時,必須保證實參的數量、型別、順序與形參一一對應
呼叫方法時,實參不需要指定資料型別
當方法引數有多個時,多個引數間以逗號分隔
3 .方法過載
在Java中通過在類中寫多個方法,這類方法的方法名相同,方法的引數列表不同(引數的個數和引數型別的不同)來事現方法的過載。所謂方法過載就是:在一個類中,有一系列的方法具有方法名相同,但引數列表不同,這類方法的現就是方法過載。


在進行方法過載的時候需要遵循以下的規則:
在使用方法過載的時候,必須通過方法中不同的引數列表來實現方法的過載。如:方法的引數個數不同或者方法的引數型別不同。
不能通過訪問許可權,返回值型別和丟擲的異常來實現過載
過載的方法中允許丟擲不同的異常
可以有不同的返回值型別,只要方法的引數列表不同即可
可以有不同的訪問修飾符
4. 返回值
如上面的例子所示,方法是一個實現了條件輸入和結果輸出的過程,往往我們需要對方法的結果進行進一步的處理,這時候我們就需要方法返回值了。
注意:
如果方法的返回型別為 void ,則方法中不能使用 return 返回值。
方法的返回值最多隻能有一個,不能返回多個值。
方法返回值的型別必須相容,也就是說如果返回值型別為 int ,則不能返回 String 型值
呼叫帶返回值的方法時,由於方法執行後會返回一個結果,因此在呼叫帶返回值方法時一般都會接收其返回值並進行處理
例子:實現一個方法,接收一個層數值n,列印一個有n層的直角三角形,並返回底邊最後一個值。並打印出來。


構造方法
當一個物件被建立時候,構造方法用來初始化該物件。構造方法和它所在類的名字相同,但構造方法沒有返回值。
通常會使用構造方法給一個類的例項變數賦初值,或者執行其它必要的步驟來建立一個完整的物件。
不管你與否自定義構造方法,所有的類都有構造方法,因為Java自動提供了一個預設構造方法,它把所有成員初始化為0。
一旦你定義了自己的構造方法,預設構造方法就會失效。
例項
下面是一個使用構造方法的例子:

你可以像下面這樣呼叫構造方法來初始化一個物件:

大多時候需要一個有引數的構造方法。
例項
下面是一個使用構造方法的例子:

你可以像下面這樣呼叫構造方法來初始化一個物件:

注:
當一個物件被建立時候,構造方法用來初始化該物件。構造方法和它所在類的名字相同,但構造方法沒有返回值。
通常會使用構造方法給一個類的例項變數賦初值,或者執行其它必要的步驟來建立一個完整的物件。
不管你與否自定義構造方法,所有的類都有構造方法,因為Java自動提供了一個預設構造方法,它把所有成員初始化為0。
一旦你定義了自己的構造方法,預設構造方法就會失效。
歡迎關注微信公眾號:Java的學習之路
裡面資料非常全,從java初級到高階都有,視訊,電子書,面試寶典,簡歷模板,經典案例,原始碼分析程式設計師故事以及解決bug方法。。。。應有盡有,可以推薦大家一起學習下!!
