メソッドを使うメリット
- プログラムの見通しがよくなり、全体を把握しやすくなる
- 機能単位に記述するため、修正範囲を限定できる
- 同じ処理1つのメソッドにまとめることで、作業効率が上がる
メソッド … Javaの部品の中で、最小化された部品
メソッドの作成方法
public static [戻り値の型] [メソッド名(引数リスト)] { メソッドが呼び出されたときに実行される具体的な処理 }
```java public class Main { public static void hello(){ // 引数なし "void"なので戻り値なし System.out.println("hello"); //{}内をメソッドブロックという } }
引数の渡し方
何も渡さない場合: Method_name ()
値を一つ渡す場合: Method_name (値)
値を複数渡す場合: Method_name(値, 値)
この「値」は、**変数、配列、オブジェクト** が入ります。
戻り値
呼び出されたメソッドから、呼び出し元のメソッドへ値を返すことを**値を戻す**といいます。
戻される値のことを**「戻り値」or「返り値」**と呼ばれます。
```java public static int MethodA { //戻り値の型宣言 int x = 100; return x; //x 変数を戻している } public static void main (String[] args) { int returnValue = methodA(); // 変数returnValue に戻り値「x」が代入される }
何も戻さない場合は、よく見る「void」を指定します。
※ void ⇒ 何もない
オーバーロード
類似する複数のメソッドを定義できる機能。
似たような処理を行うメソッドを複数作る時に、使われるものです。
メソッド名は同じ名前を使うことはできませんが、特定の条件下で定義することが可能です。
オーバーロード:
仮引数の個数か型が異なれば、同じ名前のメソッドを複数定義できる。
但し、引数は同じで、戻り値の型だけが異なるものが定義できない。
```java public class Main { //一つ目のメソッド 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("HELLO "," WORLD")); } }
```java public class Main { public static int add(int x, int y) { return x + y; } public static int add(int x, int y, int z) { return x + y + z; } public static void main(String[] args) { System.out.println("10 + 20 = " + add(10, 20)); System.out.println("10 + 20 + 30 = " + add(10, 20, 30)); } }
1つ目のコードが**引数の型が異なる場合、**
2つ目のコードが**引数の数が異なる場合** です。
上記の例でいうところの、
add(int x , int y)
この部分をシグネチャと言い、これが同一であれば、オーバーロードが可能です。
値渡しと参照渡し
配列型の変数には、配列の実態を指し示すメモリの番地が格納されています。
メソッドを呼び出すときに引数として通常の変数を指定した場合も、メソッドに渡されるのは変数ではなく、変数に入っている「値」が渡されます。これを値渡しといいます。
配列の時、先に出た「値渡し」をしようとするとどうなるでしょう。
```java public class Main { public static void printArray(int[] array) { System.out.println(array); } public static void main(String[] args) { int [] array = {1, 2, 3}; printArray(array); //配列を渡す…が } }
上記のようなコードでは、[I@53bd815b のような意味不明な文字列が返ってきます。
これは、配列の中にある値ではなく、配列の0番目の値の、アドレスが値として返ってきているのです。
このようにアドレスで返すことを参照渡しと呼びます。
また、参照渡しを行うと、『呼び出し先で加えた変更が、呼び出し元にも影響する』ということにも注意が必要です。
```java public class Main { public static void printArray(int[] array) { for (int element : array) { //配列の中の値をすべて取得 System.out.println(element); } // 結果をreturn で返していない } public static void main(String[] args) { int [] array = {1, 2, 3}; printArray(array); //配列を渡す } }
上記のコードでは、
```java public class Main { 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); } } }
コマンドライン引数
```java public class Main { public static void main(String[] args) { for (int i = 0; i < args.length; i++) { System.out.println(args[i] + "さん こんにちは!!"); } } }
mainメソッドは文字列配列を引数として受け取るように定義されています。
この String [] args に何か入れてみましょう。
コマンドラインで引数を渡すには、以下のようにjavaファイルを実行します。
java Main south hill java (java プログラム名 引数リスト)
引数リストは()などで囲まず、半角スペースで区切って複数の指定が可能です。
southさん、こんにちは! hillさん、こんにちは! javaさん、こんにちは!