使用javap進行反編譯Java枚舉


這是一個枚舉類Day.java

public enum Day {
    MONDAY("星期一"),
    TUESDAY("星期二"),
    WEDNESDAY("星期三"),
    THURSDAY("星期四"),
    FRIDAY("星期五"),
    SATURDAY("星期六"),
    SUNDAY("星期天");

    /**
     * 中文描述
     */
    private String desc;

    public String getDesc() {
        return desc;
    }

    /**
     * 私有構造方法,防止被外部調用
     * @param desc
     */
    private Day(String desc) {
        this.desc = desc;
    }

}

進入到這個文件目錄下編譯該文件:javac -encoding UTF-8 Day.java

這時候,該目錄會有一個Day.class編譯后的字節碼文件;

再執行:javap -p Day.class   

Compiled from "Day.java"
public final class Day extends java.lang.Enum<Day> {
  public static final Day MONDAY;
  public static final Day TUESDAY;
  public static final Day WEDNESDAY;
  public static final Day THURSDAY;
  public static final Day FRIDAY;
  public static final Day SATURDAY;
  public static final Day SUNDAY;
  private java.lang.String desc;
  private static final Day[] $VALUES;
  public static Day[] values();
  public static Day valueOf(java.lang.String);
  public java.lang.String getDesc();
  private Day(java.lang.String);
  static {};
}

可以看到,public enum Day定義一個枚舉類,反編譯之后看到public final class Day extends java.lang.Enum<Day>Java枚舉類不能被繼承

每一個枚舉都是public static final只能被賦值一次,大概就是這些,如果想看更加詳細的反編譯可執行:javap -c Day (這里不要寫文件后綴.class);

反編譯可以輸出常量池的信息以及元素個數:javap -verbose Day.class

Java枚舉的簡單例子:https://www.cnblogs.com/theRhyme/p/9996966.html

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM