メソッドとは

プログラムの実行時には、いろいろなところで同じような処理を行うことがあります。 そのような処理を一つの機能としてまとめて、必要に応じて利用できるようにしておくと便利です。 これを実現するのがメソッドです。 それでは、メソッドについて学習していきましょう。

メソッド宣言

メソッド(method)はいくつかの文をまとめたもので、クラスの内部に記述されます。 メソッドはプログラムのいろいろな場所から呼び出すことができます。 プログラムの流れというのもは、結局のところメソッドからメソッドを呼び出す処理の連鎖だと言えます。

次のような形で、メソッドの仕様や振る舞いを記述することをメソッド宣言(method declaration)と言います。

構文 : メソッド宣言(クラスメソッド)
    static  戻り値の型  メソッド名(引数リスト){
        文1
        文2
        ...
        return 式;
    }

先頭にstaticが付いていますが、これはmainメソッドに付けるものと同じです。 メソッドにはstaticの付くものと付かないものがありますが、この章ではすべてのメソッドにstaticを付けます。 staticが付くメソッドをクラスメソッド(class method)、付かないメソッドをインスタンスメソッド(instance method)と呼びます。 staticの意味、戻り値、引数については後ほど学習しましょう。

メソッド名は識別子(第4章)の規則に従ってつけます。 メソッド内での実際の処理は、ブロックの中に記述することになります。 このブロックをメソッド本体と呼びます。

英語のmethodは「方法」、「道筋」という意味です。

メソッドを使って、いくつかの文をまとめることができる。

それでは、「こんにちは。」と表示するメソッドを作ってみましょう。 このメソッドは、次のように宣言することができます。

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

helloメソッドの仕様は表 9-1のようになっています。

表 9-1 : helloメソッド
戻り値の型メソッド名引数リスト
voidhello空白

戻り値の型voidというのは、戻り値を返さないことを意味します。 また、helloメソッドには引数も無く、引数リストは空白になっています。 メソッド本体も、「こんにちは。」と表示するだけの単純なものです。 最後の「return;」はreturn文(return statement)と呼ばれるもので、これが実行されるとメソッドの処理は終了して、呼び出し元に処理が戻ります。 構文の中では、「return 式;」と書かれていますが、今回は戻り値が無いので、「式」の部分が有りません。

構文 : 戻り値を指定しないreturn文
return;

実際には、helloメソッドはmainメソッドと同じようにクラスの内部に記述します。

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

    public static void main(String[] args) {
        ...
    }
}

MethodSample01クラスの中にhelloメソッドとmainメソッドの2つのメソッドが宣言されていますが、プログラムの実行時に最初に実行されるのは、あくまでもmainメソッドの方です。 mainメソッドが特別なメソッドであることを忘れないでください。 helloメソッドの方が先に宣言されているからといってhelloが最初に実行されるわけではないのです。 helloメソッドの方は、プログラムの中で明示的に呼び出されるまでは実行されません。 また、メソッドを宣言する順序は特に意味が無く、mainメソッドと他のメソッドのどちらを先に宣言してもかまいません。

メソッドを呼び出す

メソッドを宣言しておけば、それをプログラムのいろいろな場所から呼び出して、利用することができます。 今度は、メソッドの呼び出し方を見てみましょう。

メソッドを呼び出すには、次のように記述します。

メソッド名(引数リスト)

例えば、helloメソッドを呼び出すには、次のように記述します。

        hello();

helloメソッドには引数が無いので、呼び出すときも引数リストは空白となります。

メソッドが呼び出されると、メソッドの先頭の文から順に実行されていきます。 return文が実行されると、処理は呼び出し元に戻ります。 ただし、return文を実行しなくても、メソッドの処理が最後の行まで到達すると、処理は呼び出し元に戻ります。 したがって、helloメソッドのreturn文は、実は無くてもかまいません。

戻り値を返さないメソッドでは、最後の行に達するか、return文が実行されたときに呼び出し元に処理が戻る。

メソッドを使ってみる。

それでは、helloメソッドを試してみましょう。

MethodSample01.java
class MethodSample01 {
    static void hello(){
        System.out.println("こんにちは。");
        return;
    }

    public static void main(String[] args) {
        System.out.println("helloメソッドを呼び出します。");
        hello();
        System.out.println("helloメソッドを呼び出しました。");
    }
}
MethodSample01の実行結果
helloメソッドを呼び出します。
こんにちは。
helloメソッドを呼び出しました。

mainメソッドからhelloメソッドが呼び出されると、helloメソッドの先頭から順に処理が実行されていきます。 まず「こんにちは。」と表示され、次にreturn文が実行されます。return文が実行されるとメソッドは終了して呼び出し元に処理が戻ります。 この後は「System.out.println("helloメソッドを呼び出しました。");」が実行されます。

図 9-1 : helloメソッドの呼び出し