this.getClass()は構築中に何を返しますか?

wilx:

this.getClass()オブジェクトの構築中にJavaは何を返しますか(例えば、コンストラクターまたはフィールド初期化子式から呼び出された場合)。最も派生したクラスが返されることを期待しても安全ですか?

ダニエル・プライデン:

これは、Java言語でのオブジェクトの構築とJava仮想マシンでのオブジェクトの構築の違いを観察できるいくつかの場所の1つです。

JVMバイトコードでは、特定のタイプのオブジェクトの作成は単一の命令であるため、アトミックです。オブジェクト自体がスーパータイプのような別のタイプのオブジェクトになることは決してありません。ただし、このオブジェクトはまだ「構築」されていません。バイトコードレベルでは、コンストラクターはという名前の特別なメソッド<init>であり、フィールドを設定したり、既存のオブジェクトを操作したりできます。

コンパイラーは、実際のコンストラクターに加えて、フィールド初期化子とインスタンス初期化子ブロックを<init>メソッドにアセンブルしますの最初の操作<init>は通常<init>、スーパータイプで宣言された対応するメソッドを呼び出すことです。したがって、イニシャライザはスーパータイプからサブタイプへと順番に実行されます。ただし、スーパータイプ<init>メソッドが実行されているとき、オブジェクト自体はすでに完了しているタイプです。したがってgetClass()、そのタイプが返され、によって返される値はgetClass()、それが呼び出される場所に応じて変化しません。

Java言語の観点から見ると、これは(ほとんど)問題点です。<init>関係するメソッドのいずれかが例外をスローすると、オブジェクトは通常すぐにガベージコレクションの対象になります。ただし、部分的に構築されたオブジェクトを別のスレッドから見えるようにすることができるいくつかのケースがあります。その場合、一貫性のない状態のオブジェクトを観察できます。また、そのクラスを公開するJVMで<init>(意図的に文書化されていない)メソッドを使用して、オブジェクトを実行せずに意図的に作成することもできますsun.misc.Unsafe

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

Mavenは正確に何を構築しますか... Eclipse Run As内で選択しますか?

分類Dev

回帰問題のためにKerasでCNN + LSTMを構築します。適切な形状は何ですか?

分類Dev

getClass()。getResource()は常にnullを返します

分類Dev

BufferKnifeはgradleAndroidStudioの構築中に問題を作成します

分類Dev

グリッドで繰り返しレイアウトを構築する最良の方法は何ですか?

分類Dev

getClass()。getName()はどのようにしてジェネリック型のクラス名を返しますか?

分類Dev

getClassへのjni呼び出しは、jobjectに対してnullを返します

分類Dev

JavaはObject.getClass()== Object.getClass()を保証しますか?

分類Dev

ArrayBufferまたはBlobを送信して再構築する正しい方法は何ですか?

分類Dev

ホストにIPアドレスを使用してInetSocketAddressを構築する正しい方法は何ですか?

分類Dev

$ .getScriptは何を返し、スコープに対して何をしますか?

分類Dev

空のEditTextに対してgetText()は何を返しますか?

分類Dev

getChildAt(0)はListViewに対して何を返しますか

分類Dev

malloc(0)は何を返しますか?

分類Dev

fork()== 0は何を返しますか?

分類Dev

ps axuwfwは何を返しますか?

分類Dev

zerofree verboseは何を返しますか?

分類Dev

if(数値)は何を返しますか?

分類Dev

.getClass()== .classまたは.getClass()== .class.getClass()を使用できますか?

分類Dev

NestJSは、アプリの構築中にSwaggerエラーを修正します

分類Dev

Unity3Dは、ゲームを構築するときに何百ものエラーを出します

分類Dev

ASP.NET Core Web APIはどのようにURLを構築しますか?

分類Dev

Box <dyn Trait>はどのようにそれ自体を脱構築しますか?

分類Dev

Portageは更新時に完全なパッケージを再構築しますか?

分類Dev

@EmbeddedIdはどのように複合主キーを構築しますか?

分類Dev

WiresharkはHTTPフローをどのように構築していますか?

分類Dev

ECMAscriptは関数を構築する方法を提供しますか?

分類Dev

ACPI BIOSは起動時に何を構成しますか?

分類Dev

バージョンを更新するたびに、VLCの「フォントキャッシュの構築」は何をしますか?

Related 関連記事

  1. 1

    Mavenは正確に何を構築しますか... Eclipse Run As内で選択しますか?

  2. 2

    回帰問題のためにKerasでCNN + LSTMを構築します。適切な形状は何ですか?

  3. 3

    getClass()。getResource()は常にnullを返します

  4. 4

    BufferKnifeはgradleAndroidStudioの構築中に問題を作成します

  5. 5

    グリッドで繰り返しレイアウトを構築する最良の方法は何ですか?

  6. 6

    getClass()。getName()はどのようにしてジェネリック型のクラス名を返しますか?

  7. 7

    getClassへのjni呼び出しは、jobjectに対してnullを返します

  8. 8

    JavaはObject.getClass()== Object.getClass()を保証しますか?

  9. 9

    ArrayBufferまたはBlobを送信して再構築する正しい方法は何ですか?

  10. 10

    ホストにIPアドレスを使用してInetSocketAddressを構築する正しい方法は何ですか?

  11. 11

    $ .getScriptは何を返し、スコープに対して何をしますか?

  12. 12

    空のEditTextに対してgetText()は何を返しますか?

  13. 13

    getChildAt(0)はListViewに対して何を返しますか

  14. 14

    malloc(0)は何を返しますか?

  15. 15

    fork()== 0は何を返しますか?

  16. 16

    ps axuwfwは何を返しますか?

  17. 17

    zerofree verboseは何を返しますか?

  18. 18

    if(数値)は何を返しますか?

  19. 19

    .getClass()== .classまたは.getClass()== .class.getClass()を使用できますか?

  20. 20

    NestJSは、アプリの構築中にSwaggerエラーを修正します

  21. 21

    Unity3Dは、ゲームを構築するときに何百ものエラーを出します

  22. 22

    ASP.NET Core Web APIはどのようにURLを構築しますか?

  23. 23

    Box <dyn Trait>はどのようにそれ自体を脱構築しますか?

  24. 24

    Portageは更新時に完全なパッケージを再構築しますか?

  25. 25

    @EmbeddedIdはどのように複合主キーを構築しますか?

  26. 26

    WiresharkはHTTPフローをどのように構築していますか?

  27. 27

    ECMAscriptは関数を構築する方法を提供しますか?

  28. 28

    ACPI BIOSは起動時に何を構成しますか?

  29. 29

    バージョンを更新するたびに、VLCの「フォントキャッシュの構築」は何をしますか?

ホットタグ

アーカイブ