メソッド
メソッドはクラスの振舞い方、所作、何かを行う機能の定義です。
メソッドは引数を受取ったり、処理の結果の値を返すことが出来ます。
引数はメソッドを実行するために必須のデータであり、呼び出し側(実引数)と呼び出される側(仮引数)の引数の数、及び型が一致しないとコンパイルエラーが発生します。
基本型の引数をメソッドに渡すとき、引数の値はコピーされて渡されるため、引数を渡されたメソッド内で値が変更されても、呼び出し元の値は変わりません。
一方、オブジェクト型の引数では、呼び出し元から呼び出されたメソッドにオブジェクトの参照値が渡されるので、2つのメソッドが参照するインスタンスは同じ物であり、内容を変更すれば両方のメソッドがその変更を参照することになります。
同じ型の引数は任意個まとめて可変長引数にすることが出来ます。
可変長引数は引数の型の直後にピリオド3つ「…」を付けて宣言し、その後に変数名(配列名)を書きます。
可変長引数を持つメソッドは、引数を2つでも、3つでも、いくつでも渡して呼び出すことができます。渡された複数の値は、JVMによって配列に置き換えられますから、**可変長引数の値を使うときには、配列と同じように[ ]を変数名に追加して使います。
void sample(int... num) { for (int i =0; i<num. length; i++) { System.out.println(num[i]); } }
なお、可変長引数を使う時には、
処理の結果の値は戻り値と呼びますが、戻り値を呼び出し元のメソッドに戻すためには、return文を使います。
戻り値型にはint 型を、return文ではdouble型を戻すように記述すると、コンパイルエラーが発生します。
また、戻り値型を宣言しているにもかかわらす、return文を記述しない場合もコンパイルエラーになります。
逆に戻り値を戻さないvoidを宣言しているのにreturn文で値を戻そうとしてもコンパイルエラーになります。
public class ReturnSample { public static void main(String[] args) { System.out.println("retrun value = " + returnValue() ); int voidGet = voidReturn(); } static int returnValue() { return 1.0; } static void voidReturn() {} }
コンパイル結果
>javac ReturnSample.java ReturnSample.java:5: エラー: 不適合な型: voidをintに変換できません: int voidGet = voidReturn(); ^ ReturnSample.java:9: エラー: 不適合な型: 精度が失われる可能性があるdoubleからintへの変換 return 1.0; ^ エラー2個 >
メソッドからクラスのメンバへのアクセス
staticなメンバはインスタンスの有無にかかわらす使えますが、staticではないメンバは、インスタンスがないと使えません。
このため、staticなメソッドはstaticなフィールドやメソッドにはアクセスできますが、staticでないメンバにはアクセスできません。しかし、逆にstaticではないメソッドから、staticなメンバにアクセスすることは可能です。