0

関数内でオブジェクトを作成すると、そのオブジェクトは実行時に作成されますか?

何が起こるのですか?作成した?コンパイル時と実行時?

早期バインディングと遅延バインディングは、コンパイル時間とランタイムも意味しますか? 動的リンク静的リンクとは何ですか? 静的と聞いてコンパイル時間を考えるのは正しいですか? いまいましい私はとても混乱していますか?

申し訳ありませんが、私の英語が下手であることはわかっています。また、回答と例をできるだけ初心者に優しいものにしてください。

4

4 に答える 4

1

早期の製本は、スープの調理を始める前に、冷蔵庫からトマトを取り出してテーブルに置くようなものです。

遅延バインディングがスープの調理を開始します。トマトが必要な場合は、冷蔵庫からトマトを取り出します。

スープの調理は実行時間です。

ナイフ、スプーン、ソースパンを準備するのはコンパイル時です。(トマトは含まれていません。)


これが疑似コード化された説明です:

遅延バインディング:

... get : 
if (myvar is null) myvar = new object;
return myvar

早期バインディング

myvar = new object;
... get :
return myvar
于 2012-04-30T01:11:01.267 に答える
0

関数内にオブジェクトを作成するとき、そのオブジェクトは実行時に作成されますか?

何が起こりますか?作成した?コンパイル時と実行時に?

それはあなたが「オブジェクト」によって何を意味するかに依存します。クラスインスタンスを意味する場合は、はい、実行時にスタックまたはヒープのいずれかに作成されます。静的として明示的に宣言された文字列や型など、静的に割り当てられたオブジェクトは、コンパイル時にデータセグメントに作成されます。静的変数は、プログラムの存続期間中存続します。

アーリーバインディングとレイトバインディングは、コンパイル時間とランタイムも意味しますか?

ウィキペディアから:

アーリーバインディングを使用すると、コンパイラーは、適切なメソッド名とシグニチャーを持つ1つ以上のメソッドがあることを静的に検証します。これは通常、コンパイルされたプログラムに仮想メソッドテーブル(「v-table」)のオフセットとして格納され、非常に効率的です。遅延バインディングでは、コンパイラはメソッドが存在することを確認するのに十分な情報を持っていません。ましてや、vテーブルの特定のスロットにバインドすることもできません。代わりに、メソッドは実行時に名前で検索されます。

簡単に言うと、初期バインディングでは、コンパイラはシンボルテーブルでメソッドとそのオフセットを検索するため、情報が利用可能である必要がありますが、遅延バインディングでは実行できず、ランタイムがそれを検索する必要があります。遅延バインディングは動的ディスパッチとは大きく異なりますが、動的ディスパッチはしばしば同義語として使用されます。後者は、ディスパッチテーブルまたは「vtable」を使用してメソッドの実装へのポインターを格納することを指し、オーバーライドされる場合があります。

動的リンク静的リンクとは何ですか?

基本的に、これは、参照ファイルまたは「ライブラリ」を最終的な実行可能ファイル(静的)に含めることと、実行時にプログラムイメージに配置することの違いです。明らかに、前者は実行可能ファイルに不要なサイズを追加しますが、(1)依存関係の問題を心配する必要がなく、(2)プログラムの起動がより効率的です。一方、ダイナミックリンクは(1)スペースを節約し、(2)ライブラリの更新を1か所で実行できるようにします。

于 2012-04-30T02:30:27.350 に答える
0

Java では静的にリンクされるものはありませんが、静的にバインドされます。「静的」とは、呼び出される関数の正確な説明 (クラス名、メソッド名、引数の型) をコンパイラが識別することを意味します。メモリ内のアドレスは決定しません。これが静的バインディングと静的リンクの違いです。これは、静的メソッドを呼び出したときに実行されるコードがコンパイル時にまだわからないことを意味します。JVM が実行時にロードする .class ファイルの内容によって異なります。Java はすべての呼び出しをメソッドに静的にバインドしますstatic。したがって、キーワードです。privateメソッドはオーバーライドできないため、静的バインディングもメソッドに適用されます。同様の議論がfinalメソッドにも当てはまります。

動的バインディングとは、そのメソッドを含むクラスを除いて、コンパイラが静的な場合のようにすべてを決定することを意味します。正確なクラスは、メソッドを呼び出す前の最後の瞬間に、メソッドが呼び出されているオブジェクトに関連して決定されます。Object.equalsそのような動的にバインドされたメソッドです。これは、コードの同じ行が実行されるたびに異なるメソッドを呼び出すことができることを意味します。

早期バインディング == 静的バインディング。遅延バインディング == 動的バインディング。これらは同義語です。

于 2012-04-30T09:29:15.680 に答える