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

  • 相关阅读:
    shell if 条件语句实践
    shell函数
    透视财富增长的秘密
    kvm虚拟化实践
    Linux驱动编程--基于I2C子系统的I2C驱动
    Makefile中=、:=、+=、?=的区别
    字符设备驱动结构与开发
    驱动分类
    为什么ARM的frq中断的处理速度比较快
    Linux设备驱动01
  • 原文地址:https://www.cnblogs.com/theRhyme/p/10192330.html
Copyright © 2011-2022 走看看