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
- java编译基础总结
- 黑马程序员--Java基础加强--08.【javac兼容编译原则】【可变参数数组编译】【个人总结】
- java编译问题总结
- 【总结】Java基础总结⑵
- 【总结】Java基础总结⑶
- 【总结】Java基础总结⑷
- 【总结】Java基础总结⑸
- 【总结】Java基础总结⑹
- 【总结】Java基础总结⑺
- java基础的总结
- java基础总结知识点
- JAVA基础总结
- java基础总结
- Java基础小小总结
- Java基础概念总结
- Java语言基础总结
- java基础总结
- Java基础学习总结
- C++:google style 强制类型转换
- Linux设备驱动之——I2C总线
- HDU 1106 排序(atoi函数和strtok函数)
- ZOJ1649Rescue
- Activity生命周期和启动模式
- java编译基础总结
- Mts视频丢失损坏的恢复修复
- Xcode6中怎么添加空工程模板
- 一位数相乘
- java基础知识(四)
- VC/MFC 定时器设置及OnTimer使用
- 冒泡排序
- git修改提交的用户名和Email
- Cocos2d-x内存管理