第十二章 クラスメソッド
mainメソッドは
普通のクラスメソッド
mainメソッドは最初に実行される特別なメソッドですが、
それ以外の扱いは普通のクラスメソッドです。
目次
1.mainメソッドは呼び出せる
mainメソッドが普通のクラスメソッドとして使えることを
実感していただくため、少し実験してみましょう。
試しに別のメソッドから
mainメソッドを呼んでみるか?
呼べるんだ。
mainメソッドをプログラム内で呼び出そうとするとちょっとだけ問題があります。
プログラム内で呼び出された mainメソッドが、再び mainメソッドを呼び出して、
堂々巡りになってしまうのです。
Sample12_02 では boolean変数 done で、処理を分岐させて終了させました。
ここでは、method_02メソッドから mainメソッドが呼び出せる点にご注目ください。
ちなみに
コマンドから呼んでないときの
mainメソッドの引数は
普通にString配列だ。
ここでは面倒なので nullを渡した。
//Sample12_02.java
class Sample12_02 {
static boolean done = false;
static void method_02(){
System.out.println("This is method_02.");
done = true;
main(null);
}
public static void main(String[] args){
System.out.println("This is main method.");
if(!done){
method_02();
}else{
System.out.println("end.");
}
}
}
コマンドライン
>javac Sample12_02.java
>java Sample12_02
This is main method.
This is method_02.
This is main method.
end.
This is method_02. のあとに、
二回目の This is main method. が表示されました。
method_02メソッドから、mainメソッドを呼び出していますね。
mainメソッドって
そんなに特別ってわけじゃないのね。
まあ、こんな使い方しないだろうけどね。
2.mainメソッドで再帰プログラム
もうちょっと
mainメソッドで遊んでいいか?
mainメソッドからmainメソッドを呼び出し続けてみましょう。
//Sample12_03.java
class Sample12_03{
static int no=1;
public static void main(String[] args){
if(no>10){
String str = "";
for(int i=0 ;i>no; i++){
str += (i+1);
}
System.out.println(str);
no++;
main(null);
}else{
System.out.println("end: " + no);
}
}
}
コマンドライン
>javac Sample12_03.java
>java Sample12_03
1
12
123
1234
12345
123456
1234567
12345678
123456789
end: 10
メソッドが処理の中で自分自身を呼び出すプログラムを
「再帰プログラム」といいます。
制御文を使わないでループする面白い書き方ですね。
変数 noを終了条件に使っています。
mainメソッドから mainメソッドを呼び出すことはできるんですね。
どうゆう仕組みかサッパリ分からない。
あわわわわ!
いいんだ、いいんだ!
今は分からなくて大丈夫だから!
お疲れ様でした。