众所周知,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,并打开:

如何利用Idea 反编译Java class文件

如图所示,是一堆乱码。

3. 复制.class文件到 .java项目目录

如何利用Idea 反编译Java class文件

关于找到.java项目目录,戳这【IDEA中,如何找到文件所在位置】

复制完回到IDEA中,项目列表上发现多了个SwitchDemo02.class文件。

如何利用Idea 反编译Java 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文件的方法。

文章目录