【Java ~メソッド~】勉強メモ（５）

Java学習中。
復習に見返せるようにメモしていきます。
ほぼ自分の勉強メモです。
過度な期待はしないでください。


メソッド
-
メソッドとは、何らかの処理を割り当てた部品である。
Javaのファイルを実行すると、先ず自動的にmainメソッドが実行されます。
mainメソッドの処理をメソッドに切り分けると、mainメソッドが各メソッドに指示を出し、
各メソッドが個々の処理を実行するという構造になります。

- メソッドの流れ

```.java
class Main {
  public static void main(String[] args) {  //①
    hello();  //②
  }
  
  public static void hello() {
    System.out.println("Hello World");  //③
  }
}
```

① mainメソッドが呼ばれる
↓
② mainメソッドの中で、helloメソッドが呼ばれる
↓
③ helloメソッドの中で、
　 System.out.println("Hello World")が実行される
<br>

- メソッドの定義

メソッドを使用するには、まず定義をする必要がある。
定義の仕方が下記の通り

```.java:定義の仕方
class Main {
  public static void メソッド名(){
    // 実行する処理;
  }
}
```

また、メソッドはクラスの中に定義します。
上記のコードを例に言えば、
Mainクラスのブロック（{ }）の中に定義されています。
このようにクラスの中に定義しないとエラーになる。

<br>

- メソッドの呼び出し

メソッドを呼び出すには、`メソッド名();`と記入する。
またメソッドの呼び出しには、mainメソッドの中に記入する。
何故なら、先程流れの所でも記載しましたが、
mainメソッドが各メソッドに指示を出し、各メソッドが個々の処理を実行するという構造に
なっているから。

```.java
class Main {
  public static void main(String[] args) {
    hello();  // メソッドの呼び出し
  }
  
  public static void hello() {
    System.out.println("Hello World");
  }
}
```
<br>

- 引数

引数とは、メソッドに与える追加情報のようなもの。
メソッドを呼び出すときに、一緒に引数を渡すと、メソッドの中でその値を利用することができます。

メソッドに引数を渡すには、まず引数を受け取れるメソッドを定義しなければならない。
その為には、メソッドの定義部分で、引数を受け取るための箱となる<font color="Red">変数（仮引数）</font>を指定します。

そして、「public static void メソッド名( )」の( )に仮引数を指定します。
仮引数には、<font color="Red">データ型の指定</font>と<font color="Red">変数の定義</font>をする必要があります。

```.java:仮引数の指定
class Main {
  public static void メソッド名(データ型 変数名){
    // 実行する処理;
  }
}
```

```.java:例
class Main {
  public static void study(String language){
    // 実行する処理;
  }
}
```
<br>

- メソッドに引数を渡す

メソッドに引数を渡すには、`メソッド名(引数)`としてメソッドを呼び出します。
渡された引数は、メソッドの仮引数で指定した変数に代入され、
その変数はメソッドの処理の中で用いることができます。

```.java:例
class Main {
  public static void main(String[] args) {
    study("Java");
  }

  public static void study(String language){
    System.out.println("今は、" + language + "を勉強中です。");
  }
}
```

```.text:出力結果
今は、Javaを勉強中です。
```
<br>

- 複数の引数

メソッドが複数の引数を受け取るためには、<b>仮引数をコンマ（,）で区切って</b>定義します。
また、引数は左から順番に「第1引数、第2引数・・・」と呼ぶ。

```.java:複数の仮引数の指定
class Main {
  public static void メソッド名(データ型 変数名1, データ型 変数名2){  //左から順番に第1引数、第2引数
    // 実行する処理;
  }
}
```
<br>

実際に、メソッドに複数の引数を渡します。
仮引数は任意に順番を決められますが、メソッドを呼び出すときは、
仮引数の順番通りに引数を渡さなければなりません。

なので、study("Java", 2)と、引数を渡す順序が反対になっていると
String型の仮引数に整数を入れようとするので、エラーになってしまう。

