図Prog9_1_㏛cは「引数なしメソッド と 値渡しの引数のメソッド」の説明のための例である。このプログラムの最後にコメントで実行結果が示されています。
JAVAは本来オブジェクト指向のプログラミング言語であるが、現在まで学習したプログラミング(プログラマーがオブジェクトを設計しない)はオブジェクト指向のプログラミングではありません(非オブジェクト指向プログラミング)。今までオブジェクトがなくても実行できるメソッドを書いてきました。mainメソッドです。これはオブジェクトなしで直ちに実行できました。メソッドがオブジェクトなしで実行可能であるためにはmainメソッドのように修飾子として、staticがついている必要があります。ここでは、メソッドについて学習しますが、非オブジェクト指向のプログラムを作るためには全てのメソッドの修飾子をstaticにする必要があります。図Prog9_1_srcで定義されているメソッドは全てstaticであります。
staticメソッドは以下の形をしています。
static 戻り値の型 メソッド名(引数1,…,引数n){
本体文;
return 戻り値;
}
戻り値の型は図Prog9_1_srcではint又はvoidとなっています(3,6,13行)。intであればメソッドが終了するときにreturnで値を返さなければなりませんが、その値の型がintでなけらばなりません。すなわち、両者は型が一致する必要ががあります。voidの場合はreturn文は必要ありません。または、値なしでreturn;と書きます。
3から5行:メソッド名はkです。引数はありません。このメソッドは単にメッセージを表示するだけです。実行するときはk();と書きます(14行)。メソッドの実行が終わると、メソッドが呼ばれたところに帰ります(14行)。
6から12行:メソッド名はfです。引数は二つ宣言されています。どちらもint型です。このメソッドは15行目(printlnの中)から呼び出されています。println文は、まず”f(m,n)=”と表示しようとします(まだ表示しません)。続いて、mainのfのmとn の値をメソッドfの引数、それぞれmと nにコピーします(値を渡しているので「値渡しの引数」と言われます。)。7行目が実行され、sが初期化されます。続いて、8から9行目が実行され、sに整数mからnまでの和が加算されます。このsがreturn sにより、15行のf(m,n)の所に返されます。更にこの値(整数55)が文字列に変換されて、文字列”f(m,n)=”に連結され、”f(m,n)=55”となり、表示されます。
mainメソッドでは変数m,nが使用され、メソッドfの実引数として使われています。このm,nの値がメソッドfの仮引数m,nにコピーされます。実引数と仮引数は両方とも名前がm,nですが、両者は全く別の変数です。mainのm, nはメソッドfのm, nとは全く別の変数です。
値渡し:
引数が基本データタイプの場合,「値渡し」が行われます。
基本データタイプとは、int, short, long, float, double, byte, char, booleanです。
値渡しの場合、引数に関して、呼び出し側には影響は及びません。引数はメソッドに向かってコピーされるだけですから。仮にメソッド側で引数の値を変更しても、呼び出し側に戻って来たときその変更は呼び出し側に何の影響も与えません。