线索如下:
package com.zhi.learnj2; import java.util.Date; import com.zhi.utils.DateUtil; public enum ConstantSpecificMethod { DATE_TIME { @Override public String info() { return DateUtil.format(new Date()); } }, CLASS_PATH { @Override public String info() { return System.getenv("CLASS_PATH"); } }, USERNAME { @Override public String info() { return "jackiezhi"+ordinal(); } }, VERSION { @Override public String info() { System.out.println(username); fun(); System.out.println("username is null ??? why"); return null; } }; public abstract String info(); public void fun(){ System.out.println(username); } protected String username; public static void main(String[] args){ System.out.println("-----jackiezhi-----"); for(ConstantSpecificMethod m: ConstantSpecificMethod.values()){ System.out.println(m.info()); } } } 对ConstantSpecificMethod.class文件进行反编译后,结果如下。 public abstract class com.zhi.learnj2.ConstantSpecificMethod extends java.lang.E num<com.zhi.learnj2.ConstantSpecificMethod> { public static final com.zhi.learnj2.ConstantSpecificMethod DATE_TIME; public static final com.zhi.learnj2.ConstantSpecificMethod CLASS_PATH; public static final com.zhi.learnj2.ConstantSpecificMethod VERSION; static {}; public abstract java.lang.String info(); public static com.zhi.learnj2.ConstantSpecificMethod[] values(); public static com.zhi.learnj2.ConstantSpecificMethod valueOf(java.lang.String) ; com.zhi.learnj2.ConstantSpecificMethod(java.lang.String, int, com.zhi.learnj2. ConstantSpecificMethod); }
发现并没有关于
DATE_TIME { @Override public String info() { return DateUtil.format(new Date()); } },
这些代码,那么代码藏在了哪里,
D:\Code\LearnJ\bin>javap com.zhi.learnj2.ConstantSpecificMethod$1 Compiled from "ConstantSpecificMethod.java" class com.zhi.learnj2.ConstantSpecificMethod$1 extends com.zhi.learnj2.ConstantS pecificMethod { com.zhi.learnj2.ConstantSpecificMethod$1(java.lang.String, int); public java.lang.String info(); }
终于找到了。