JVM虛擬機-Class文件之屬性表集合

一、概述

在class文件中,屬性表集合包括Java虛擬機預先規範定義的屬性以及用戶自定義的屬性,對於用戶自定義的屬性,虛擬機加載的時候會自動忽略掉。class文件、字段表、方法表都可以攜帶自己的屬性表集合,便於描述某些場景專有的信息。

二、組成

虛擬機中預定義的屬性有:

屬性名稱 使用位置 含義
Code 方法表 Java代碼編譯成的字節碼指令
ConstantValue 字段表 final關鍵字定義的常量池
Deprecated 類,方法,字段表 被聲明爲deprecated的方法和字段
 Exceptions 方法表  方法拋出的異常 
 EnclosingMethod 類文件  僅當一個類爲局部類或者匿名類是才能擁有這個屬性,這個屬性用於標識這個類所在的外圍方法 
 InnerClass 類文件  內部類列表 
 LineNumberTable Code屬性  Java源碼的行號與字節碼指令的對應關係 
 LocalVariableTable Code屬性  方法的局部便狼描述 
 StackMapTable Code屬性  JDK1.6中新增的屬性,供新的類型檢查檢驗器檢查和處理目標方法的局部變量和操作數有所需要的類是否匹配 
 Signature 類,方法表,字段表   用於支持泛型情況下的方法簽名
 SourceFile 類文件  記錄源文件名稱 
 SourceDebugExtension 類文件  用於存儲額外的調試信息 
 Synthetic 類,方法表,字段表  標誌方法或字段爲編譯器自動生成的 
 LocalVariableTypeTable 類  使用特徵簽名代替描述符,是爲了引入泛型語法之後能描述泛型參數化類型而添加 
 RuntimeVisibleAnnotations 類,方法表,字段表  爲動態註解提供支持 
 RuntimeInvisibleAnnotations 表,方法表,字段表  用於指明哪些註解是運行時不可見的 
 RuntimeVisibleParameterAnnotation 方法表  作用與RuntimeVisibleAnnotations屬性類似,只不過作用對象爲方法
 RuntimeInvisibleParameterAnnotation   方法表  作用與RuntimeInvisibleAnnotations屬性類似,作用對象哪個爲方法參數
 AnnotationDefault  方法表 用於記錄註解類元素的默認值 
 BootstrapMethods 類文件  用於保存invokeddynamic指令引用的引導方式限定符  

屬性表的結構attribute_info

attribute_info{
    attribute_name_index//屬性的名稱索引(指向常量池)2個字節
    attribute_length//屬性長度 4個字節
    info//有attribute_length個字節屬性值
}

三、常見屬性介紹

Code屬性

Exceptions屬性

LineNumberTable屬性

LocalVariableTable屬性

SourceFile屬性

ConstantValue屬性

InnerClass屬性

屬性表這部分內容比較多,也比較複雜,暫時先記錄到這裏。

參考資料:

  1. https://www.cnblogs.com/lrh-xl/p/5351182.html
  2. https://blog.csdn.net/xiaoqiu_cr/article/details/86774074
  3. https://blog.csdn.net/qq_38526573/article/details/88541241
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章