メソッドの基本形

 メソッドとは何なのか?一言で言えば何らかの一塊の処理を行う為の仕組みです。

 それだけでは何のことやら分からないと思いますが、メソッドについてどんなに懇切丁寧に説明されてもなかなか初心者が全てを理解することは難しいと思います。

 実際書いてみる、使ってみることでだんだんと理解できるので、とりあえず書き方、使い方を覚えましょう。

 まずメソッドの形ですが、

メソッド名( )

 このようにメソッドには必ず後ろに( )がついています。

 メソッドは自分でその処理内容を定義して自由に作ることができます。( )のさらに後ろに{ }を書いてその中に処理内容を書きます。

メソッド名( ) { 処理内容 }

 このような形で、そのメソッドの処理内容を定義します。

メソッドの処理内容を定義する       ↓そのメソッドを実際に使う(処理内容を実行する)

 という大まかな仕組みをまずは理解できるように頑張りましょう。

勝手に呼ばれるmainメソッド

 ところで、メソッドと言えば何度も登場してますよね。mainメソッドというやつです。

 mainメソッドもその名の通りメソッドの一つです。

 今までプログラムの実行文はmainメソッドのブロック内に書いていましたが、mainメソッドのブロック内というのは、mainメソッドの処理内容を書くところなんです。今まで変数やらif文やら配列やらを使って書いていたのは、mainメソッドの処理内容を定義していたわけです。

 そしてmainメソッドを定義したclassを実行すると、そのmainメソッドの処理内容が実行される。というのが今までのところです。

 なぜ、classを実行するとmainメソッドの処理内容が実行されるかと言うと、classを実行するとそこに書いてあるmainメソッドが自動的に呼ばれるようになっているからなんです。

 メソッドを呼ぶというのは、要はその処理内容を実行するということです。

 ここら辺は初心者が頭混乱しがちなポイントだと思います。全てを理解しようとせず、とにかく何となく大まかに理解するように努めてください。

 こちらをご覧下さい。MethodTestというclassです。

MethodTest.java

public class MethodTest{
   public static void main(String[] args){
      System.out.println("mainメソッドが呼ばれました");
   }
}

 このMethodTestクラスのmainメソッドの処理内容は、

MethodTest.java

System.out.println("mainメソッドが呼ばれました");

です。

 この何度も出てきている「System.out.println()」というのもメソッドなのですが、ここでは単にコンソールに文字列を出力するための表記だと思っておきましょう(深入り厳禁です)。

 要するに、このmainメソッドが呼ばれると「mainメソッドが呼ばれました」と出力されます。これでmainメソッドが呼ばれたらすぐ分かりますね。

 この状態で、このMethodTestクラスを実行すると、

実行結果
mainメソッドが呼ばれました

 このように「mainメソッドが呼ばれました」と出力されます。つまりmainメソッドが呼ばれているのが分かると思います。

 クラスを実行するとはそのクラスのmainメソッドを呼ぶということなんです。

 分かったような分からんような・・。と思いながらでも進んでください。

メソッドを定義する

 上記のMethodTestクラスに書いてあるのは、mainメソッドの定義です。それだけです。それ以外には何もありません。

 mainがあるならsubもあっても良いだろうということで、同じようにsubメソッドも作りましょう。

MethodTest.java

public class MethodTest{
   public static void main(String[] args){
      System.out.println("mainメソッドが呼ばれました");
   }

   public static void sub(){
      System.out.println("subメソッドが呼ばれました");
   }
}

 { }ブロックに注目して下さい。余計な部分を省くと、

MethodTest.java

class MethodTest{
   main(){}
   sub(){}
}

こういう形です。classブロックの中に、「main( ){ }」と「sub( ){ }」が並んでいます。mainメソッドとsubメソッドを定義しているというのが分かりますでしょうか?これに処理内容を入れると、

MethodTest.java

class MethodTest{
   main(){System.out.println("mainメソッドが呼ばれました");}
   sub(){System.out.println("subメソッドが呼ばれました");}
}

