メソッドの定義

広告

それではメソッドを定義する方法を確認します。メソッドにはインスタンスメソッドとクラスメソッドと呼ばれるものがあり、ここではクラスメソッドをについて利用方法を確認していきます。ただどちらも書式同じで次のようになります。

[修飾子] 戻り値のデータ型 メソッド名(引数1, 引数2, ....){

}

例外と呼ばれるものを使う場合には少し違った書式となりますが、例外については別のページにて詳しく解説します。

修飾子はメソッドだけではなくフィールドやクラスにも付けるもので、そのメソッドがどこからアクセス可能なのかを示すアクセス修飾子と呼ばれるものと、その他の修飾子が存在します。詳しくは別のところで説明しますので、しばらく修飾子としては「private static」を付けると考えておいて下さい。

戻り値のデータ型はメソッドが呼び出された時に値を一つだけ呼び出し元に返すことができます。その返す値のデータ型を指定します。何も値を返さない場合はvoid型を指定することになっていますので、取り合えず「void」を記述して下さい。

定義するメソッドには名前をつける必要があります。メソッド名は変数名と同じく識別子を使います。詳しくは「変数名のつけ方(識別子)」を参照して下さい。

メソッドの呼び出し元からメソッドに対して値を渡したい場合に引数を利用します。戻り値は一つだけでしたが、引数は複数個指定することができます。その場合はカンマ(,)で区切って記述していきます。引数が必要無い場合は何も記述する必要はありません。引数についても詳しくは別のページで解説します。

以上をふまえ、メソッドは次のような構成となります。

private static void test(){

  /* メソッド内で実行する処理 */

}

メソッドが呼び出された時に実行する処理を「{」から「}」のブロックの間に記述します。

メソッドの呼び出し

メソッドを定義したらプログラムの中から呼び出すことができます。メソッドの種類によって呼び出し方が実際は異なるのですが、現在使い方を確認しているメソッドの場合は次のように呼び出してください。

変数 = メソッド名(値1, 値2, ....);

定義されているメソッド名を指定して呼び出します。メソッドに値を渡す場合には括弧の中にカンマ(,)で区切って記述して下さい。値を渡す必要が無い場合は括弧の中は空で結構です(括弧は必要です)。

メソッドで戻り値が設定されている場合は、メソッド呼び出しそのものが戻り値となりますので、変数などに対して代入することができます。

例えば「test」というメソッドを呼び出し、引数も戻り値も無い場合には次のように記述します。

class TestClass{
  public static void main(String args[]){
    System.out.println("こんにちは");
    test();
    System.out.println("さようなら");
  }

  private static void test(){
    System.out.println("お元気ですか");
  }
}

この時、処理の流れは次のようになります。

プログラム実行開始
mainメソッド内の最初の文から実行される
"こんにちは"が画面に出力される
testメソッドが呼び出される

testメソッドの最初の文から実行される
"お元気ですか"が画面に出力される
testメソッドのブロックの最後まで達する

testメソッドを呼び出した次の文から実行される
"さようなら"が画面に出力される
mainメソッドのブロックの最後まで達する
プログラム終了

このようにメソッドを呼び出す文が実行された時点で、処理はメソッドの先頭の文へ移ることになります。そしてメソッド内の処理が順に実行され最後まで達するとメソッドを呼び出した文の次の文から再度実行されていくことになります。

なおメソッドの呼び出しはmainメソッドの中からも行えますし、メソッドの中からさらに他のメソッドを呼び出すこともできます。

メソッドの記述位置

メソッドはクラスの中に記述します。プログラムが実行される時に最初に呼び出されるメソッドであるmainメソッドがクラスの中に既に記述されているはずですが、新しく定義するメソッドもクラスの「{」から「}」の中に記述します。この時、メソッドが記述される順番は関係ありません。

例えば先ほどのサンプルを次のように記述してもまったく同じように動作します。

class TestClass{
  private static void test(){
    System.out.println("お元気ですか");
  }

  public static void main(String args[]){
    System.out.println("こんにちは");
    test();
    System.out.println("さようなら");
  }
}

クラスの中でどの位置にmainメソッドが記述されていても最初に呼び出されるメソッドはmainメソッドであり、他のメソッドは明示的に呼び出されない限り実行されることはありません。

サンプル

では簡単な例で試しておきます。

JSample2_1.java

class JSample2_1{
  public static void main(String args[]){
    hello();
    bye();
    hellobye();
  }

  private static void hello(){
    System.out.println("こんにちは。");
  }

  private static void bye(){
    System.out.println("さようなら。");
  }

  private static void hellobye(){
    hello();
    bye();
  }
}

コンパイル後に実行すると次のように表示されます。

p2-1

今回は3つのメソッドを定義して順に呼び出しています。3つ目のメソッドでは他の2つのメソッドを呼び出しています。

( Written by Tatsuo Ikura )

関連記事 (一部広告含む)