要点
源码先被编译为字节码,再由 JVM 执行。main 是程序入口,类名、文件名与包路径共同影响工具如何找到入口。
旧回顾:Hello World 的三次进化
写法一:经典写法(Java 1.0 至今有效)
下面是本页的基线程序。它只使用 JDK 21 也支持的语法,因此可用来区分“经典编译运行闭环已通”与后文需要 JDK 25 的紧凑源文件。
// Hello.java
public class Hello {
public static void main(String[] args) {
System.out.println("Hello, Java!");
}
}
javac Hello.java # 生成 Hello.class
java Hello # 运行
要点回顾:文件名必须与 public 类名一致;JVM 入口是 public static void main(String[] args)。本例的可观察结果固定为 Hello, Java!;修改源码后必须重新执行 javac Hello.java,否则 java Hello 仍会运行先前生成的 Hello.class。
写法二:单文件直接运行(Java 11+)
java Hello.java # 不再需要先执行 javac
适合小脚本与练手场景;注意它不会在磁盘生成 .class 文件。
写法三:紧凑源文件与简化 main(Java 25+)
// Hello.java —— Java 25 紧凑源文件写法
void main() {
IO.println("Hello, modern Java!");
}
java Hello.java # 直接运行
- 不再强制类声明,实例方法
main即可作为入口 - 新增
java.lang.IO提供IO.println/IO.readln等简单控制台 IO - 旧经验对照:需要参数时仍可声明
void main(String[] args)
Java 21 环境下请使用写法一或写法二;写法三需要 JDK 25。
JShell:交互式学习利器(Java 9+)
先在终端执行:
jshell
进入 jshell> 提示符后,逐条输入以下 Java 代码(不要复制提示符):
1 + 1
var list = new java.util.ArrayList<String>();
list.add("hello");
String greet(String name) { return "Hi, " + name; }
greet("Java");
依次可观察到加法结果 2、空列表、添加成功的 true、方法创建提示,以及 "Hi, Java"。最后在 JShell 内输入 /exit 退出。
常用命令:
| 命令 | 作用 |
|---|---|
/vars | 查看已声明变量 |
/methods | 查看已定义方法 |
/list | 查看历史代码 |
/edit <片段> | 打开编辑器修改片段 |
/exit | 退出 |
旧对照:Java 9 之前想验证一段代码,必须建类、建 main、编译、运行;JShell 让”试一行代码”的成本降为零,特别适合学习新 API。
Maven 项目初体验
mvn archetype:generate -DgroupId=com.example -DartifactId=demo
-DarchetypeArtifactId=maven-archetype-quickstart
-DarchetypeVersion=1.4 -DinteractiveMode=false
cd demo
mvn package
java -cp target/classes com.example.App
关注 pom.xml 中与版本相关的最小配置:
<properties>
<!-- release 会同时控制 source/target,并使用正确的 API 集合 -->
<maven.compiler.release>21</maven.compiler.release>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
常用命令:mvn compile / mvn test / mvn package / mvn clean。
旧对照:source/target 只管语法级别;release(Java 9+)还会检查 API 兼容性,避免”低版本运行却用了新 API”的隐性事故。
Gradle 项目初体验
gradle init --type java-application --dsl kotlin
./gradlew run
build.gradle.kts 关键片段:
plugins {
id("java")
application
}
java {
toolchain {
languageVersion = JavaLanguageVersion.of(21) // 指定编译与运行用的 JDK
}
}
Toolchain 让”项目要什么 JDK”成为工程配置的一部分,机器上装有对应版本即可,不再依赖全局 JAVA_HOME。
如何选择运行方式
| 场景 | 推荐方式 |
|---|---|
| 验证语法/探索 API | JShell |
| 单文件小工具、算法题 | java 文件名.java |
| 正式工程 | Maven 或 Gradle + Wrapper |
| 教学/极简示例(JDK 25) | 紧凑源文件 + void main() |
练习与实践
练习一:三种方式跑 Hello World
- 分别用 javac+java、单文件直跑运行同一程序
- 若装有 JDK 25,改写为紧凑源文件 +
IO.println
练习二:JShell 探索
- 在 JShell 中定义一个方法并调用
- 用
/vars和/methods查看会话状态
练习三:工程化
- 分别创建 Maven 与 Gradle 项目,跑通
package/run - 给两个项目都生成 Wrapper 并提交