複数メソッドに分けて記載する方法　引数の渡し方　戻り値の利用方法　メソッドのオーバーロード　値渡しと参照渡し

#メソッドを分けて書くことのメリット
<dd>mainメソッド以外に機能毎メソッドを分割することで</dd>
<dd>プログラム全体の見通しを良くし、エラー時の修正もしやすくする</dd>
#メソッドの定義

```java
public static 戻り値　メソッド名(引数のデータ型 変数名){
　　　　メソッドが呼び出された時に実行される処理
}
```

<dd>・{}内はメソッドブロックという</dd>

#メソッドの呼び出し
<dd>(メソッドの呼出方法)</dd>
`メソッド名（引数リスト）;`

（例）

```java
 public static void maiu(String[] args){
   System.out.println("メソッドを呼び出します");
   method();
   System.out.println("メソッドを呼び出し完了！");
 }

```

<dd>・いくらメソッドが定義されていても、必ず最初に<strong>メインメソッド</strong>が実行される</dd>

#引数の渡し方
<dd>(引数の受取方法)</dd>
`public static void　hello(変数のデータ型 変数名);`

（例）

```java
public static void main(String[] args){
 hello("A");
 hello("B");
 hello("C");
}

public static void　hello(String name){
　System.out.println("こんにちは"+name+"さん");
}
```

（出力結果）

```
こんにちはAさん
こんにちはBさん
こんにちはCさん
```

<dd>・引数は変数名に自動で代入される</dd>

#複数の引数を渡す場合

<dd>(引数の代入方法)</dd>
`メソッド名（引数1,引数2）;`

<dd>(引数の受取方法)</dd>
`public static 戻り値　メソッド名（引数のデータ型 引数1,引数のデータ型　引数2）;`

（例）

```java
public class li5_5 {
   public static void main(String[] args){
    add("こんにちは","Aさん");
    add("こんばんわ","Bさん");
   }
   public static void add(String x,String y) {
	System.out.println(x+y);
   }
}

```
（出力結果）

```
こんにちはAさん
こんばんわBさん
```

<dd>渡す値を<strong>実引数</strong>受け取る値を<strong>仮引数</strong>という</dd>
<dd>上記の例ならば、<code>"こんにちは","Aさん" "こんばんわ","Bさん"</code>が,渡す値に該当するため<strong>実引数。</strong></dd>
<dd><code>String x,String y</code>が値を受け取っているため、<strong>仮引数。</strong></dd>

#戻り値の利用方法

<dd>(戻り値の戻し方)</dd>

```java
public static 戻り値の型　メソッド名(引数){
  メソッドが呼び出された時に実行される処理
  return 戻り値;
}
```

<dd>戻り値の型<code>void</code>は<strong>戻り値無し</strong>という意味</dd>
　
<dd>(メソッド名を呼び出して、戻り値を受取る方法)</dd>
`型 変数名＝メソッド名（引数リスト）`
　
<dd>(例)※ワードチョイスのセンスの無さは無視して下さい</dd>

```java

public class li5_7 {
  public static String Hello(String x,String y) {
	String aisatsu = x + y;
	return aisatsu;
  }

  public static void main(String[] args) {
	String aisatsu = Hello("おは","よう");
	System.out.println(aisatsu);
  }
}
```
<dd>(出力結果)</dd>
```
おはよう
```

#戻り値を直接利用する
<dd>(考え方)</dd>
<dd>上記例では、mainメソッドにて<code>String aisatsu = Hello("おは","よう");</code>で一度、変数として値を受け取ったあと、<code>System.out.println(aisatsu);</code>で戻り値を使用している。</dd>
<dd>以下のコードは、mainメソッドにて変数にて受取をせず、直接戻り値を命令文で使用している。</dd>
　
<dd>(例)※おはよう以外のオシャレな例があったら教えて下さい</dd>