こうなります。

 ただし、メソッドを定義する際は処理内容だけでは不十分です。そのメソッドの使い方やルールについても書いておかないといけません。書く場所はメソッド名の前と( )の中です。

 mainメソッドの形はもう覚えていると思いますが、メソッド名(main)の前に「public static void」、後ろの( )の中に「String[] args」を入れます。

 mainメソッドに関しては決まりきった形で書く必要がありますが、自分で作るメソッドは自由にその使い方やルールも決めることができます。が、ここではとりあえずsubメソッドは、publicでstaticでvoidなメソッドですよ。と定義して下さい。 その意味については次回以降に。

 それらを全部書き入れると、

MethodTest.java

class MethodTest{
   public static void main(String[] args){
      System.out.println("mainメソッドが呼ばれました");
   }
   public static void sub(){
      System.out.println("subメソッドが呼ばれました");
   }
}

さっきの形になります。横に長くなるとはみ出るから改行しただけで、改行しなくても同じです(けど、改行するのが普通です)。

 ではこのmainメソッドとsubメソッドを定義したMethodTestクラスを実行してみましょう。

実行結果
mainメソッドが呼ばれました

 呼ばれたのはmainメソッドだけです。せっかく定義したのにsubメソッドにはお呼びはかかりませんでした。先ほど言ったようにmainメソッドはそのclassを実行したときに自動的に呼ばれるからです。subメソッドを定義しても勝手には呼んでもらえません。

メソッドを呼ぶ

 mainメソッドは勝手に呼ばれますが、mainメソッド以外のメソッドは自分で呼ばないとダメです。では呼んであげましょう。

MethodTest.java

class MethodTest{
   public static void main(String[] args){
      System.out.println("mainメソッドが呼ばれました");
      sub();
   }
   public static void sub(){
      System.out.println("subメソッドが呼ばれました");
   }
}

こうです。呼ぶ時は処理内容を定義するための{ }は要りませんし、使い方を定義する為のpublicもstaticもvoidも要りません。

 これがメソッドを呼ぶのか定義するのかの違いです。

 そして大事なのは呼ぶ場所です。mainメソッドのブロック内で呼んでますよね?mainメソッドのブロック内というのはmainメソッドの処理内容を書くところです。つまり、mainメソッドが実行されると、subメソッドも呼ばれる(実行される)ように書いてあるわけです。

 これでこのクラスを実行すると、

実行結果
mainメソッドが呼ばれました
subメソッドが呼ばれました

 ちゃんとsubメソッドも呼ばれているのが確認できます。

 メソッドは一度定義しておけば何度でも使えるので、こんなこともできます。

MethodTest.java

class MethodTest{
   public static void main(String[] args){
      System.out.println("mainメソッドが呼ばれました");
      sub();
      sub();
      sub();
      sub();
      sub();
   }
   public static void sub(){
      System.out.println("subメソッドが呼ばれました");
   }
}

 「sub();」を5回繰り返すなら、こんな風にも書けますね。for文のおさらいです。

MethodTest.java

class MethodTest{
   public static void main(String[] args){
      System.out.println("mainメソッドが呼ばれました");
      for(int i=0; i<5; i++){
         sub();
      }
   }
   public static void sub(){
      System.out.println("subメソッドが呼ばれました");
   }
}

実行結果はどちらもこうなります。↓

実行結果
mainメソッドが呼ばれました
subメソッドが呼ばれました
subメソッドが呼ばれました
subメソッドが呼ばれました
subメソッドが呼ばれました
subメソッドが呼ばれました

 今回はsubメソッドというのを自分で定義して、自分で呼び出してみました。

 メソッドを定義する、そしてそれを呼ぶ(実行する)という仕組みが何となく分かりましたでしょうか?細かい部分は書いているうちにだんだんと分かってくると思うので、まず定義と呼び出しという大まかな仕組みを理解しましょう。

 次は「引数」というのを使ってメソッドを作ります。