众所周知,java程序要想执行,一定是生成了一个.class
结尾的文件。
而这些.class
文件是字节码文件,打开查看人是看不懂的,一堆乱码,.class
文件得经过反编译才有可读性。
关于如何查找以前IDEA下的项目class文件的保存位置,可以看idea tips 里的:【IDEA中找到.class生成位置的方法】
1. 新建一个SwitchDemo02
.java
package com.zctou.structure;
public class SwitchDemo02 {
public static void main(String[] args) {
String keyword = "再重头";
switch (keyword) {
case "再重头" :
System.out.println("zctou.com 再生头");
break;
case "再回首" :
System.out.println("zctou.com 再回首");
break;
default:
System.out.println("不是zctou.com 首页关键字");
}
}
}
2. build生成.class,并打开:
如图所示,是一堆乱码。
3. 复制.class文件到 .java项目目录
关于找到.java项目目录,戳这【IDEA中,如何找到文件所在位置】
复制完回到IDEA中,项目列表上发现多了个SwitchDemo02.class
文件。
双击打开,即可得到反编译代码,这例子如下:
//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by FernFlower decompiler)
//
package com.zctou.structure;
public class SwitchDemo02 {
public SwitchDemo02() {
}
public static void main(String[] args) {
String keyword = "再重头";
byte var3 = -1;
switch(keyword.hashCode()) {
case 20791493:
if (keyword.equals("再回首")) {
var3 = 1;
}
break;
case 21242708:
if (keyword.equals("再重头")) {
var3 = 0;
}
}
switch(var3) {
case 0:
System.out.println("zctou.com 再生头");
break;
case 1:
System.out.println("zctou.com 再回首");
break;
default:
System.out.println("不是zctou.com 首页关键字");
}
}
}
可以看到反编译后的代码里, 多了个switch case语句,用的是string的hashCode
来指定对应的字符串。
以上就是利用IDEA反编译.class文件的方法。