运行JAVA
JAVA的运行分为编译阶段和运行阶段
基本概念
| 角色 | 全称 | 作用 |
|---|---|---|
| JDK | Java Development Kit | 开发工具包(含 Javac) |
| JRE | Java Runtime Environment | 运行环境(含库文件) |
| JVM | Java Virtual Machine | 虚拟机(核心引擎) |

JAVA的跨平台运行主要就是通过JVM去运行代码。不同平台拥有不同的JVM。
JVM会把字节码文件翻译成机器码文件让OS去运行
编译
sh
javac HelloWorld.java当你执行 javac HelloWorld.java 命令时,生成 HelloWorld.class 文件(即字节码文件)。
Javac 将人类能读懂的 Java 代码翻译成了 JVM(Java 虚拟机) 能读懂的中间指令
运行
sh
java HelloWorld类加载 (Class Loader):JVM 把 .class 文件加载到内存中。
字节码校验:JVM 会检查代码是否安全、是否符合规范。
解释与 JIT 编译:
- 解释执行:JVM 的解释器逐行读取字节码并翻译成当前操作系统的机器指令。
- JIT (Just-In-Time) 编译:这是 Java 快的秘诀。对于经常执行的热点代码,JVM 会直接把它编译成原生机器码并缓存起来,下次直接跑,速度接近 C++。
硬件执行:CPU 最终执行这些机器指令,屏幕上打出 Hello World。
为什么 Java 运行命令不带后缀?
- 编译时:
javac HelloWorld.java(针对的是文件) - 运行时:
java HelloWorld(针对的是类名)
这是因为 JVM 在运行时会自动去 classpath(也就是你的 target/classes)里寻找名为 HelloWorld 的类文件。
classpath
classpath 是 Java 中的“类路径”,表示 JVM 或编译器查找 .class 文件和资源文件的路径集合。
classpath是给classloader指路的:JVM启动classloader,classloader通过classpath寻找class文件
当 Java 程序需要加载类时:
sh
java com.example.MainJVM 会在 classpath 指定的路径中寻找:
com/example/Main.class如果 没有显式设置 classpath,Java 仍然可以运行,因为 JVM 有默认的 classpath。
默认情况下classpath就是运行java命令的当前目录
显式设置classpath
java -cp classes:lib/mysql.jar MainLinux / Mac 用
:Windows 用
;
运行Java
| 命令 | 含义 |
|---|---|
java -cp | 指定 classpath 运行类 |
java -jar | 直接运行 jar 应用 |
java -cp app.jar com.test.Mainjava -jar app.jar