计算机的文件分为字符文件和字节文件
首先需要说明的是:计算机的文件类型分为两类:字符文件和字节(二进制)文件。最常用的字符文件如.txt
文件。它直接存储着人可以识别的文字。(汉语,英语,符号等)
但是计算机将所有的数据都视为0或1,它本身并不识别这些字符,那就需要把这些字符转换成字节格式,这个过程为编码。反过来,将字节按照一定规则翻译成字符的过程称之为解码。(下文也许还会称反编码,反编译,解码)
而计算机中大部分的文件:诸如电影,音乐,图像等文件无法用简单的字符文件格式保存。因此这些文件都是字节文件保存的,而多媒体处理软件会用avi, mp3, mp4, jpeg等编码格式规定了应该如何浏览它们。如何编码,就应当如何解码,这才能还原文件内容。
.java
文件属于和.txt
同类型的字符文件。因此程序员只需像写文章一样构建代码即可,避免了用复杂的01代码来编写程序。(想想都害怕)
javac承担了编译的任务,将其转换成了.class
文件。显然.class
文件是给JVM”读”的,而程序员早就在编写.java
文件的时候就设定了这个程序的功能,因此他现在只要将.class
文件交给JVM运行就可以了。
我很好奇.class文件里写了哪些内容!
但是若直接打开.class
文件,那么结果会令人失望:里面大部分的内容都是乱码。为什么会这样?正如之前所述:怎么将它编译的,就应当怎么将它解码。可是电脑并不知道javac是如何编译它的。(大部分人也不知道,但是至少JVM知道)
因此若直接以txt文本的形式将.class
字节文件打开,计算机只好按它认为正确的方式去解码,但很显然它解码地并不对。
所以如果你想一窥.class
文件的真面目:不妨去试试一些软件,它们如果知道javac是何种方式编译的,就可以“反其道行之”,将其反编译。Jd-gui.exe就是一个这样的反编译器:它能精准翻译绝大部分的内容,同时也提供将.class
文件反向输出为.java
文件的功能。
附上一个传送门:
[1]java反编译原理浅析