@Java的编译与运行-B站动力节点Java零基础教程视频笔记01

Java程序的运行包括两个非常重要的阶段:

  • 编译阶段
  • 运行阶段
  • 示意图如下【来源于动力节点Java培训视频】

JAVA编译需要class 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是一个java编译器工具/命令
  • 一个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字节码文件所在的路径下,然后运行。