JAVA程序的加载和运行
多思考多动脑(边参考文章最后的示意图,边按步骤理解)
1.JAVA程序的加载和运行包括两个非常重要的阶段:
- 编译阶段
- 运行阶段
2.我们先来了解一下什么是编译阶段:
-
首先,我们自己动手敲的JAVA代码(只要你安装好JDK后在记事本都可以敲JAVA代码),记事本的扩展名改为xxx.java
-
然后,扩展名由xxx.java–>xxx.class,这就是一次编译,那为什么要变成xxx.class的文件呢?xxx.class文件是什么呢?
-
接来下我们带着这个疑问去了解 什么是编译
-
编译阶段主要的任务是检查java源程序是否符合java语法要求:
-
符合java语法则能够生成正常的字节码文件(即xxx.class文件)
-
不符合java语法规则则无法生成字节码文件
-
那么字节码文件是什么呢?:
-
字节码文件就是我们所说的.class文件
-
字节码文件中不是纯粹的二进制代码:
-
因此字节码文件无法直接和操作系统交互(因为操作系统和纯二进制打交道)
3.编译阶段的过程的实现:
-
程序员需要在硬盘的某个位置(位置随意)新建一个xxx.java扩展名的文件,
-
该文件就叫做java源文件,在源文件中编写的代码叫做java源代码,源代码不可以随意编写,需要符合java语法规则
-
程序员需要使用JDK中自带的 javac.exe 命令进行编译,过程如下:
-
xxx.java–>javac.exe(在JDK中会调用javac.exe工具)–>xxx.class
-
javac.exe是一个java编译器工具
-
javac在哪里用呢?怎么用?:
-
在DOS命令窗口中使用
-
在窗口命令行输入
javac java源文件路径
-
这样系统就会调用JDK的javac.exe资源,将java源文件编译成字节码文件
-
此时在源文件同级路径位置会出现一个xxx.class文件,表示编译成功
-
下面是因为JDK的路径在D盘中,所以用命令D:跳转盘符
-
一个java源程序可以编译生成多个xxx.class文件:
-
A.class/B.class/C.class这个以后再说
字节码文件是最终要执行的文件,所以说class文件生成后,即使你删除java源程序也不会影响java程序的执行。
但是最好不要删除源程序,因为字节码文件最终执行效果可能不是我们想要的,那么这个时候只需要回头重新修改源程序,然后将源程序重新编译生成新的字节码文件,得到新的效果。
- 编译结束后,可以将xxx.class文件拷贝到不同的操作系统中运行:
- 解释:因为xxx.class文件还要变成纯二进制代码才可以和系统交互
- 所以你只需要拷贝xxx.class文件到相应的位置,然后xxx.class文件通过JVM虚拟机和操作系统交互,剩下的事情就交给JVM
4.接下来我们了解 运行阶段:
-
JDK安装之后,除了自带的一个javac.exe负责编译之外,还有另一个工具,叫做java.exe工具
-
java.exe工具负责运行阶段
-
java.exe在哪里用?怎么用?:
-
同样,java.exe和javac.exe一样在DOS命令窗口中使用
-
在窗口中输入
java 类名
-
类名我们后面再解释
-
例如:
硬盘上有一个A.class,那么就 输入: java A
硬盘上有一个B.class,那么就 输入: java B
硬盘上有一个C.class,那么就 输入: java C
-
千万要注意:不要写成这样: java A.class 【错误示范】:
-
A、B、C指的是类名,记住就行
5.运行阶段的过程解析:
- 打开DOS命令窗口
- 输入: java A 然后按下回车
- java.exe工具会启动java虚拟机(JVM),JVM会启动 类加载器ClassLoader
- 类加载器ClassLoader会去硬盘上搜索A.class文件,找到该文件则将该文件装载到JVM中
- JVM将A.class字节码文件解释成二进制1001000101这样的数据
- 然后操作系统执行二进制和底层硬件平台进行交互
总结:编写好java源程序后,以xxx.java结尾修改扩展名,打开DOS命令窗口,输入 javac xxx.java 回车执行后,在我们放java源程序的文件里多出来一个xxx.class文件 意味着编译成功(这就是加载) 那么这个xxx.class文件可以拷贝到不同的系统中使用,为了让xxx.class文件里的代码变成纯二进制代码 我们再次打开DOS命令窗口,输入 java xxx 这时候就是java.exe工具启动JVM,JVM启动类加载器 类加载器找到刚刚编译好的xxx.class文件 在JVM环境里 xxx.class文件变成纯二进制的代码 这时候就可以和操作系统直接交互啦
这个章节涉及的内容概念有点多,不必全部都了解,只需要了解字面意思的概念
后面我们会深入讲解
参考来源:动力节点