静态常量不能反编译
???? 近期项目中需要反编译修改多年前的class文件,经过反编译并修改后,用Eclipse编译和java命令行得到的class文件不同,对新class文件反编译后如下:
?
?
????
??? 用Eclipse编译的class文件反编译:
package com.langchao.kpiengine.builder.baskpi;import com.langchao.kpiengine.model.common.BasDimensionType;import com.langchao.kpiengine.model.common.Kpi;import com.langchao.kpiengine.model.common.KpiRelation;import com.langchao.kpiengine.model.common.UnitKpi;import com.langchao.kpiengine.search.BasKpiDefine;import com.langchao.kpiengine.util.KpiConfigHelper;import com.langchao.kpiengine.xml.digester.DigesterUtil;import com.langchao.kpiengine.xml.digester.KpiDigester;import com.langchao.kpiengine.xml.digester.KpiDigesterFactory;import java.util.ArrayList;import java.util.Collection;import java.util.Iterator;import java.util.List;import java.util.Map;import org.apache.commons.logging.Log;import org.apache.commons.logging.LogFactory;public class BasKpiDefineDaoXmlImpl implements BasKpiDefineDao{ private static Log log = LogFactory.getLog("KpiQueryService"); public static final String RULE_CONFIG; public static final String DEFINE_CONFIG; private BasKpiDefine basKpiDefine; static Class class$0; // ERROR // static { // Byte code: // 0: ldc 20 // 2: invokestatic 22org/apache/commons/logging/LogFactory:getLog(Ljava/lang/String;)Lorg/apache/commons/logging/Log; // 5: putstatic 28com/langchao/kpiengine/builder/baskpi/BasKpiDefineDaoXmlImpl:logLorg/apache/commons/logging/Log; // 8: new 30java/lang/StringBuffer // 11: dup // 12: getstatic 32com/langchao/kpiengine/builder/baskpi/BasKpiDefineDaoXmlImpl:class$0Ljava/lang/Class; // 15: dup // 16: ifnonnull +28 -> 44 // 19: pop // 20: ldc 34 // 22: invokestatic 36java/lang/Class:forName(Ljava/lang/String;)Ljava/lang/Class; // 25: dup // 26: putstatic 32com/langchao/kpiengine/builder/baskpi/BasKpiDefineDaoXmlImpl:class$0Ljava/lang/Class; // 29: goto +15 -> 44 // 32: new 42java/lang/NoClassDefFoundError // 35: dup_x1 // 36: swap // 37: invokevirtual 44java/lang/Throwable:getMessage()Ljava/lang/String; // 40: invokespecial 50java/lang/NoClassDefFoundError:<init>(Ljava/lang/String;)V // 43: athrow // 44: invokevirtual 54java/lang/Class:getPackage()Ljava/lang/Package; // 47: invokevirtual 58java/lang/Package:getName()Ljava/lang/String; // 50: invokestatic 63java/lang/String:valueOf(Ljava/lang/Object;)Ljava/lang/String; // 53: invokespecial 69java/lang/StringBuffer:<init>(Ljava/lang/String;)V // 56: ldc 70 // 58: invokevirtual 72java/lang/StringBuffer:append(Ljava/lang/String;)Ljava/lang/StringBuffer; // 61: invokevirtual 76java/lang/StringBuffer:toString()Ljava/lang/String; // 64: putstatic 79com/langchao/kpiengine/builder/baskpi/BasKpiDefineDaoXmlImpl:RULE_CONFIGLjava/lang/String; // 67: new 30java/lang/StringBuffer // 70: dup // 71: getstatic 32com/langchao/kpiengine/builder/baskpi/BasKpiDefineDaoXmlImpl:class$0Ljava/lang/Class; // 74: dup // 75: ifnonnull +28 -> 103 // 78: pop // 79: ldc 34 // 81: invokestatic 36java/lang/Class:forName(Ljava/lang/String;)Ljava/lang/Class; // 84: dup // 85: putstatic 32com/langchao/kpiengine/builder/baskpi/BasKpiDefineDaoXmlImpl:class$0Ljava/lang/Class; // 88: goto +15 -> 103 // 91: new 42java/lang/NoClassDefFoundError // 94: dup_x1 // 95: swap // 96: invokevirtual 44java/lang/Throwable:getMessage()Ljava/lang/String; // 99: invokespecial 50java/lang/NoClassDefFoundError:<init>(Ljava/lang/String;)V // 102: athrow // 103: invokevirtual 81java/lang/Class:getName()Ljava/lang/String; // 106: invokestatic 63java/lang/String:valueOf(Ljava/lang/Object;)Ljava/lang/String; // 109: invokespecial 69java/lang/StringBuffer:<init>(Ljava/lang/String;)V // 112: ldc 82 // 114: invokevirtual 72java/lang/StringBuffer:append(Ljava/lang/String;)Ljava/lang/StringBuffer; // 117: invokevirtual 76java/lang/StringBuffer:toString()Ljava/lang/String; // 120: putstatic 84com/langchao/kpiengine/builder/baskpi/BasKpiDefineDaoXmlImpl:DEFINE_CONFIGLjava/lang/String; // 123: return // // Exception table: // fromtotargettype // 202532java/lang/ClassNotFoundException // 798491java/lang/ClassNotFoundException}??
?
用java命令行执行(如图):
?
C:\j2sdk1.4.2_16\bin>javac
–classpath .;kpimodelbuild.jar;commons-logging.jar;kpimodel.jar;commons-digester.jar;sax.jar;zhibiaoutil.jar
?BasKpiDefineDaoXmlImpl.java
?
对用命令行新生成的class反编译:
?
package com.langchao.kpiengine.builder.baskpi;import com.langchao.kpiengine.model.common.BasDimensionType;import com.langchao.kpiengine.model.common.Kpi;import com.langchao.kpiengine.model.common.KpiRelation;import com.langchao.kpiengine.model.common.UnitKpi;import com.langchao.kpiengine.search.BasKpiDefine;import com.langchao.kpiengine.util.KpiConfigHelper;import com.langchao.kpiengine.xml.digester.DigesterUtil;import com.langchao.kpiengine.xml.digester.KpiDigester;import com.langchao.kpiengine.xml.digester.KpiDigesterFactory;import java.util.ArrayList;import java.util.Collection;import java.util.Iterator;import java.util.List;import java.util.Map;import org.apache.commons.logging.Log;import org.apache.commons.logging.LogFactory;public class BasKpiDefineDaoXmlImpl implements BasKpiDefineDao{ private static Log log = LogFactory.getLog("KpiQueryService"); public static final String RULE_CONFIG = BasKpiDefineDaoXmlImpl.class.getPackage().getName() + ".ruleconfig"; public static final String DEFINE_CONFIG = BasKpiDefineDaoXmlImpl.class.getName() + ".defineconfig"; private BasKpiDefine basKpiDefine;?
?
经比对,Eclipse生成的对应的public static final String 静态常量的值在反编译后都没有了,而使用java命令行的反编译后正常。
问题找到了,但是原因未知。
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?