```java
public class li5_8 {
  public static String add(String x,String y) {
	String ans = x + y;
	return ans;
  }

 public static void main(String[] args) {
    System.out.println(add(add("お","は"),add("よ","う")));
 }
}
```
<dd>(補足)</dd>
<dd><code>add(add("お","は"),add("よ","う")</code>において、最初の<code>add("お","は")</code>で<strong>「おは」</strong>ができ、次の<code>add("よ","う")</code>で<strong>「よう」</strong>が出来る。</dd>
<dd>最後に総括しているaddで<strong>「おはよう」</strong>が出来る。</dd>
　

<dd>(出力結果)</dd>
```
おはよう
```
#return文の注意点
<dd>（考え方）</dd>
<dd><code>return</code>を使用すると、メソッドが終了する</dd>
　
<dd>（例）</dd>

```java
public class li5_8 {
  public static String add(String x,String y) {
	String ans = x + y;
	return ans;
    System.out.println(ans);
  }
}
```
　
<dd>（補足）</dd>
<dd><code>System.out.println(ans);</code>はコンパイルエラーとなる</dd>

#メソッドのオーバーロード
<dd>（考え方）</dd>
<dd>同じ名前のメソッドは<strong>１つしか使用できない。</strong>しかし、似たような処理のメソッドを複数使用する場合がある。</dd>
<dd>そのような場合は<strong>引数のデータ型を変える</strong>または<strong>引数のデータ数を変える</strong>ことによって、同じ名前のメソッドを複数使用することが出来る。</dd>
　
<dd>（例~引数のデータ型を変える場合~）</dd>

```java

  public static int add(int x,int y) {
	return x + y ;
  }
  
  public static double add(double x, double y) {
	return x + y ;
  }
  
  public static String add(String x, String y) {
	return x + y ;
  }
  
  public static void main(String[] args) {
    System.out.println(add(10,20));
    System.out.println(add(3.5,2.7));
    System.out.println(add("Hellow","World"));
  }
```

<dd>（出力結果）</dd>

```
30
6.2
HellowWorld
```
　ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
<dd>（例~引数のデータ数を変える場合~）</dd>

```java

  public static String hello(String x,String y) {
	return x + y ;
  }

  public static String hello(String x,String y,String z) {
	return x + y + z ;
  }

  public static void main(String[] args) {
    System.out.println(hello("おは","よう"));
    System.out.println(hello("お","は","よう"));
  }
```

<dd>（出力結果）</dd>

```
おはよう
おはよう
```

#値渡しと参照渡し

<dd>（考え方）</dd>
<strong>通常の変数は値渡し</strong>のため、<strong>渡し元の値が変更になっても渡し先の値は変わらない。</strong>
<strong>配列を渡した場合は参照渡し</strong>のため、<strong>渡し元の値が変更になると、渡し先の値も変わる。</strong>
　
<dd>（例　〜通常の変数〜　）</dd>

```java

public class li5_13_1 {
	public static void method1(int x) {
		System.out.println(x);
		x = 20;
	}

	public static void main(String[] args) {
		int x = 10;
		method1(x);
		System.out.println(x);
	}
}
```
<dd>（出力結果）</dd>

```
10
10
```

<dd>（補足）</dd>
`main メソッド`から`method1 メソッド`に対して、値10を代入している。
`method1　メソッド`の最後に`x = 20;`で値を変更しているが、`main　メソッド`の出力は10のまま。
　
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
<dd>（例　〜配列変数〜　）</dd>

```java

public class li5_13_2 {
    public static void incArray(int[] array){
    		for(int i=0 ;i<array.length ;i++) {
                array[i]++;
    		}
    }

    public static void main(String[] args) {
    		int[] array = {1,2,3};
    		incArray(array);
    		for(int i :array) {
                System.out.println(i);
    		}
    }
}

```

<dd>（出力結果）</dd>

```
2
3
4
```
　
<dd>(補足)</dd>
配列変数のため、`main メソッド`から`inArray メソッド`に対して<strong>参照先の値では無く、参照先のアドレス</strong>を代入している。
`inArray メソッド`では`配列変数　array`の中身に１を足している。配列変数のため、参照先アドレスに保管されているデータに変更を加えている。つまり、元データを書き換えている。
よって、`inArray メソッド`では`return`で値を`mainメソッド`に返していないが`main メソッド`の出力結果が`inArray メソッド`処理後の値となっている。
上記から<strong>配列変数の場合は元データを共有するイメージ</strong>。