私はネット上で長い時間を探しています。しかし、使用しないでください。どうすればよいのでしょうか?結果が最初の "int main"を印刷しないのはなぜですか?私が知りたいのは、なぜこのプログラムの結果が次のようなものなのかです。事前に感謝します。静的メソッド(JAVA)の実行順序
スーパー静的ブロック
静的ブロック4メイン
スーパーコンストラクタに
コンストラクタ
class StaticSuper {
static {
System.out.println("super static block");
}
StaticSuper() {
System.out.println("super constructor");
}
}
public class StaticTests extends StaticSuper {
static int rand;
//static initialise
static {
rand = (int) (Math.random() * 6);
System.out.println("static block " + rand);
}
StaticTests() {
System.out.println("constructor");
}
public static void main(String[] args) {
System.out.println("in main");
StaticTests st = new StaticTests();
}
}
があなたの記事を読んで、私は疑問を持ってきたあなたの答えsincerely.Iいただきありがとうございます。私たちはのコンストラクタを呼び出す前に、サブクラスのnon_fieldが初期化されますそのサブクラスは正しいのですか?それで、なぜnon_fieldをコンストラクタから呼び出せないのですか?私はそれを理解していません。 – Manhand
私は非常に残念ですが、私は間違った質問をタイプします。質問はコンストラクタから非最終メソッドを呼び出さないでください(私はあなたの記事を読んでいますが、質問があります:サブクラスのnon_fieldは私たちがサブクラスのコンストラクタを呼び出す前に初期化されていましたか?そうではありません。なぜ、コンストラクタからfinalではないメソッドを呼び出すことができませんか?私はそれを理解しません) – Manhand
@Manhandあなたのコンストラクタで非最終メソッドを呼び出すことはお勧めしません。それを確認してください。 – SkrewEverything