第4講 メソッドすなわち関数を理解しようその1 
第6話 子分が子分を呼び出す
子分が子分を呼び出すプログラム例
class x{
  public static void main(String args[]){
    f();
  }
  public static void f(){
    System.out.println("私は第1の子分だ。");
    g();
  }
  public static void g(){
    System.out.println("私は第2の子分だ。");
  }
}
実行画面
入門

どうです。子分が子分に命令して仕事をさせています。
この例だと、fの方がgより偉いのでしょうか。
仮に、gの方もfを呼び出したらどうなるか予想できますか。
class x{
  public static void main(String args[]){
    f();
  }
  public static void f(){
    System.out.println("私は第1の子分だ。");
    g();
  }
  public static void g(){
    System.out.println("私は第2の子分だ。");
    f();
  }
}
答えは30行下。























実行例
java
と続いた後、
基礎
とエラーしてしまいました。
C++やC言語だと無限に続くのですが、
Javaの場合途中でエラーしてしまうようです。
fとgはどちらが偉いということはありません。
ですから、どちらがどちらに対しても命令=呼び出しできます。
ただ、今回の例では鏡を2枚平行に置いたとき、
鏡の中に鏡が無限に続くように、
無限に続いてしまいます。
このように際限がなく繰り返してしまうことを無限ループといいます。
無限ループはプログラムの宿痾で、
気をつけないとすぐに、無限ループになってしまいます。
Javaの場合は、無限ループに陥ったとき途中で強制的にプログラムを止める機能があるのでしょうか。
C言語の場合途中で止まることはありません。

今回は、無限ループに陥ってしまいましたが、
無限ループに陥らず、子分が子分を呼び出す例をあげると
class x{
  public static void main(String args[]){
    f();
  }
  public static void f(){
    System.out.println("私は第1の子分だ。");
    g();
  }
  public static void g(){
    System.out.println("私は第2の子分だ。");
    h();
  }
  public static void h(){
    System.out.println("私は第3の子分だ。");
  }
}
実行画面
Java
その他、子分が子分を呼び出す例をいろいろ考えてみてください。
今はvoid型のみでしたが、値を返す関数、int型関数、String型関数などいろいろ考えてみましょう。


第5話へ 第7話へ

戻る

VB講義へ
VB講義基礎へ
vc++講義へ第1部へ
初心者のための世界で一番わかりやすいVisual C++入門基礎講座
初心者のための世界で一番わかりやすいVisual Basic入門基礎講座
初心者のための世界で一番わかりやすいVBA入門講義(基礎から応用まで)
初心者のための VC++による C言語 入門 C++ 入門 基礎から応用まで第1部
初心者のための VC++による C言語 入門 C++ 入門 基礎から応用まで第2部
初心者のための VC++による C言語 入門 C++ 入門 基礎から応用まで第3部