---
# System prepended metadata

title: method

---

# method
即C的函數
- 靜態方法有6種
    - 只能讀取同樣是靜態的屬性
    - 靜態：程式運行才載入
- 一般有6種
- 6種
    - 無傳入，無回傳
        - 用於
            - 列印
            - 內部運算
            - 加上屬性進行運算
                - 屬性：全域的（寫在method外）
    ```java=
    x=10
    public void method01() {
		System.out.println(x);
	}
    ```
    - 有傳入，無回傳
        - 可傳入多個，傳入陣列，甚至傳入class
    ```java=
	public void method02(int a,int b) {
		if(a==0&&b==0) {
			System.out.println("給我一個數字");
		}else {
			System.out.println(a+b);
		}
	}
    ```
    - 無傳入，有回傳
    ```java=
    ...int method01(){
        int y=1;
        int z=2;
        return y+z; //將結果返回
    }
    ```
    回傳值為某型態就用那個型態接值
    ```java=
    int c=x.method03();//在其他程式中調用 也可以用來運算（method相加）
    ```
    - 有傳入，有回傳
    建立lib比較常用
    ```java=
    ...int method01(int x,int y){
        return x+y;//有回傳
    }
    ```
    調用：
    ```java=
    int z=x.method04(99,97);//用對應型態接
    ...println("z");
    ```
    - [Java Bean](https://hackmd.io/@x200706/rJ8gFcGo9)
    - 可變參數
    是一個無限迴圈
        ```java=
        public void method05(int... c){ //這邊...是真的這樣寫，不是省略

        }
        ```
        備註：第二個參數得在前面
        
        更詳細的寫法範例：
        ```java=
        public void method05(int...c) {
		int total=0;
		for(int y:c) {
			total+=y;
		}
		System.out.println(total);
	    }
        ```
        
        在其他檔案調用：
        ```java=
        //調用可變參數
		Demo01 d2 = new Demo01();
		d2.method05(1,2,3);
        ```
## 建立實體&其他
在原本的程式中：
```java=
...main(...){
Demo01 hi=new Demo01();
hi.method01();
}
```
***
- 不同package要import另一個package的完整路徑

在不同package下的程式中：
```java=
import tw.com.xxx.code01.*; //IDE會自己補上.*
//如果是tw.com.xxx.code01.Demo01只能用Demo01的，要用其他的要自己一個個import(效能考量）
...
...
...main(){
    Demo01 d1=new Demo01(); //要用其他檔案的標題；每使用一次new會在Heap中再切一塊記憶體
    d1.method01();
    }
```
- call by value
    - 相對是參考位置
***
## 如何簡化程式碼
```java=
//簡化前
.......printlin(""+x);
.......printlin(""+x);
.......printlin(""+x);

//簡化後
String show=null;
show=""+x;
Syso...println(show);
```