Java程序的运行机制详解

        Java程序从编写到最终运行都经历了那些过程?解决这个问题之前我们先简单了解一下。

        Java程序有两个非常重要的两个阶段:编译阶段和运行阶段。

        Java程序员直接编写的Java代码(普通文本)是无法直接被JVM识别的,Java代码这种普通文本被称为:Java源代码,也就是说Java程序员编写的代码是源代码。源代码不能直接执行,需要先进行编译,生成源代码对应的“字节码”,JVM能识别“字节码”。Java代码这种普通文本变成字节码的过程被称为:编译。

        那么编译阶段和运行阶段可以在不同的操作系统上完成吗?答案是可以,因为Java语言是跨平台的,在Windows上编译之后生成的“字节码”也可以在Linux上运行,可以做到一次编写到处执行。(这里不懂得可以参考之前的文章:Java语言的健壮性与可移植性)

        java源代码一旦编译之后,源代码可以删除吗?只留下字节码可以执行吗?完全可以执行,因为源代码不参与程序的执行过程,参与程序执行过程的是字节码。但是最好不要删除源代码,因为有可能执行结果不是你需要的,当执行结果不是你需要的时候,你可以重新打开源代码进行修改,然后重新编译生成新的字节码,再重新执行,这样会有新的执行效果。

        放源代码的文件扩展名必须是:xxx.java,并且需要注意的是:编译生成的字节码文件扩展名是:xxx.class。.java文件就是源文件,这个文件中编写源代码。.class文件就是字节码文件,这个文件是编译源代码而得到的。

        另外需要注意的是:1个java源文件是可以编译生成多个class文件的,而最终运行的是class文件。

        那么字节码文件是二进制文件吗?答案是否定的,不是二进制文件,如果是二进制的话,就不需要JVM了,因为操作系统可以直接执行二进制。

        回归到我们之前的问题,java程序从开发到最终运行经历了什么?


        编译阶段:(可以在Windows上)
                第一步:在硬盘的某个位置(随意),新建一个xxx.java文件。
                第二步:使用记事本或者其它文本编辑器打开xxx.java文件。
                第三步:在xxx.java文件中编写“符合java语法规则的”源代码。(源文件中编写的代码叫做源代码)
                第四步:保存。(一定要将xxx.java文件保存一下)
                第五步:使用编译器(javac【JDK安装后自带】)对xxx.java文件进行编译。
                第六步:如果xxx.java文件中编写的源代码是符合语法规则的,编译会通过,如果xxx.java文件中编写的源代码违背了语法规则,那么编译器会报错,编译器报错之后class文件是不会生成的,只有编译通过了才会生成class字节码文件。并且一个java源文件是可以生成多个class文件的。(编译实质上是检查语法)

        运行阶段(JRE在起作用):(可以在Windows上,也可以在其他的OS上。)
                第七步:如果是在Linux上运行,需要将Windows上生成的class文件拷贝过去,不需要拷贝源代码,真正运行的是字节码。(但是源代码也不要删除,有用)
                第八步:使用JDK自带的一个命令/工具:java(负责运行的命令/工具)执行字节码。
                第九步:往下的步骤就全部交给JVM了,就不需要程序员干涉了,JVM会将字节码文件装载进去,然后JVM对字节码进行解释。(解释器负责将字节码解释为1010101010......等的二进制)
                第十步:JVM会将生成的二进制码交给OS操作系统,操作系统会执行二进制码和硬件进行交互。

        注意:在以上的过程中,需要使用两个非常重要的命令:javac命令,负责编译;java命令,负责运行。还有就是,xxx.java源文件经过编译之后生成了A.class、B.class、C.class等文件,那么我们称A是一个类,B是一个类,C是一个类,其中A、B、C是类的名字,也就是类名,这是SUN公司规定的Java语法。

        以上是一个复杂的过程,那么程序员需要做些什么呢?Java程序员最主要的工作是在编译阶段。新建java文件、打开java文件、写java源代码、保存、java命令编译、java命令运行。简单来说,就是编写、编译、运行。

        (本文仅代表个人观点,不喜勿喷!)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值