一番かんたんなJava入門

これからJavaを始めようという人の為の超入門サイトです。丁寧、簡単にこだわった解説なので初心者にぴったりです。

【Java】 メソッドの定義と呼び出し

time 2013/03/11

sponsored link

メソッドの基本形

 メソッドというのは日本語で言うと「命令」みたいなニュアンスです。まずメソッドの形ですが、

メソッド名( )

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

メソッド名( ) { 命令内容 }

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

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

 ところで、メソッドと言えば何度も登場してますよね。mainメソッドというやつです。mainメソッドももちろんメソッドの一つです。
 今までプログラムの実行文はmainメソッドのブロック内に書いていましたが、mainメソッドのブロック内というのは、mainメソッドの命令内容を書くところなんです。今まで変数やらif文やら配列やらを使って書いていたのは、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メソッドの命令内容は、

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

です。これは「mainメソッドが呼ばれました」と出力しなさいというメソッド(命令)です。すなわち、このmainメソッドが呼ばれると「mainメソッドが呼ばれました」と出力されます。これでmainメソッドが呼ばれたらすぐ分かりますね。

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

methodtest1

 このように「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メソッドが呼ばれました");
   }
}

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

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

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

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

こうなります。
 そして、メソッドを定義する時は命令内容だけでは不十分で、そのメソッドの使い方やルールについても書いておかないといけません。書く場所はメソッド名の前と( )の中です。mainメソッドの形はもう覚えていると思いますが、メソッド名(main)の前に「public static void」、後ろの( )の中に「String[] args」を入れます。mainメソッドに関しては決まりきった形で書く必要がありますが、自分で作るメソッドは自由にその使い方やルールも決めることができます。が、ここではとりあえずsubメソッドは、publicでstaticでvoidなメソッドですよ。と定義して下さい。 その意味については次回以降に。

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

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

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

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

methodtest1

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

メソッドを自分で呼び出す

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

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メソッドも呼ばれるように書いてあるわけです。
 これで実行すると、

methodtest2

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

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文のおさらいです。

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メソッドが呼ばれました");
   }
}

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

methodtest3

 メソッドの定義と呼び出し、それとmainメソッドはclassを実行すると勝手に呼び出されるというのがなんとなく理解できましたでしょうか?
 ソースコードを見ていてメソッドが出てきた時に、定義しているのか?呼んでいるのか?がすぐに分かるように、その違いをしっかり頭に入れておきましょう。
 次は「引数」というのを使ってメソッドを作ります。

sponsored link

Androidアプリを作ろう

コメント

  • class Super {
    int num = 10;
    static int snum = 20;

    void method() {
    System.out.println(“Super:metod”);
    }
    {

    class Sub exteds Super {
    int num = 20;
    static int snum = 40;
    void method() {
    System.out.println(“Sub:metod”);
    }
    static void smethod() {
    System.out.println(“Sub:smethod”);
    }
    }

    class Sample {
    public static void main (String[] args) {
    Super b = new Sub();
    System.out.println(b.num);
    System.out.println(b.snum);
    b.method();
    b.smethod();
    }
    }

    by void €2014/06/23 23:35

  • class MyTest
    {
    {
    System.out.println(“initalizer”);
    }
    static {
    System.out.println(“static initalizer”);
    }
    MyTest() {
    System.out.println(“constructor”);
    }
    public static void main(string[] args){
    MyTest() mt = new MyTest();
    }
    }

    by void €2014/06/23 23:45

  •  基本情報取得を目指している者です。分かりやすくて大変参考になります。勉強させていただきます。

    by ryotaro suzuki €2015/08/06 22:55

  • メソッドの理解が曖昧だったので、とても勉強になりました。とてもわかりやすかったので、これからも参考にさせていただきます。

    by seigo €2016/05/03 01:50

  • メソッドを呼び出すとなんのメリットがあるのですか?
    ど素人ですみません

    by ど素人です €2016/05/19 18:55

down

コメントする



CAPTCHA


一番かんたんなJava入門

Androidアプリの作り方

忘備録

私の作ったAndroidアプリ

私の作ったWordPressテーマ

プロに教わるオンライン学習

管理人

Nobuo_CREATE

Nobuo_CREATE

WordPressテーマPrinciple、マテリアルを作ったり、Androidアプリを作ったり、Java入門サイトを作ったり、本を書いたりしています。どうぞよろしく。 [詳細]



sponsored link

オススメ書籍

[オススメpoint]

 この本は全く何も分からない初心者の方にお勧めです。プログラミングをするには覚えなければならない事が無茶苦茶いっぱいありますが、この本は教えてくれる順番、その構成が素晴らしいです。RPGのゲームを作るというストーリーにのっとってちょっとずつ難しいことを教えてもらえます。
 無機質で膨大なデータが載っているような本は読む気にならないという方は、こういうストーリー仕立ての本でチャレンジしてみてはいかがでしょうか?(注:RPGを作る為の本ではありません。)

[オススメpoint]

 ある程度、Javaを読み書きできるようになったら、オブジェクト指向について学ぶべきです。本書は、抽象的で分かったような分からんようなオブジェクト指向について、非常に分かりやすい例を出して説明してくれています。オブジェクト指向とは何なのか?という本質を掴むのにこれほど適した本はないと思います。オブジェクト志向の理念を理解できれば、より効率のいいコードをより楽に書けるようになるはずです。Java上級者を目指すなら必読の一冊!

只今、急拡大中

ゲームを作りたい人専門

個人フットサル予約サイト

ガチ専門

JavaからのRuby on Rails入門

JavaからのRuby on Rails入門