仮想マシンJVM ---(9)クラスインデックスファイルの構造など、親のインデックス・インタフェースインデックスセット

免責事項:この記事はブロガーオリジナル記事です、続くBY-SAのCC 4.0を著作権契約、複製、元のソースのリンクと、この文を添付してください。
このリンク: https://blog.csdn.net/qq1021979964/article/details/97129033

クラスインデックス(this_class)と親インデックス(super_class)U2は、データのタイプであり、インターフェースインデックスセット(インターフェイス)は、データ型U2の集合である、クラスのクラスファイルが3のデータによって決定されます継承。

 

  1. クラスインデックス

クラスの完全修飾名を決定するためのクラスのインデックス。

  1. 親インデックス

親クラスの完全修飾名を決定するための親のインデックス。

Java言語は多重継承を許可していませんので、そのインデックスは、java.lang.Objectのに加えて、唯一の親です。

すべてのJavaは、親インデックスJavaクラスのすべてがゼロと異なっている、java.lang.Objectのに加えて、親クラスを持っています。

  1. インターフェイスインデックスセット

       インターフェースインデックスセットインタフェースを実装するクラスを記述するために使用され、これらのインタフェースが実装されている文を実装するであろう(クラスがインタフェース自体である場合、句を拡張しなければならない)インターフェースインデックスセット内の左から右へ順番後インターフェイスクラスは、任意のインターフェースを実装していない場合、カウンタはゼロです。

 

クラスインデックス、インデックス設定されたインデックス親クラス・インターフェースが順次アクセスフラグの後に配置されており、インデックスの親クラスインデックス

指標値の二つのタイプは、多くの場合、クラスの型記述子を指す各々は、U2を表しCONSTANT_Class_info

量は、指標値CONSTANT_Class_infoタイプによって定義された定数は、に見出すことができます

CONSTANT_Utf8_infoタイプ定数完全修飾名の文字列。

ケース

public class TestConstant {

    private final int a = 10;
    private final int b = 10;
    private int c = 11;
    private int d = 11;
    private long e = -11111110005514L;
    private long f = -11111110005514L;
    private double g = 10.4557848D;
    private double h = 10.4557848D;
    private String y = "JVM";
    private String j = "JVM";

}

オープンウルトラエディットを使用して、クラスファイルにコンパイルした後、それはJavaのバイトコードをコンパイルすることができます

       由此可以得知类索引为0x0011(对应的十进制值为17),父类索引是0x0012(对应的十进制值为18),接口索引0x0000(对应的十进制值为0,则就是没有)。

类索引和父类索引对应了第17和第18个常量池,得出类是TestConstant,父类是Object,(没有显式继承任何类,默认是继承Object父类)。

おすすめ

転載: blog.csdn.net/qq1021979964/article/details/97129033