Java程序的运行包括两个非常重要的阶段:
一.编译阶段
注意:Java程序员直接编写的Java代码(普通文本)是无法被JVM直接识别的,必须通过编译将“普通文本代码”变为“字节码“
第一步:程序员需要在计算机硬盘中任意位置创建一个.java扩展名的文件,该文件被称为 java源文件,源文件当中编写的是java源代码/源程序。java源代码必须符合java的语法规则。
第二步:java程序员需要使用JDK当中自带的javac.exe命令进行java程序的编译。
Javac使用规则?
javac java源文件的路径
javac在哪用?
在DOS命令窗口中使用,win+r打开“运行窗口”,输入cmd
–注:
一个java源文件可以编译生成多个.class文件
编译阶段主要检查java源代码是否符合Java语法。
符合java语法则能生成以.class结尾的字节码文件,
不符合java语法则无法形成字节码文件。
字节码文件不是纯粹的二进制,无法在操作系统中直接执行。
编译结束之后,可以将class文件拷贝到其他操作系统当中(java跨平台性)。
字节码文件/class文件是最终要执行的文件,所以说class文件生成之后,java源文件/.java文件删除并不会影响程序执行。但是一般不删除,最后可能执行效果不是想要的,只能将java源文件重新修改,然后java源文件重新生成class文件,运行class文件生成新的效果。
二.运行阶段
JDK安装之后,除了自带javac.exe之外,还有另一个工具/命令,叫java.exe,java.exe主要负责运行阶段。
java.exe在哪里用?
在DOS窗口中使用,win+r打开“运行窗口”,输入cmd
java.exe怎么用?
java 类名 注意与javac命令的区分
例如:硬盘上有一个A.class文件,则:java A
硬盘上有一个b.class文件,则:java b
注意不能写成:java A.class(错误方式)
运行阶段过程步骤:
1.打开DOS命令窗口
2.输入:java A
3.java.exe命令会启动Java虚拟机(JVM),JVM会启动类加载器ClassLoader。
4.ClassLoader会去硬盘上搜索A.Class文件,找到该文件则将该文件字节码文件装载到JVM当中。
5.JVM将A.Class字节码文件解释成二进制10101010这样的数据。
6.然后操作系统执行二进制和底层硬件平台进行交互。
编译阶段和运行阶段可以在不同的操作系统上完成,因为Java具有跨平台性
Java源代码编译后可以删除源代码,只留下字节码,因为源代码不参与程序的执行过程
参与执行过程的是字节码,但是最好不要删除源代码
放源代码的文件扩展名必须是xxx.java
编译生成的字节码文件扩展名是xxx.class
注意:一个Java源文件是可以编译生成多个class文件的,最终运行的是class文件
字节码文件不是二进制文件,如果是二进制,就不需要JVM,因为操作系统可以直接执行二进制文件
Java程序从开发到最终运行经历的过程:
编译器:(可以在Windows上)
第一步:在硬盘中新建xxx.java文件
第二步:使用文本编辑器打开xxx.java文件
第三步:在xxx.java文件中编写“符合Java语法规则”的源代码
第四步:保存
第五步:使用编译器(javac【JDK安装后自带】)对xxx.java文件进行编译
第六步:如果xxx.java文件是符合语法规则的,编译会通过;如果xxx.java文件中编写的源代码违背了语法规则,那么编译器会报错,编译器报错后class文件不会生成,只有编译通过了才会生成class字节码文件,并且一个Java源文件是可以生成多个class文件的。(编译实质上是检查语法)
运行期:(可以在widows上,也可以在其他的OS上)
第七步:如果是在Linux上运行需要将Windows上生成的class文件拷贝过去,不需要拷贝源代码,真正在Linux运行的是字节码。(但是不要删除源代码)
第八步:使用JDK自带的一个命令/工具:Java(负责运行的命令/工具)执行字节码
第九步:JVM会将字节码文件装载进去,然后JVM对字节码进行解释(解释器会将字节码解释为二进制)
第十步:JVM会将生成的二进制码交给OS,操作系统就会执行二进制码和硬件进行交互
注:在以上过程中,有两个重要命令:
javac命令,负责编译
java命令,负责运行
xxx.java源文件经过编译之后生成了A.class、B.class、C.class等文件
其中称A是一个类,B是一个类,C是一个类;A,B,C是类的名字
以上过程中,程序员的工作:
新建Java文件
打开Java文件
写Java源代码
保存
javac命令编译
java命令运行