安装JDK、配置环境变量,写一个包含public static void main的HelloWorld.java,运行时用javac编译再用java执行;进阶用package组织代码、用Maven/Gradle管理依赖并打包为可执行jar,或把主体类移入Spring Boot/Servlet等容器中部署,这样从入门到工程化都有清晰路径。

为什么从 HelloWorld 学习 Java?
如果把编程比作盖房子,HelloWorld 就是第一块砖。它简单但能帮你理解Java的基本构造:类(class)、方法(method)、入口(main)、编译与运行流程、以及运行时环境(JVM)。掌握这些,其他知识就像在这块砖上搭楼层。
准备工作:JDK、IDE 与环境变量
在动手之前,你需要确认三件事:已安装 JDK、会用命令行(或IDE)、知道怎么配置环境变量。说白了,Java 是写代码(源文件)、编译(javac)、运行(java)三步走。
JDK、JRE、JVM 简要说明
- JVM:Java 虚拟机,负责运行字节码。
- JRE:运行时环境,包含 JVM 和运行所需库。
- JDK:开发工具包,包含 javac、jar、jlink 等开发工具,写程序需要 JDK。
如何检查与安装(要点)
- 命令行输入 java -version 和 javac -version,能看到版本即已安装。
- Windows 下常需把 JDK 的 bin 目录加入 PATH,Linux/macOS 可在 ~/.bashrc 或 ~/.zshrc 中导出。
- 版本上,项目常用 LTS:Java 8、11、17;选稳定且与依赖兼容的版本。
第一个 HelloWorld:从文件到运行
先看一个最简单的例子,然后把每一行拆开讲清楚。
/* HelloWorld.java */
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello, world!");
}
}
逐行解释
- public class HelloWorld:定义一个公开类,类名必须和文件名 HelloWorld.java 一致(大小写敏感)。
- public static void main(String[] args):主方法(程序入口),JVM 寻找这个签名来启动程序。
- System.out.println(…):输出到控制台,println 会换行。
编译与运行的命令
| 操作 | 命令示例 | 说明 |
| 编译 | javac HelloWorld.java |
生成 HelloWorld.class 字节码文件 |
| 运行 | java HelloWorld |
JVM 加载类并执行 main 方法 |
类路径(classpath)与包(package)
类路径决定 JVM 在哪里寻找类。包是组织类的方式,会影响文件夹结构和类加载路径。
包的写法与项目结构
package com.example.hello;
public class HelloWorld { ... }
文件必须放在与包名对应的目录中:com/example/hello/HelloWorld.java。编译时在包的上一级运行 javac com/example/hello/HelloWorld.java,然后用 java com.example.hello.HelloWorld 启动。
常见类路径错误与排查
- NoClassDefFoundError:运行时找不到类,通常是 classpath 没指定或目录层次不对。
- ClassNotFoundException:动态加载(比如反射或 Class.forName)找不到类,检查 jar/目录是否在 classpath。
把 HelloWorld 做成工程(Maven / Gradle)
手动管理很多文件会出错,构建工具能帮你组织源码、依赖、测试与打包。下面给出最小化示例。
Maven 最小项目结构
- 目录:src/main/java/com/example/hello/HelloWorld.java
- pom.xml:定义 groupId、artifactId、version 和构建行为
Gradle 最小项目
- 使用 init 或手写 build.gradle,指定 application 插件和 mainClass。
- 命令示例:
./gradlew run或./gradlew build
生成可执行 JAR(一步到位)
把程序连同依赖打包到一个 jar 中,方便部署。
手工方式(简单示意)
- 编译:
javac -d out src/com/example/hello/HelloWorld.java - 生成清单(Manifest)文件:指定 Main-Class
- 打包:
jar cfm HelloWorld.jar manifest.txt -C out . - 运行:
java -jar HelloWorld.jar
Maven/Gradle 打包
- Maven:使用 maven-shade-plugin 或 spring-boot-maven-plugin 来生成“胖”jar。
- Gradle:使用 application 插件或 shadow 插件生成包含依赖的可执行 jar。
HelloWorld 在 Web 或 Spring Boot 场景
把 HelloWorld 的思路带到 Web 中,入口从 main 仍然存在,但会启动服务器或容器。
Servlet 示例(简化)
- 创建 HttpServlet 子类,覆盖 doGet/doPost。
- 将类打包为 war,部署到 Tomcat;或使用嵌入式容器以 jar 形式运行。
Spring Boot HelloWorld(常见方式)
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
Spring Boot 把很多配置自动化,运行后访问控制器即可看到“Hello”响应。这里的 main 方法其实仍是程序入口。
调试、常见问题与解决办法
- main 方法签名错误:确保是 public static void main(String[] args)。缺少 static 或参数类型错误会导致无法运行。
- 类名与文件名不一致:会导致编译错误,Java 要求 public 类名与文件名一致。
- 字符编码问题:源文件编码与编译器默认不一致会出现乱码,建议使用 UTF-8,并在编译时指定
javac -encoding UTF-8。 - 模块系统(Java 9+):如果使用 module-info.java,需要处理模块导出与读取,简单项目可先不启用模块。
工具与小技巧
- IDE:IntelliJ IDEA、Eclipse、VS Code (带 Java 插件)能自动创建项目、运行配置和调试断点。
- JShell:快速试验 Java 代码片段,不需要写完整类,适合验证 API 或语法。
- jarsigner/jlink/jdeps:分别用于签名、定制运行时镜像、分析依赖,适合生产优化。
- 单元测试:把逻辑放入方法中,用 JUnit 编写测试,避免主方法中堆过多逻辑。
练习题(用费曼法自检)
- 用命令行完成从源码到可运行 jar 的整个流程,记录每一步遇到的问题并解决。
- 把 HelloWorld 拆成两个类:一个负责格式化输出(比如返回字符串),一个负责 main 调用它;用包组织并编译运行。
- 使用 Maven 或 Gradle 创建项目,添加一个外部依赖(例如 Apache Commons Lang),在 HelloWorld 中调用它。
- 将 HelloWorld 改为 Spring Boot 应用并写一个简单的 REST 接口返回 “Hello, world!”。
常见命令速查表
| 动作 | 命令/说明 |
| 检查 Java | java -version、javac -version |
| 编译 | javac HelloWorld.java |
| 运行 | java HelloWorld 或 java -cp . com.example.HelloWorld |
| 打包 | jar cfm app.jar manifest.txt -C out/ . |
好,讲到这儿你已经有了一条从入门到工程化的清晰路径:从写一个最简单的 HelloWorld,理解类和方法与运行机制,再学会包和 classpath,接着用构建工具管理项目,最后学会打包和部署。过程中多尝试、遇到错误就去查日志、调整类路径或编译选项,这些实战经验比纯看文档更值钱。随手做几次练习,你会发现很多当初看似复杂的概念其实只是组合几条简单规则——就像盖房子,先学好那块砖再慢慢往上堆。