因为在看java编程思想,看到String章节,发现一个命令javap,可以反编译看汇编代码,进行代码的可行性优化。

自己心血来潮,在自己的IDEA中想试一试,不想使用cmd命令。正所谓,君子性非异也,善假于物也。废话不多说了。

按照网上的方法,在IDEA添加了External Tools,如图:

java反射找一个类的子类 java反射找不到类_反编译

之后我兴高采烈的去,找个类进行,试验一下,结果:

java反射找一个类的子类 java反射找不到类_反编译_02

找不到目标类,很疑惑,去网上找解决的办法,无果而归。然后自己摸索,发现这样也可以。

首先,我们知道javap命令是用来反编译class文件的,不是java源文件,一定不要颠倒乾坤了。

平时我们使用命令反编译是这样做的,首先编写一个java代码文件,之后javac编译成class文件,然后使用javap来反编译class文件。

1、在当前class所在目录打开cmd命令窗口反编译

java反射找一个类的子类 java反射找不到类_反编译_03

发现很容易就成功了。

2、不在当前class文件目录打开cmd呢?我在开始搜索框中直接打开,按着思路试了一下

java反射找一个类的子类 java反射找不到类_后缀_04

 发现失败了,也出现找不到类的问题。为什么呢?在文件后面加上.class后缀如何

java反射找一个类的子类 java反射找不到类_java反射找一个类的子类_05

加上之后成功了,欣喜若狂,不能自己。

回到IDEA,想一想,你是不是有所发现,有点感觉

 

java反射找一个类的子类 java反射找不到类_反编译_06

找不到类。为什么呢?是不是文件没有加.class后缀:

java反射找一个类的子类 java反射找不到类_java_07

 结果还是失败,还是没有找到类。What!!

难道,是不是我反编译的命令执行的所在文件路径,和目标class文件不再一个文件中,嗯,有可能,那我们就用绝对路径加.class后缀试试:

java反射找一个类的子类 java反射找不到类_反编译_08

发现好使,可以反编译,激动的心,颤抖的手。

再次提醒,javap反编译,目标文件是.class字节码文件,不是.java源文件。

我的IDEA是2019.2版本的,目前自己摸索的这种解决找不到类的方法,仅供参考,希望对朋友有所帮助。

水平有限,如有瑕疵,望不吝赐教。