Java编译与反编译中的汉字乱码(IDEA反编译不要使用IntelliJ)
一、什么是编译与反编译
简单来讲,编译就是把.java文件生成为.class文件,反编译就是把.class生成为.java文件。如果看到这里你已经懂了就可以看第二大部分了,不然就再听我絮叨一下。
我们编程的时候主要是写一个个.java文件,以及围绕它的相关配置。但是.java文件不可以直接被执行,它的需要被编译成.class文件,才能够运行在不同的JVM上。.class文件即为JVM可运行的二进制文件。
二、反编译工具
反编译的工具主要用来打开.class文件,展示.java文件的内容,而不是像上文文字字面描述的那样,真正地生成一个.java文件。生成的.java文件与原.java文件可能内容有点出入,但是不妨碍主要内容的理解。
一般是三个工具应用比较广泛:Java Decompiler、IntelliJ IDEA、IntelliJ Eclipse。
Java Decompiler百度经验上就有使用方法,这里不赘述。传送门
IntelliJ IDEA,主要说一下这个,其实主要是说为什么不用它。如果你像我一样使用IDEA,其实就可以直接打开.class文件,如下图。
但是,如果你下载了IntelliJ IDEA插件,并使用它,那么你就会发现,用了还不如不用…之前可以看到的代码都看不了了。所以这里也不交给大家怎么下这个插件了,留给自己点快乐,好么?
三、汉字在编译时的注意事项
- 编译含有中文的java文件使用utf-8的方式进行编码
- windows上编写代码时不要用记事本的方式打开
编译这一步虽然简单,看起来就是在IDE上点击个按钮的事情,但是还是有坑的。当然上述的注意事项前提,是你的代码编写正确。
1、为什么 & 如何指定编译时的编码方式?
为什么?windows使用的编码方式是GB 2312,而JVM的编码方式为Unicode。如果不太清除编码方式是什么,可以把它当作一种由java语言翻译成机器语言的规则,规则不同,交流的时候就出现的问题,尤其是在文件中出现中文的时候。有人问,UTF-8和Unicode听起来还是不同的,但是UTF-8是Unicode的一种实现方式,UTF-8可以在编译过程中编译汉字,并且编译结果被JVM所识别,但是Unicode不可以。
如果你使用命令行,使用命令
javac -encoding 编码方式 类名.java
示例,注意,需要在命令行中进入类文件所在的路径下,才可以执行这个命令。
如果使用IDEA,它编译是默认的编码方式就是utf-8,如何查看IDEA编码格式,传送门。
2、为什么不用记事本打开?
Windows的纯文本编译器会在文档头加上BOM,javac看到BOM会无法编译。并且,使用现成的IDE不快乐么?实在不行,notepad++考虑一下啊。
作者:zhanggonglalala
来源链接:https://blog.csdn.net/zhanggonglalala/article/details/103032618
版权声明:
1、JavaClub(https://www.javaclub.cn)以学习交流为目的,由作者投稿、网友推荐和小编整理收藏优秀的IT技术及相关内容,包括但不限于文字、图片、音频、视频、软件、程序等,其均来自互联网,本站不享有版权,版权归原作者所有。
2、本站提供的内容仅用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律的规定,不得侵犯相关权利人及本网站的合法权利。
3、本网站内容原作者如不愿意在本网站刊登内容,请及时通知本站(javaclubcn@163.com),我们将第一时间核实后及时予以删除。