4

関数が呼び出されると、実行時にすべてのオブジェクトが作成されることを知っています。

バインドとは、クラス内でメソッド データ メンバーをバインドすることです。

事前バインディングは、コンパイル時にすべてのメソッド インスタンス変数をバインドします。すべてのオブジェクトは実行時に作成されるため、実行時にすべてのメソッド データ メンバーもバインドする必要があると考えました。

アーリーバインディングで、オブジェクトメソッドの呼び出しがコンパイル時に決定されるのはなぜですか? そのオブジェクトが実行時に作成された場合。

例えば。

class A{
    public void foo(){
        //some code here
    }
}

public static void main(String[] args){
    A aInstance = new A();
    aInstance.foo();
}

foo() はコンパイル時に解決されましたが、aInstance は実行時に決定されます。

4

1 に答える 1

0

これは、呼び出しをバインドするということは、呼び出されるメソッド (または関数) を決定することを意味し、それを呼び出すインスタンスを決定することではないためです。

呼び出しがわずかに速く実行されるため、アーリー バインディングが推奨されます。

ランタイムへのバインドを遅らせる唯一の理由は、オブジェクトの正確な型でさえコンパイル時に不明なポリモーフィズムである可能性があります。または、VMT ルックアップのコストを気にしない単純なコンパイラの実装。

于 2012-05-15T07:27:11.817 に答える