zoukankan      html  css  js  c++  java
  • 使用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

  • 相关阅读:
    深入理解DB2缓冲池(BufferPool)
    收银台采坑总结
    webpack4的总结
    无心法师-讲解
    cache 缓存的处理
    用es6方式的写的订阅发布的模式
    Skeleton Screen -- 骨架屏--应用
    promise实现原理
    业务线移动端适配方案总结
    vdom,diff,key 算法的了解
  • 原文地址:https://www.cnblogs.com/theRhyme/p/10192330.html
Copyright © 2011-2022 走看看