---
# System prepended metadata

title: Java--類別方法
tags: [Java]

---

---
tags: Java
---
# Java--類別方法
## 程序與函數的基礎
* 程序(Subroutines或Procedures)：沒有傳回值
* 函數(Functions)：有傳回值
## 建立類別方法
### 語法與語意
:::info
```java=
存取敘述  static  傳回值型態  方法名稱(參數列) { 
    …… 
   程式敘述; 
    …… 
} 
```
:::
* 存取敘述修飾子
「存取敘述」（Access Specifier）是一種修飾子（Modifiers）， 可以是public和private
	*  public：方法可以在程式任何地方進行呼叫， 甚至是其他類別
	*  private：方法只能在同一個類別內進行呼叫

* 靜態方法 static
宣告static，永遠吃掉某塊記憶體，不會消失

>* 參考：https://home.gamer.com.tw/creationDetail.php?sn=2622820
### 呼叫類別方法
:::info
```java=
方法名稱(參數列);
```
```java=
類別名稱.方法名稱(參數列);
```
:::

範例1：
![](https://i.imgur.com/ZOV2sPQ.png)

![](https://i.imgur.com/EZF8lqu.png)


範例2：(呼叫其他類別的類別方法)
![](https://i.imgur.com/bMlvErB.png)

![](https://i.imgur.com/TLKASxx.png)


### 類別方法的參數傳遞
* 正式參數/假參數：識別字，其角色如同變數，需要指定資料型態
* 實際參數：方法呼叫的參數，其運算結果的值需要和正式參數定義的資料型態相同
範例：
![](https://i.imgur.com/sY9RG2Q.png)

![](https://i.imgur.com/trCHLi9.png)

### 類別方法的傳回值
* Java方法的傳回值型態不是void，而是其它資料型態int或char等 >>「函數」
* 使用「return」關鍵字
* 傳回值的型態需要與方法宣告的傳回值型態相同

範例1：(無傳回值)
![](https://i.imgur.com/wAZvvsl.png)

範例2：(有傳回值)
![](https://i.imgur.com/bOLOkAR.png)
  
![](https://i.imgur.com/wyb4Wla.png)

範例3：(有傳回值)
![](https://i.imgur.com/QHpDAUw.png)

![](https://i.imgur.com/Q2xuq8D.png)
  
  
### 傳值或傳址參數
* 傳值：把變數值傳入方法，方法會另外配置記憶體儲存參數值，不會變更原本呼叫的變數值
	* 數值(int、double)、字元/字串(char、String) 
* 傳址：把變數實際儲存的記憶體位置傳入，若在方法更改參數值，也會變更原本呼叫的變數值
	* 陣列(Array)

範例： 
![](https://i.imgur.com/SXjcoDX.png)

![](https://i.imgur.com/u4TAvWi.png)

## 類別變數和變數範圍
* Java語言的變數分為類別的成員變數、方法參數和區域變數
* static + 成員變數 >> 類別變數
1. 區域變數範圍：在方法內宣告的變數，只能在程式碼後使用（不包括宣告前），在方法外的程式碼並無法存取此變數。
2. 方法參數範圍：傳入方法的參數變數範圍是整個方法的程式區塊，在方法外的程式碼並無法存取。
3. 成員變數範圍：不論是static的類別變數或是沒有宣告static，整個類別的程式碼都可以存取此變數。

![](https://i.imgur.com/xJTmgK9.png)

範例：
![](https://i.imgur.com/rKvY488.png)

![](https://i.imgur.com/jhqEvLX.png)

範例：
![](https://i.imgur.com/dq4Uheq.png)

![](https://i.imgur.com/fME8k5a.png)


## 遞迴的階層函數（Recursive）
* 遞迴：一個問題的內涵是由本身所定義
1. 遞迴方法在每次呼叫時，都可以使問題範圍逐漸縮小
2. 遞迴方法需要擁有終止條件，以便結束的執行

範例：
![](https://i.imgur.com/iL5KUCE.png)
  
![](https://i.imgur.com/sIspdJj.png)

## Math數學類別的類別方法
* 在呼叫方法時需要指明類別Math

![](https://i.imgur.com/Eg0KaDy.png)

範例：
![](https://i.imgur.com/aRMQ7Qp.png)

![](https://i.imgur.com/uDBrBRO.png)
