パパの勉強部屋

勉強の記録をつけています。Java、ネットワーク、Excel、etc.

スッキリわかるJava入門 第5章 メソッド

●メソッド(method)
 ・Javaでは1つのプログラムを複数の部品に分けて作る事ができる。
 ・複数の文をまとめて名前を付けたもので、部品の最小単位。
 ・機能単位でメソッドに分割する事で、プログラムの「大局」を見渡せることができるようになり、全体の把握が楽になる。
 ・「表示がおかしい」など不具合が出た場合には、それを担当するメソッドを調べればよいため、修正が楽になる。
 ・繰り返し使用する事ができるので、同じ処理を何度も書く必要もなくなり、コードを書く手間を省くこともできる。

●メソッドの定義
 ・クラスブロックで以下の構文を使用。
  public static 戻り値の型 メソッド名 (引数リスト) {
   メソッドが呼び出されたときに実行される具体的な処理
  }
  
  例)
  public static void hello () {
   System.out.println("こんにちは");
  }
  ・hello ⇒定義するメソッドの名前(メソッド名)
  ・{}の中 ⇒メソッドブロック、helloメソッドを呼び出した時に実行される具体的な処理

●引数(argument)
 ・メソッドを呼び出す際に、呼び出し元から値を渡すことができる。
 ・渡される値の事を引数(argument)と言う。
 ・渡す値の事を「実引数」、受け取る変数の事を「仮引数」と呼ぶ。
 ・値の渡し方
  何も渡さない場合:メソッド名 ()
  値を1つ渡す場合:メソッド名 ( 値 )
  値を複数渡す場合:メソッド名 ( 値, 値, … )
  ※値の箇所には、変数名を指定することもできる。

●ローカル変数
 ・メソッド名で宣言した変数。仮引数もその一種。
 ・変数が属するメソッド内だけで有効な存在。
 ・別のメソッドに属する同名のローカル変数とは全くの別物。

●戻り値
 ・呼び出されたメソッドから、呼び出し元のメソッドへ値を返す事を「値を戻す」と言う。
 ・戻されるデータ(値)の事を「戻り値」と言う。
 ・値の戻し方
  public static 戻り値の型 メソッド名 (引数リスト …) {
   メソッドが実行された時に動く処理
   retrun 戻り値;
  }
 ・戻り値の型
  retuenによって戻される値と同じ型を指定する。
  何も戻さない場合は「void」を指定する。(voidは何もないという意味)
 ・戻り値を受け取る
  型 変数名 = メソッド名(引数リスト);
  ・変数を用意して受け取る必要がある。
  ・「=」がある場合、常に右辺から先に評価されるので、まずはメソッドの呼び出しが実行される。
  ・呼び出されたメソッドがreturn文によって値を戻す場合
   ⇒メソッド名(引数リスト)という部分は、評価されて戻ってきた値に置き換わる。
 ・メソッドの戻り値を変数で受けずに、そのまま使うこともできる。
 ・戻り値があるが使わない場合は、メソッド名(引数リスト)で呼び出すだけでも良い。
 ・return文は値を戻すだけでなく、メソッドの終了も行う。

オーバーロード
 ・似たような処理を行うメソッドを複数作りたい場合。
  ⇒メソッドに同じ名前をつけることは基本的にはできない。
 ・同じ名前のメソッドを定義する事をオーバーロード(overload)(または多重定義)と言う。
 ・仮引数が異なれば同じ名前のメソッドを複数定義することが許されている。
  ⇒JVMが呼び出し元の引数(実引数)を見て、その引数の型に一致するメソッドを呼び出す。
 ・仮引数の型だけでなく個数が違う場合もオーバーロードできる。
  ⇒JVMは引数の型と個数を比較して一致する方のメソッドを呼び出す。
 
●引数に配列を用いる
 ・メソッドの引数には配列を使うこともできる。
 ・普通の変数をメソッド呼び出しで渡すと…値渡し(call by value
  ・呼び出し元の変数の中身が、呼び出し先の引数にもコピーされる。
  ・呼び出し先の引数の中身を書き換えても、呼び出し元の変数は変化しない。
 ・配列をメソッド呼び出しで渡すと…参照渡し(call by reference)
  ・呼び出し元の配列のアドレスが、呼び出し先の引数にもコピーされる。
  ・呼び出し先で配列の実体を書き換えると、呼び出し元にも影響する。

public class Main {
  // int型配列を受け取り、
  // 配列内の要素すべてに1を加えるメソッド
  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);
    }
  }
}

実行結果
2
3
4

●戻り値に配列を用いる
 ・引数と同様に、戻り値にも配列を使用することができる。
 ・配列そのものを戻しているわけではなく、配列のアドレスを戻している。

コマンドライン引数(command line argument)
 ・プログラム実行時に指定したコマンドライン引数が、JVMによって配列に変換され、mainメソッド起動時に渡される。
  public static void main(String[] args) {
  >java Main 菅原 湊 朝香
  ⇒args[0]:菅原
   args[1]:湊
   args[2]:朝香