都说程序最终会被编译成class二进制文件,供计算机读取。
但是为什么有时候我们看到的.class文件和java文件没区别呢?class文件难道不是二进制文件?
要是用一般的文本工具打开.class文件的话确实会是一堆乱码,而用开发工具打开.class的话,开发工具会给你反编译一遍,所以看起来就是正常代码了,用不同的工具打开class文件,显示的也不一样。class文件是二进制文件,是供机器读的,但我们看时,用不同的编辑器打开,看到的也是不一样的。class文件反编译后也可以是正常代码。
当我们要引用别人封装好打包过来的jar包里的类时,我们用CTRL+SHIFT+R是找不到的,这是为什么呢?
所谓的依赖包(比如说jar包),也不过就是另外一个人写的java程序,然后打包给我们用而已,里面当然也是java编译后的.class文件。就比如你这个程序要是打包了,别人用起来也就是依赖包了。
类找不到原因是因为CTRL+SHIFT+R只会找源文件里面是否有该类,没有的话是找不到的。找不到,系统又用到了该类的话,该类就有可能是引用已封装好的类,该类有可能配置在lib下的jar包里,在项目加载时才会启动,故找不到。但是可以在 web app libraries 下找到.class文件,若.class被反编译过了,就可以看源码了。
class文件为什么不是二进制,为什么可读?
因为class文件用开发工具打开是被反编译过的。