使用javap進行反編譯Java枚舉

這是一個枚舉類Day.javahtml

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.javajava

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

再執行:javap -p Day.class   spa

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枚舉類不能被繼承code

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

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

Java枚舉的簡單例子:http://www.javashuo.com/article/p-qfipbdfg-gh.html繼承

相關文章
相關標籤/搜索