Java的加载与执行原理详解 Java程序从编写到最终运行经历了哪些过程

前言

Java程序从编写到最终运行大概可概括为3个阶段:编写、编译、运行阶段。

一、编写阶段

  1. 程序员在硬盘某个位置新建一个xxx.java文件
  2. 使用记事本或者其他文本编辑器例如EditPlus打开xxx.java文件
  3. 在xxx.java文件中编写符合Java语法规则的源代码
  4. 保存源代码

二、编译阶段

  1. 使用编译器(javac.exe【JDK安装后自带】)将 xxx.java文件编译为 xxx.class文件。如果 xxx.java文件中编写的源代码是符合语法规则的,编译会通过并生成xxx.class字节码文件;如果xxx.java文件中的源代码不符合语法规则,则编译不会通过,也不会生成xxx.class字节码文件。一个java源文件是可以生成多个class文件的。(编译实际上是检查语法)
  2. java命令格式:javac java源文件的路径(路径有绝对路径和相对路径之分)
  3. xxx.java源文件经过编译之后生成了A.class、B.class、C.class等文件,那么我们称A是一个类,B是一个类,C是一个类。其中A、B、C是类的名字。

三、运行阶段(JRE起作用)

  1. 使用JDK自带的一个命令/工具:java.exe(负责运行的命令/工具)执行字节码文件
  2. java命令格式:java 类名
  3. 执行java程序的步骤:
    <1>.先使用cd命令切换到Test.class文件所在的路径。
    <2>.执行java 类名
    java这个命令,后面跟的是“类名”,而绝对不能跟“文件路径”,因为java命令后面跟的不是文件,是一个“类名”。所以必须先切换到class文件所在路径,也是为了能让类加载器能够找到该class文件。
  4. 往下的步骤就全部交给JVM了,就不需要程序员进行干涉了。当执行java 类名回车以后,会经历以下步骤:
    <1>. 会先启动JVM(java虚拟机)
    <2>. JVM启动之后,JVM会去启动“类加载器classloader”
    类加载器的作用:加载类的。本质上类加载器负责去硬盘上找“类”对应的“字节码”文件。
    假设是“java HelloWorld”,那么类加载器会去硬盘上搜索:HelloWorld.class文件。
    假设是“java Test”,那么类加载器会去硬盘上搜索:Test.class文件。
    <3>. 类加载器如果在硬盘上找不到对应的字节码文件,会报错:找不到或无法加载主类
    类加载器如果在硬盘上找到了对应的字节码文件,类加载器会将该字节码
    文件装载到JVM当中,JVM启动“解释器”将字节码解释为“101010000…”这种
    二进制码,操作系统执行二进制码和硬件交互。
    默认情况下,类加载器去硬盘上找“字节码”文件的时候,默认情况下类加载器(classloader)会从当前路径下找。因此在运行时要先先使用cd命令切换到Test.class文件所在的路径。也可以设置一个环境变量classpath给类加载器指定一个路径,让类加载器去指定的路径下加载字节码文件。
    JVM会通过类加载器将字节码文件装载进去,然后JVM对字节码进行解释,将字节码解释为机器指令(二进制码)。JVM会将生成的二进制码交给OS操作系统,操作系统会执行二进制码和硬件进行交互。

总结

Java程序从编写到编译再到运行是一次完整的加载与执行过程。程序员写的源代码为xxx.java文件,源代码是无法直接被JVM识别。Java程序员编写的代码必须经过编译,将源代码编译为字节码,JVM能够识别字节码文件并将其解释并执行。

.java文件就是源文件,这个文件中编写源代码
.class文件为编译后的字节码文件。

javac命令负责编译
java命令负责运行

java程序的编译和运行过程可以在不同的操作系统上完成。因为java是跨平台的。

java源代码一旦编译之后,如果将源代码删除,只保留字节码文件也是可以执行的,因为参与运行的是字节码。但是最好不要把源程序删除,以防后期需要进行修改。

字节码文件不是二进制文件,它只是接近于二进制的字节码,需要由JVM解释为二进制然后被执行。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值