```.java:例
class Main {
  public static void main(String[] args) {
    study(2, "Java");
  }

  public static void study(int month, String language){
    System.out.println(month + "ヶ月前から、" + language + "を勉強中です。");
  }
}
```

```.text:出力結果
2ヶ月前から、Javaを勉強中です。
```
<br>

- メソッドの戻り値

メソッドの処理結果を、メソッドの呼び出し元で使いたい場合があります。
このようなときは、メソッドが戻り値を返すようにします。

戻り値のあるメソッドには、メソッドの中で<font color="Red">return</font>を使う事と、
ここまで定型だった「public static void」のvoidの部分を<font color="Red">指定するデータ型</font>に変更します。

メソッドの中でreturnを使うと、returnの値をメソッドの呼び出し元に返すことができます。
また、これまで定型だったvoidとは、<font color="Red">戻り値がない</font>、という意味です。
なので、このように戻り値のない（returnがない）メソッドには、voidを指定します。

```.java:戻り値のあるメソッド
public static 戻り値のデータ型 メソッド名(引数){
  return  戻り値;
}

```

```.java:例
class Main {
  public static void main(String[] args) {
    int total = add(2, 8);  // 変数を定義は、「変数名 = 値」 で代入する事が出来る
    System.out.println(total);
  }

  public static int add(int a, int b){
    return a + b;
  }
}
```
addメソッドは、戻り値が整数なので「public static int」となる。
<br>

```.text:出力結果
10
```
<br>

- メソッドのオーバーロード

基本的には、同名のメソッドは原則として定義出来ません。
が、<b>引数の型や個数が違う場合</b>は同名のメソッドを定義できます。
このように同名のメソッドを定義することをオーバーロードと言う。

```.java:例
class Main {
  public static void main(String[] args) {
    study(); //①
    study("Java"); //②
  }

  public static void study(){
    System.out.println("Javaを勉強中です。"); 
  }

  public static void study(String language){
    System.out.println("今は、" + language + "を勉強中です。");
  }
}
```

```.text:出力結果
① Javaを勉強中です。
② 今は、Javaを勉強中です。
```
<br>

- 引数と戻り値を合わせた応用

※double型は、小数を表すデータ型

```.java:例
class Main {
  public static void main(String[] args) {    
    printData(fullName("John", "Christopher", "Smith"), 175.5);
  }

  public static void printData(String name, double height) {
    System.out.println("私の名前は" + name + "です");
    System.out.println("身長は" + height + "cmです");
  }

  public static String fullName(String firstName, String middleName ,String lastName) {
    return firstName + " " + middleName + " " + lastName;
  }
  
}
```

```.text:出力結果
私の名前はJohn Christopher Smithです
身長は175.5cmです
```
<br>

- 真偽値の戻り値

真偽値のデータ型は、<b>boolean型</b>です。
ここで作られたisEvenメソッドは、引数の値が偶数かどうかを調べ、偶数であればtrue、奇数であればfalseを返します。

```.java:例
class Main {
  public static void main(String[] args) {    
    int number = 4;
    if(isEven(number)){
      System.out.println("偶数です");
    } else{
      System.out.println("奇数です");
    }
  }

  public static boolean isEven(int a){
    return  a % 2 == 0; // 2で割り切れれば偶数なのでtrue、割り切れなければ奇数でfalseを返す
  }
}
```

```.text:出力結果
偶数です
```

<br>
過去投稿記事
-
[【Java~変数の定義、型変換について~】勉強メモ](https://qiita.com/k-yasuhiro/items/43ef789c8be7b669046a)
[【Java ~真偽値~】勉強メモ2](https://qiita.com/k-yasuhiro/items/5a75e6130552abd03934)
[【Java ~条件分岐・繰り返し処理~】勉強メモ3](https://qiita.com/k-yasuhiro/items/cc7ceb00bc795d1ea33c)
[【Java ~配列~】勉強メモ4](https://qiita.com/k-yasuhiro/items/97da0fe073ce5f8ce8d4)