【Javaの勉強】メソッドとは?

2019年3月24日

メソッドとは様々な処理をするための仕組みです。といっても、なかなかどんなものだかわかりにくいので、コードを見ながら確認していきたいと思います。

メソッドには処理内容を記述する!

こちらはfor文を学んだ時に使ったかなりシンプルなコードです。このコードでメソッドは一つだけあり、それは「mainメソッド」と呼ばれるものです。Javaの学び始め、「Hello World!」を出力した時から使っている「public static void main(String[] args) { }」は実はメソッドの一種です。

このmainメソッドの中にfor文と「System.out.print(i);」が書かれていますが、これがまさに処理ですね。このようにしてメソッドの中には処理を記述します。

ただ、このmainメソッドはかなり特殊なメソッドです。それは、実行した時に必ず最初に呼び出されるメソッドだからです。通常のメソッドはメソッドの本体(処理文が書かれている部分)と呼び出し部分が必要です。

どういうことでしょうか?詳しく見ていきます。

ForTestクラスにメソッドを書いてみる

こちらの記事で、「クラスの中に変数やメソッドという部品を書く」と書きました。
【Javaの勉強】クラスとは何だ?

そして、クラスに書かれたメソッドをメンバメソッドと呼びます。

これだけでは何を言っているのかさっぱりなので、実際にメンバメソッドを書いていきます。メンバメソッドはクラスの直下に書きます。

「void sample(){}」と書いたのがメンバメソッドです。「{}」の中には処理を記述しますので、「メソッドの中身」という文章を出力する処理を書きました。

メソッドの構文

メソッドの構文は次のようになります。

【メソッドの構文】

[修飾子] 戻り値の型 メソッド名(引数){

処理文

}

戻り値の型はここでは「戻り値を返さない」という意味の「void」を指定しています。深入りすると面倒なので一旦スルーしてください。修飾子や引数についても一旦スルーしてください。どちらもこのコードでは指定していません。

メソッドの動かし方 呼び出し元を記述する

一応これでも有効なメソッドではあるのですが、これだけではメソッドが動きません。試しにコンパイルしてみると、例1と同じ「0123456789」が出力されます。mainメソッドの中のfor文しか動いていませんね。

そこで、メソッドを呼び出すことが必要になります。呼び出すために書くコードを呼び出し元と呼びます。

メソッドを手っ取り早く呼び出すにはmainメソッドの中に呼び出し元を記述します。

10行目に書いた「sample();」というのがメソッドの呼び出し元です

【メソッドの呼び出し元 構文】

メソッド名();

かなり簡単なコードですが、このメソッド名でメソッド本体を探してくれて、実行してくれます。

staticメソッド

ところが、かなりややこしい話なのですが、このコードはコンパイルエラーになってしまいます。実はstaticメソッドから通常のメソッドは呼び出せないという決まりがあるからです。

呼び出し元はmainメソッドの中に書きましたよね。このコードはmainメソッドの中から外にあるsampleメソッドを呼び出そうとしています。ところが、mainメソッドによく見ると「static」という修飾子が付いています。これがややこしい話なのですが、これがついたメソッドの中にメソッドの呼び出し元を書くと、外に書いた通常のメソッドは呼び出せないのです。

理由についてはややこしい問題がありますし、「staticメソッド内から通常のメソッドは呼び出せない」という動き自体も重要になっていますので、ここではこの事実をそのまま覚えましょう。

ではどうしたら、sampleメソッドを呼び出せるかというととても簡単で、sampleメソッドにもstaticを付けてしまえばいいのです。

実行結果0123456789メソッドの中身

sampleメソッドの中身がきちんと出力されていますね。

念のためもう一度説明すると、10行目の「sample();」が2行目のsampleメソッドを呼び出し、メソッドの処理を実行しています。ちなみに、コードは基本的に上から順番に実行されますが、最初に呼び出されるのが「mainメソッド」であるため、まず最初にmainメソッドの中のfor文が処理され、その後下にあるsampleメソッドの呼び出しがされるという順番になります。

まとめ

これが一番簡単なメンバメソッドを使ったコードです。Javaの入門書では様々な例を使ってメソッドの呼び出し方を説明していますが、実際に動くコードを使って仕組みを学ぶのが一番早いと思います。

voidって何?なんでstaticを付けたの?まだまだ疑問は多いと思いますが、一旦はメソッドの呼び出し方を理解しましょう。