1

すべてのオブジェクトがObjectを拡張するため、このコードはJavaでのすべてのオブジェクト作成に対して呼び出されますか?または、JVMは、ヒープ内に多数のオブジェクトのオブジェクトが作成されないように、何らかの方法でそれを最適化しますか。

このメソッドregisterNatives()で正確に何が起こるか 。

package java.lang;  

public class Object {
  private static native void registerNatives();
  static {
    registerNatives();
  }
4

3 に答える 3

2

静的ブロックは、クラスがロードされるときに1回だけ実行されます。

ここまたはここで説明したように、クラスのオブジェクトが初期化されるたびに実行されるブロックも定義できますstatic。キーワードを削除するだけです。

于 2012-07-27T09:52:46.407 に答える
1

何をするかは問題ではありませんregisterNatives().。ここで重要なのは、静的ブロックで囲んでいることです。静的ブロックがロードされ、Javaクラスローダーがクラスをロードするときに実行されます。したがって、JVMごとに1回だけ実行されることが保証されています。

于 2012-07-27T09:58:37.683 に答える
0

1.ここでの質問は、コンストラクターチェーンではなく、静的です

2.静的変数は、JVMがクラスをロードするときに初期化され、JVMは、クラスがインスタンス化されるか、そのクラスの静的メソッドが呼び出されるときにクラスをロードします。

3.したがって、この静的ブロックは、JVMがクラスをロードするたびに実行されます。

于 2012-07-27T10:15:45.910 に答える