例子二:不带参数创建对象 反编译过来的代码如下: JVM INSTR new #244 <Class CrossTable>; JVM INSTR dup ; JVM INSTR swap ; CrossTable(); CrossTable crosstable; crosstable;
原始语句: CrossTable crosstable = new CrossTable(); 注解: 练习: JVM INSTR new #246 <Class Database>; JVM INSTR dup ; JVM INSTR swap ; Database(); Object obj; obj;
例子三:带参数创建对象 反编译过来的代码如下: JVM INSTR new #262 <Class StringBuffer>; JVM INSTR dup ; JVM INSTR swap ; String.valueOf(s2); StringBuffer(); s.substring(j, i); append(); s6; append(); toString(); s2; 原始语句: s2 = (new StringBuffer(String.valueOf(s2))).append(s.substring(j, i)).append(s6).toString(); 注解: 此语句实际上是:s2 += s.substring(j, i) + s6; 练习:
例子四:for循环 反编译过来的代码如下: int k = 0; goto _L4 _L8: ... k++; _L4: if(k < as.length) goto _L8; else goto _L7
原始语句: for(int k=0;k < as.length;k++) { ... } 注解:
例子五:while循环 反编译过来的代码如下: String s1 = ""; goto _L1 _L3: JVM INSTR new #262 <Class StringBuffer>; JVM INSTR dup ; JVM INSTR swap ; String.valueOf(s1); StringBuffer(); _$2(resultset, s, l); append(); toString(); s1; _L1: if(resultset.next()) goto _L3; else goto _L2
原始语句: String s1 = ""; while(resultset.next()) { s1 = s1 + resultSetToString(resultset, s, l);
}
本文通过多个实例详细解析了反编译后的代码如何对应到原始的Java代码中,包括变量赋值、对象创建、循环结构等核心内容,并提供了练习帮助理解。





