2016-10-12 6 views
0

getstaticの形式は次のとおりです。getstatic <spec-field> <descriptor> spec-fieldは、われわれが望むフィールドです。しかし、なぜdescriptorが必要ですか?jvmのGetstatic

答えて

0
  • Java言語仕様とは異なり、JVM仕様では、同じ名前で複数のフィールド(記述子)を持つ複数のフィールドを持つことができます。
  • Javaは静的に型付けされているため、getfield/getstaticバイトコードは、処理するフィールドのタイプを何とか指定する必要があります。フィールドは名前と型のペアで識別されるため、型は明白になります。さもなければ、異なるフィールドタイプに対して異なるバイトコードが必要となる。
  • AクラスBfフィールドを参照するとします。名前と記述子でフィールドをアドレス指定する方法では、fのタイプが変更され、BクラスがAから独立して再コンパイルされると、いくつかの問題が解決されます。
+1

原則として、新しいバイトコードを導入する必要なしに、フィールドのタイプを推論することができます。しかし、これは、フィールドアクセスを含むコードを検証するには、フィールドの型を取得するために、フィールドの所有者クラスをロードしなければならないことを意味します。今のように、コードの正しさはリンケージの前に確認することができます。 – Holger