一个Java程序想要被运行得到结果,必须历经两个阶段,那就是 编译阶段运行阶段。

写在前面

想要编译和运行java程序,必须需要jdk【Java Development Kit java开发工具箱】的支持,它包括了jre【Java Runtime Environment】jvm 【Java Virtual Machine】,前者是java运行环境,后者是java虚拟机。
编译阶段需要jdk中的编译器javac命令来将源程序编译成字节码,运行阶段需要加载字节码到虚拟机上java命令进行解释成机器码,然后在操作系统上运行。

1. 编译阶段

编译阶段就是将书写的源程序编译成字节码文件【xxx.class】的过程,需要使用到javac这个命令,具体的执行命令如下:

javac xxx\xxx\xxx.java

javac命令后面跟的是相对路径或者绝对路径,即源程序所在电脑上的位置,源程序在编写符合语法规范时,会生成正确的字节码文件xxx.class,其中xxx类名

2. 运行阶段

运行阶段就是java虚拟机jvm根据类名找到对应的字节码文件,调用类加载器classloader加载字节码文件,将其装载到java虚拟机中,然后解释器会将字节码文件解释成机器码1001001111......,这样操作系统就可以识别这些机器码,作出对应的运算和输出。
执行的命令:

java 类名

java命令后面必须跟类名,不能跟路径,默认类加载器classloader会到当前目录下【执行java命令的目录】 寻找类名对应的字节码文件,然后装载到虚拟机中,最后由解释器进行解释执行。

3. path环境变量

环境变量分为用户环境变量系统环境变量,其中用户环境变量只能被当前登录的用户所使用,而系统环境变量可以被当前电脑的所有用户所共享。

path环境变量是windows系统自带的环境变量,它的值是不同的路径,只有被配置到该环境变量中的路径,该路径下的可执行程序才可以被系统所查找到【“windows系统的指路人”】。为了在任意目录下都可以使用javacjava命令,需要将jdk的这两个命令所对应的目录路径配置到path环境变量中。

4. classpath环境变量

path环境变量不同的是,classpath环境变量是我们自定义的一个环境变量,它是专门针对类加载器的。前面说过,类的运行阶段,分为三个阶段。

  1. 首先是由类加载器去寻找字节码文件。
  2. 然后将字节码文件加载到jvm虚拟机中
  3. 解释器解释执行成机器码,最后执行相关的操作。

而如果不配置classpath环境变量的话,默认类加载器是在当前路径下寻找字节码文件,只有配置之后,类加载器才会到配置的路径下寻找!
由于不同的源代码编写的位置不是一层不变的,指定之后,类加载器只会在该路径下寻找,不会去其它目录寻找,太过于死板。因此没有必要指定classpath环境变量,这样适得其反!