java编译基础总结

来源:互联网 发布:windows 10不能玩魔兽 编辑:程序博客网 时间:2024/06/07 00:49

          平台无关性是java中最重要的特性之一,借着学习JVM的机会,对一些基础内容进行回顾和总结。

         

           一. java文件和class文件

            java后缀的文件是我们的本地文件,当我们创建并保存一个类或接口的时候,就会在本地相应路径下生成该文件,它的主要作用就是持久化我们所写的java代码。相对应的,class后缀的文件则是经过编译的java文件,它以字节码的形式存储了我们所编写的代码。我们运行一个java程序的时候,运行的就是class文件而不是java文件。为什么在java的机制中要先编译一个class,再运行class文件而不是直接运行java文件呢?这是因为不同的系统有自己特有的机器码形式,比如在windows下编写的程序在linux下运行可能会产生异常。举个通俗点的例子,同样的游戏为什么要出安卓版本和IOS版本的呢?就是这个原因。而class文件保存了一种通用的字节码,它拥有一个统一的标准,通过JVM(java虚拟机)来统一解释并将这些字节码转换成与平台相对应的机器码。这样就实现了一次编译,随处执行。但是同一个java程序要在不同的平台上执行有一个前提,就是平台上必须安装了JVM。


           二.文件的编译与反编译

            eclipse支持自动编译: project - build automatically,把这个选项勾上就可以了。eclipse会在每次保存文件时自动对文件进行编译。除此之外,eclipse中也可以手动的对项目进行编译,将上述勾选了的自动编译去除,右击项目时就能看到Build Project选项了,点击即可。另外,从手动编译切换为自动编译时,eclipse也会对当前工作空间中的所有文件进行编译。由于IDE简单易用高效,已经被大量普及,现在开发中文件的编译工作基本都由IDE直接搞定,很少会有人用java命令行方式来编译文件了。但是使用IDE有利有弊,好处是不需要关心开发之外的事务,同时也防止了由于人为疏忽而产生的一些问题,坏处就是影响了我们对java基本运作机制的正常认知,当不使用IDE时容易踩坑...


            2.使用java命令进行编译

             脱离IDE对文件进行编译相对来说会繁琐些,但这是学习java、深入了解java机制中很重要的一环。以windows为例,使用java命令前首先要确认java环境变量是否正确配置,尤其是使用Myeclipse的朋友,因为使用Myeclipse是不需要配置环境的。具体怎么配置网上有很多,在此不再赘述。配置完后,我们先创建一个简单的java文件:     

public class test {public static void main(String[] args) {int time = 10;if(time>18){                   System.out.println("下班啦!");                }else{                   System.out.println("继续干....");                }        }}
             这个java文件存放在D盘根目录下。先在命令提示符中切进D盘根路径,然后使用javac命令来进行编译,输入:javac -encoding UTF-8 test.java,回车执行后D盘根目录下就会生成一个与test.java对应的class文件。要注意的是,windows下默认的编码格式是GBK,但现在java一般都是用的是utf-8的编码,所以编译的时候需要用-encoding 来指定utf-8编码,否则编译出的文件中的中文会乱码。当然即使正常编译完了,如果使用Notepad等文档编辑工具打开也会显示乱码,这是因为此时的文件内容是以字节码的形式存储的,想要查看class文件可以通过反编译工具来进行。

             java命令中除了javac外还有两个比较基本和常用的命令:java 和 javap。java命令主要用于在命令提示符中执行java程序,以test类为例,当编译完成后继续执行:java  test 即可,运行结果如下图:


             好吧....继续干。javap命令可以用来输出java的字节码,之前有说过,通过文档的方式无法正常查看class文件,那么想查看字节码的话可以使用javap命令,输入:javap -c test ,


              code部分开始就是文件的字节码,学习并理解编译后的字节码对深入了解JVM来说是那是极好的 :)


              3.eclipse中的build和clean

              在eclipse中build选项就是用来编译class文件的,而clean选项则是用来清除已经编译的class文件的。当勾选上自动编译选项时,clean完之后eclipse会自动对该项目进行再次编译,而在手动编译模式下,可以选择是否只是clean项目而不进行编译。对于为什么要clean,网上的说法是:“由于eclipse的编译是基于时间戳的判断机制的。因此当你按build all的时候有些eclipse认为时间戳没有改变的类不会被编译。因此你可以先clean一下再编译。这个时候eclipse会将所有的以前编译信息清除然后编译。”

             

                另外,有兴趣详细了解配置java环境时那些变量值作用的话,可以参考这篇博文,讲的比较详细:http://www.hello-code.com/blog/java/201404/3225.html

0 0
原创粉丝点击