メソッド

 Java言語では,オブジェクト(インスタンス)の機能を実現するとき,メソッドをクラスに定義します。一口に「オブジェクトの機能」といっても,結局はJavaのコードの集まりにしか過ぎません。つまりメソッドとは,Javaのコードを意味のあるまとまり(機能や処理)として考えて,そのコードのまとまりに名前を付けたものです。

 オブジェクト指向では,機能という概念でメソッドを考えることができますが,現実のプログラミングでは,そこまで深い意味を持たない場合も多く,単に複雑な処理を切り出してプログラムの可読性を高めたり,繰り返し実行される処理を1つにまとめるためにメソッドが定義されることもよくあります。それではもっとも簡単なメソッドの定義方法を説明します。

メソッドの定義

 まず,与えられた2つの数字(変数xと変数yに格納された数字)を合計するaddメソッドの定義を見てみましょう。

int add(int x, int y){
  return x + y;
}

上記のようなメソッド定義を構成するには,3つの要素が必要です。

(1)戻り値の型
(2)メソッド名
(3)引数「ひきすう」(パラメータ)

 まずメソッドは,値を返さなくてはいけません。これは関数を知っていれば理解は早くなります。関数は与えられた引数を使い演算した結果を返します。ちょうど上記のaddメソッドを「足し算関数」だと思ってください。「足し算関数」に,3と4を与えると,「足し算関数」は7を返します。この関数の考え方を,addメソッドに当てはめると,addメソッドに3と7を与えると,addメソッドは7を返すことになります。

 Java言語では,値には必ず型が必要です。addメソッドが返す値は,どのような値なのかを型で表現しなければいけません。そのため,このaddメソッドの戻り値の型はint型で定義されています。



int add(int x, int y){ 

↑ここが戻り値の型になります。

 メソッドは,必ず名前が必要です。上記のメソッドの名前は「add」ですが,このようなメソッド名は,変数の場合と同じように,半角のアルファベットや数字,記号を使って作ることができます。ただし,使えないキーワード(単語)や記号といった,変数と同じように制限もあります。



int add(int x, int y){ 

  ↑ここがメソッド名 

 メソッドには,引数を渡すことができます。引数は,変数に代入されて渡されます。例えば3と4をaddメソッドに渡したい場合は,変数xに3を,変数yに4を代入します。この代入作業は,addメソッドを利用する側(これを呼び出し側といいます)から,以下のように記述することで,自動的に値を代入することができます。

add(3,4);

当然,この値にも型が存在します。そのためメソッドがどんな値を受け取ることができるのか,定義してやる必要があります。



int add(int x, int y){ 

     ↑  ↑ここが受け取れる引数の型。

このように,定義したメソッドは,呼び出し側から呼び出された結果,処理を行います。どのような処理を行うのかは { から } の間に,Java言語のコードで記述していきます。



int add(int x, int y){
  return x + y;                // ここが処理(xとyの合計を返す)
}

上記の例では「return文」を使ってxとyの合計を呼び出した側に返しています。

 次に,具体的な使用例を見てみましょう。

public class MyAdd {
  public static void main(String[] args) {
   int a;
   a = add(3,4);
   System.out.println(a); 
  }
  static int add(int x, int y){
    return x + y;
  }
}

実行すると,画面に7と表示されます。

 ここでは,addメソッドに3と4が与えられ呼び出されています。呼び出されたaddメソッドは,その合計を返します。返された数字は,変数aに代入されます。結果,画面には7が表示されるのです。

 まず,メソッドは必ずクラスの中で定義されます。そして,戻り値をメソッドから受け取る場合は,同じ型でなければいけません。

 実は,今までプログラムが始まるスタートポイントであるmainの部分も,メソッドです。また,今まで文字を表示させるのに使用してきたSystem.out.println()も,outクラスで定義されているメソッドを呼び出していたのです。

しかし,mainメソッドの戻り値の部分には,見たこともないキーワードが多数使用されています。publicとはなんでしょう?staticとは何でしょう?voidとはなんでしょう?それに,mainメソッドの引数には,String[]といった,型が使われています。なぜ,intやlongではないのでしょう?

 まだまだわからないことが多いと思いますが,voidだけは次に説明します。そのほかのキーワードについてはまだ無視をしていてください。

戻り値や引数のないメソッド

 メソッドには,戻り値や引数のないものも定義できます。ただしメソッドに戻り値がない場合は,きちんと宣言してやる必要があります。この時使用されるのが,voidというキーワードです。 引数がない場合は,何も記述する必要はありません。以下に戻り値も引数もないメソッドの例を紹介します。

public class MyHello {
  public static void main(String[] args) {
   Hello(); 
  }
  static void Hello(){
    System.out.println("Hello!!"); 
  }
}

 このように,戻り値がない場合は,戻り値の型にvoidを指定します。また,処理の中でreturn文で値を返してはいけません。プログラムのスタート・ポイントであるmainメソッドも,値を返しません。そのためvoidで宣言されています。