@Java的编译与运行-B站动力节点Java零基础教程视频笔记01
Java程序的运行包括两个非常重要的阶段:
- 编译阶段
- 运行阶段
- 示意图如下【来源于动力节点Java培训视频】
编译阶段
- 编译阶段的主要任务是检查Java源程序(xxx.java)中是否符合Java语法,符合语法规则则能够生成正常的字节码文件(xxx.class);不符合Java语法规则则无法生成字节码文件。
- 字节码文件不是纯粹的二进制,这种文件无法直接在操作系统中直接执行。
- 编译阶段的过程
- 程序员需要在硬盘的某个位置<位置随意>新建一个.java扩展名的文件,该文件被称为Java源文件,源文件当中编写的是Java源代码/源程序。而这个源程序是不能随意编写,必须符合Java语法规则,Java语法规则需要记忆。
- Java程序员需要使用JDK当中自带的javac.exe命令进行Java程序的编译。
- javac怎么用呢?在哪用呢?
- javac的使用规则:
javac java源文件的路径 - 在DOS命令窗口中使用
- javac的使用规则:
- javac是一个java编译器工具/命令
- javac怎么用呢?在哪用呢?
- 一个java源文件可以编译成多个.class文件
- 字节码文件/class文件是最终要执行的文件,所以说class文件生成之后,java源文件删除并不会影响java程序的执行,但一般不删除,还需要修改,生成新的效果。
- 编译结束以后,可以将class文件拷贝到其他操作系统当中运行。【跨平台】
运行阶段【可以在其他操作系统当中,跨平台】
- JDK安装之后,除了自带的一个javac.exe之外,还有另一个工具/命令,叫做java.exe,java.exe命令主要负责运行阶段。
- java.exe在哪里用?怎么用?
- 在DOS窗口中使用。
- 语法规则:java 类名
例如:硬盘上有一个A.class,那么就这样用:java A
硬盘上有一个B.class,那么就这样用:java B
硬盘上有一个C.class,那么就这样用:java C
千万要注意:不要写成这样:java A.class【这种方式是错误的,记住就行】
- 运行阶段的过程是:
- 打开DOS命令窗口(windows+R按键)
- 输入:java A
- java.exe命令会启动Java虚拟机(JVM),JVM会启动类加载器ClassLoader。
- ClassLoader会去硬盘上搜素A.class文件,找到该文件则将该文件装载到JVM当中。
- JVM将A.class字节码文件解释成为二进制1010101010这样数据。
- 然后操作系统执行二进制文件和底层硬件平台交互。
开始第一个java程序
- 保证计算机当中已经开始安装了文本编辑器EditPlus
- 安装JDK【JDK一般需要从oracle的官网下载】,我使用的是JDK8
- JDK、JRE、JVM的关系搞清楚
- JDK是Java语言开发工具包。
- JRE是Java运行环境,Java Runtime Environment,可以让计算机系统运行Java应用程序。
- JVM是Java虚拟机,运行在不同操作系统上,将字节码文件翻译成二进制文件。
- JRE的内部包括JVM和一些标准的类别函数库。
- JDK和JRE的区别:举例,当项目开发完成后,需要部署到用户电脑上运行,此时没必要再安装JDK,只需要安装JRE即可,安装JDK可以进行开发,安装JRE只能运行,JRE的内存要小一些。注意JDK和JRE都能对应单独软件,而JVM没有对应软件。
- 而范围是JDK>JRE>JVM,安装JDK的过程中会提示安装JRE。
- JDK目录介绍:
- JDK/bin:该目录下存放了很多命令,例如javac.exe和java.exe
- javac.exe负责编译
- java.exe负责运行
- 开发HelloWorld.java源程序
- 将HelloWorld.java源程序通过javac工具进行编译:
- 首先解决的问题是:javac工具是否可用
- 打开DOS命令窗口,直接输入javac,然后回车,出现一下问题:‘javac’ 不是内部或外部命令,也不是可运行的程序或批处理文件。出现以上问题原因是因为windows操作系统无法找到javac命令文件
- 怎么解决javac不可用的问题?
windows操作系统是如何搜索硬盘上某个命令的呢?- 首先从当前目录下搜索。
- 当前目录如果搜索不到的话,会从环境变量Path指定的路径当中搜索某个命令。
- 如果都搜索不到,则报以上错误。
- 配置环境变量Path
- 注意:Path环境变量和java语言没有关系,Path环境变量是属于windows操作系统的一个知识点。Path环境变量是专门给windows操作系统指路的。
- javac要想随意使用,需要将javac所在的目录配置到环境变量Path中:
D:\Java\JDK8\Pack\bin - 需要注意的是我这里配置的Path环境变量是系统变量中的,非luckf的用户变量中的,因为同一台电脑,用户可以拥有多个,但系统变量只对应windows操作系统,作用所有用户。
- javac怎么用
- javac java源文件路径
- 路径有绝对路径和相对路径
绝对路径命令:C:\Users\luckf>javac D:\Java\JavaSE\Projects\EditPlusPro\day01\HelloWorld.java(可以将文件拖进DOS命令窗口相应位置直接获取绝对路径)
相对路径命令:D:\Java\JavaSE\Projects\EditPlusPro\day01>javac HelloWorld.java
- 运行java程序:
- 需要使用java.exe命令
- 首先测试java命令是否可用
- 使用方式:
java 类名
硬盘上有HelloWorld.class,那么类名就是:HelloWorld
java HelloWorld - 首先你需要先将DOS窗口中的目录切换到HelloWorld.class文件所在目录。
- 然后直接执行:java HelloWorld
- 打开DOS命令窗口,执行java HelloWorld,执行原理?
- java.exe命令会启动JVM
- JVM启动之后会启动类加载器ClassLoader
- ClassLoader会在硬盘上的某个位置搜索HelloWorld.class字节码文件
- 找到该文件执行
- 找不到该文件则报错
疑问:ClassLoader是在哪个位置上搜索HelloWorld.class字节码文件的?- 默认情况下,ClassLoader从当前路径下加载xxx.class字节码文件
- 当然,也可以让ClassLoader去某个指定路径下加载字节码文件,这时需要配置环境变量classpath
- classpath环境变量属于java语言中的环境变量,不属于windows操作系统【Path环境变量属于操作系统】
- classpath是给ClassLoader指路的
- 设置这样的环境变量:classpath=D:\Java\JavaSE\Projects\EditPlusPro\day01
打开dos命令窗口在任意位置,都可以执行:java HelloWorld - classpath环境变量没有配置的话,类加载器默认从当前路径下找到字节码文件。当classpath环境变量配置为某个指定路径之后,类加载器只去指定的路径当中加载字节码文件。
- 综上所述,环境变量classpath不再配置,这样类加载器会自动从当前路径下加载到class字节码文件。所以,每一次执行.class程序的时候,需要在DOS命令窗口中先切换到.class字节码文件所在的路径下,然后运行。