0

私のコードは:-

class Test
{
  static int a = 11;
  static
  {
    System.out.println("Hello static! " + main() + a);
  }

  public static void main(String[]args)
  {
    System.out.println("Hello String!");
  }

  public static char main()
  {
    System.out.println("Hello char!");
    return 'H';
  }
}

出力:-

Hello char!
Hello static! H11
Hello String!

なぜ「ハローチャー!」"hello static!" の前に出力されますか?

4

5 に答える 5

3
  1. 静的ブロックが最初に実行されます。
  2. 出力する文字列を組み立てる際に、引数なしで main() を呼び出します。
  3. main() は出力を出力します。
  4. static ブロックはその出力を表示します。
  5. 静的ブロックが終了します。
  6. main(String[]) メソッドが実行され、その出力が出力されます。
于 2013-02-10T08:50:55.127 に答える
1

分解してみましょう。

最初に実行されるのは、静的初期化ブロックです。したがって、次の行を実行します。

System.out.println("Hello static! " + main() + a);

しかし、そのメソッドを呼び出す前に、main() を呼び出す必要があります。最初にすべての引数を完全に評価する必要があるからです。

したがって、これは静的初期化子で println の前に呼び出されます。

public static char main()
{
  System.out.println("Hello char!");
  return 'H';
}

Hello char!これにより、最初の行に表示されるが出力されます。

横に印刷されるHを返しますHello static!

最後に、main(string[]) が呼び出されてプログラムが開始されます。そして、そこに私たちは見ますHello String!

于 2013-02-10T08:48:19.630 に答える
1

ここでの一般的な実行ロジックは次のとおりです。

  1. クラスがロードされるため、静的コンストラクターが実行されます。
  2. コンストラクター内で、 String ( へのパラメーターSystem.out.println()) が評価され、char main()メソッドが呼び出されます。
  3. char main()メソッドが評価されます。
  4. char main()文字列の内側に出力されます:最初の出力行
  5. 静的コンストラクターの文字列が構築されているため、出力できます: 2 番目の出力行
  6. 実際void main()に実行して、3 行目を出力します: 3rd output line
于 2013-02-10T08:49:01.127 に答える
1

あなたのラインで

System.out.println("Hello static! " + main() + a);

main() は System.out.println の前に実行されるため、char main() 内の print ステートメントが外側の print ステートメント「Hello Static」の前に実行されることは理にかなっています。

于 2013-02-10T08:49:38.637 に答える
1

なぜ「ハローチャー!」"hello static!" の前に出力されますか?

なぜなら、ステートメント印刷main()の完了前にメソッドが呼び出されて実行されるからです。sysoutHello static

実行順序は次のとおりです。 -

  • クラスがロードされます。
  • staticvariableaがロードされ、 に初期化され11ます。
  • staticブロックが実行されます。
  • そこsysoutのステートメントから、main()静的メソッドが呼び出されます。この時点では、ステートメントが完全ではないHello staticため、まだ印刷されていません。sysout
  • 実行制御はmain()メソッドに行きます。それがないと、現在の sysout ステートメントを完了できないためです。
  • main()メソッドは を出力し"Hello char"、 を返します'H'
  • static実行は内のブロックに戻りsysoutます。
  • sysout実行を完了し、出力します"Hello static! H11"

: -sysout上記は - を意味しSystem.out.println()ます。

于 2013-02-10T08:47:58.190 に答える