JVM虛擬機-Class文件之訪問標誌

一、訪問標誌的概念

常量池結束之後,緊接着的兩個字節代表訪問標誌,這個標誌用於識別一些類或者接口層次的訪問信息,包括:這個Class是接口還是類;是否被定義爲public類型;是否定義爲abstract類型;如果是類的話,是否被聲明爲final等。

access_flages中共有兩個字節(16位)可以使用,沒有使用到的標誌爲要求一律爲0。如果有多個訪問標誌,那通過“OR”的方式組合在一起。

二、訪問標誌具體含義

標誌名稱  標誌值 含義
ACC_PUBLIC 0x00 01 是否爲Public類型
ACC_FINAL 0x00 10 是否被聲明爲final,只有類可以設置
ACC_SUPER 0x00 20 是否允許使用invokespecial字節碼指令的新語義.
ACC_INTERFACE 0x02 00 標誌這是一個接口
ACC_ABSTRACT 0x04 00 是否爲abstract類型,對於接口或者抽象類來說,次標誌值爲真,其他類型爲假
ACC_SYNTHETIC 0x10 00 標誌這個類並非由用戶代碼產生
ACC_ANNOTATION 0x20 00 標誌這是一個註解                                                                             
ACC_ENUM            0x40 00 標誌這是一個枚舉

三、實例分析

案例一

定義一個類:

public class HelloWord {
}

00 21可以推斷是由ACC_PUBLIC和ACC_SUPER通過OR組合而成。

通過命令javap -verbose  HelloWord.class來查看,發現確實是 ACC_PUBLIC, ACC_SUPER組合而成:

案例二

定義一個接口:

public interface HelloWord {
}

06 01又是怎麼組合的呢?通過命令javap -verbose  HelloWord.class來查看,發現是 ACC_PUBLIC, ACC_INTERFACE, ACC_ABSTRACT組合而成:

參考資料:

  1. https://blog.csdn.net/IT_GJW/article/details/80447947
  2. https://www.cnblogs.com/yanze/p/9722956.html
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章