Java入门到精通-03 第一个程序——Hello World
目录
- 🚀 03 第一个程序——Hello World
- 一、Hello World的由来
- 二、编写第一个Java程序
- 2.1 使用记事本编写(了解原理)
- 2.2 使用IDEA编写(推荐方式)
- 三、逐行解析代码
- 3.1 逐行详解
- 3.2 关键字说明
- 四、main方法深度解析
- 4.1 main方法的完整签名
- 4.2 main方法的等价写法
- 4.3 命令行参数
- 4.4 main方法的本质
- 五、编译与运行流程
- 5.1 Java程序的生命周期
- 5.2 编译详解
- 5.3 运行详解
- 5.4 反编译查看字节码
- 六、在IDEA中运行
- 6.1 创建项目
- 6.2 创建类并运行
- 6.3 IDEA快捷操作
- 七、常见错误与解决方案
- 7.1 编译错误
- 7.2 运行错误
- 7.3 常见错误汇总表
- 7.4 编码错误问题
- 八、进阶:改进你的Hello World
- 8.1 带有变量的Hello World
- 8.2 使用用户输入
- 8.3 使用方法封装
- 九、Java程序的基本结构
- 9.1 文件结构
- 9.2 命名规则
- 9.3 代码风格
- 十、总结与预告
- ✅ 本篇总结
- 💬 互动问题
- 📖 下篇预告
- 📚 参考资料
🚀 03 第一个程序——Hello World
更新日期:2026年5月
版权声明:本文为原创文章,转载请注明出处。© 2026 Java入门到精通系列
一、Hello World的由来
“Hello, World!” 程序是每个程序员学习新语言时编写的第一个程序。这个传统起源于1978年 Brian Kernighan 和 Dennis Ritchie 合著的《The C Programming Language》一书。
几乎所有的编程入门教程都以此作为起点,它可以帮助你:
- ✅ 验证开发环境是否正确配置
- ✅ 了解语言的基本语法结构
- ✅ 获得第一个成功的成就感
二、编写第一个Java程序
2.1 使用记事本编写(了解原理)
第一步:创建文件
新建一个文件,命名为HelloWorld.java。
⚠️重要:文件名必须与类名完全一致,包括大小写!
第二步:编写代码
publicclassHelloWorld{publicstaticvoidmain(String[]args){System.out.println("Hello, World!");}}第三步:编译运行
# 打开终端/命令提示符,进入文件所在目录# 编译(将 .java 编译为 .class 字节码文件)javac HelloWorld.java# 运行(注意:不加 .class 后缀)javaHelloWorld# 输出:# Hello, World!2.2 使用IDEA编写(推荐方式)
1. 打开 IntelliJ IDEA 2. File → New → Project → Java → 选择JDK 21 3. 项目名:HelloWorldDemo 4. 在 src 目录上右键 → New → Java Class 5. 输入类名:HelloWorld 6. 输入代码并运行(点击绿色三角或Shift+F10)三、逐行解析代码
publicclassHelloWorld{// 第1行:类声明publicstaticvoidmain(String[]args){// 第2行:主方法System.out.println("Hello, World!");// 第3行:输出语句}// 第4行:主方法结束}// 第5行:类结束3.1 逐行详解
| 行号 | 代码 | 说明 |
|---|---|---|
| 1 | public class HelloWorld | 声明一个公开的类,类名为HelloWorld |
| 1 | { | 类的开始 |
| 2 | public static void main(String[] args) | 主方法,程序的入口点 |
| 3 | System.out.println("Hello, World!") | 向控制台输出一行文字 |
| 4 | } | 主方法结束 |
| 5 | } | 类结束 |
3.2 关键字说明
| 关键字 | 含义 | 说明 |
|---|---|---|
public | 访问修饰符 | 表示公开的,任何地方都能访问 |
class | 类 | 声明一个类,Java程序的基本单位 |
static | 静态 | 表示该方法属于类而非实例 |
void | 无返回值 | 表示main方法不返回任何值 |
String[] | 字符串数组 | 命令行参数的类型 |
四、main方法深度解析
main方法是Java程序的入口点,JVM从这里开始执行代码。
4.1 main方法的完整签名
publicstaticvoidmain(String[]args)逐个关键字分析:
public// 1. 公开访问权限,JVM需要调用它static// 2. 静态方法,无需创建对象即可调用void// 3. 无返回值,main不需要向JVM返回结果main// 4. 方法名,JVM固定识别的入口名String[]// 5. 参数类型,字符串数组args// 6. 参数名(可以改成其他名字,但约定俗成用args)4.2 main方法的等价写法
以下写法都是合法的main方法声明:
// 标准写法publicstaticvoidmain(String[]args){}// args可以换成其他名字publicstaticvoidmain(String[]arguments){}// 可变参数写法(Java 5+)publicstaticvoidmain(String...args){}// 以下写法是不合法的 ❌// static public void main(String[] args) { } // 修饰符顺序不规范(但编译能过)// public void main(String[] args) { } // 缺少static// public static void main(String args) { } // 缺少[]4.3 命令行参数
publicclassCommandLineArgs{publicstaticvoidmain(String[]args){// args数组包含命令行传入的参数System.out.println("参数个数:"+args.length);for(inti=0;i<args.length;i++){System.out.println("参数"+i+":"+args[i]);}}}运行方式:
javac CommandLineArgs.javajavaCommandLineArgs Hello Java2026# 输出:# 参数个数:3# 参数0:Hello# 参数1:Java# 参数2:20264.4 main方法的本质
┌──────────────────────────────────────────────┐ │ JVM │ │ │ │ 1. 加载 HelloWorld.class │ │ 2. 查找 public static void main(String[]) │ │ 3. 调用 main 方法 │ │ 4. 执行 main 方法中的代码 │ │ 5. main 方法执行完毕,程序结束 │ │ │ └──────────────────────────────────────────────┘五、编译与运行流程
5.1 Java程序的生命周期
源代码(.java) → 编译(javac) → 字节码(.class) → 运行(java) → 结果详细流程:
编译期 运行期 ┌──────────────┐ ┌──────────────────┐ │ │ │ │ HelloWorld.java → javac → HelloWorld.class → java → JVM加载执行 → 输出结果 │ │ │ │ │ 词法分析 │ │ 类加载器加载 │ │ 语法分析 │ │ 字节码验证 │ │ 语义分析 │ │ 解释/JIT编译 │ │ 生成字节码 │ │ 执行代码 │ └──────────────┘ └──────────────────┘5.2 编译详解
# 编译命令javac HelloWorld.java# 编译选项javac-encodingUTF-8 HelloWorld.java# 指定编码javac-dout HelloWorld.java# 指定输出目录javac-verboseHelloWorld.java# 显示详细信息# 编译成功后,会生成 HelloWorld.class 文件# 这个文件包含字节码,是平台无关的5.3 运行详解
# 运行命令javaHelloWorld# 注意:运行时不加 .class 后缀!# 运行时的内部过程:# 1. JVM启动# 2. 类加载器(ClassLoader)加载HelloWorld.class# 3. 字节码验证器验证字节码的合法性# 4. 执行引擎(解释器/JIT编译器)执行字节码# 5. 找到main方法并开始执行5.4 反编译查看字节码
# 使用javap查看字节码javap-cHelloWorld.class# 输出(简化版):# Compiled from "HelloWorld.java"# public class HelloWorld {# public HelloWorld();# Code:# 0: aload_0# 1: invokespecial #1# 4: return## public static void main(java.lang.String[]);# Code:# 0: getstatic #2 // Field java/lang/System.out# 3: ldc #3 // String Hello, World!# 5: invokevirtual #4 // Method PrintStream.println# 8: return# }六、在IDEA中运行
6.1 创建项目
1. File → New → Project 2. 选择 "Java" 3. 选择 JDK 21 4. 项目名:HelloWorldDemo 5. Build system:IntelliJ(初学者推荐) 6. 点击 "Create"6.2 创建类并运行
1. 在 src 目录上右键 → New → Java Class 2. 类名输入:HelloWorld 3. 输入代码: public class HelloWorld { public static void main(String[] args) { System.out.println("Hello, World!"); } } 4. 点击 main 方法左侧的绿色三角 ▶ 5. 选择 "Run 'HelloWorld.main()'" 6. 在底部控制台查看输出6.3 IDEA快捷操作
| 操作 | 快捷键(Mac) | 快捷键(Win/Linux) |
|---|---|---|
| 运行 | Ctrl + R | Shift + F10 |
| 调试 | Ctrl + D | Shift + F9 |
| 代码补全 | Ctrl + Space | Ctrl + Space |
| 格式化 | Cmd + Option + L | Ctrl + Alt + L |
| 生成代码 | Cmd + N | Alt + Insert |
| 快速修复 | Option + Enter | Alt + Enter |
七、常见错误与解决方案
7.1 编译错误
错误1:找不到文件
javac HelloWorld.java# 错误:javac: file not found: HelloWorld.java# 解决:# 1. 检查文件名是否正确(大小写敏感)# 2. 检查当前目录是否正确# 3. 使用 cd 命令切换到文件所在目录错误2:类名与文件名不一致
# 文件名:Hello.java# 代码:public class HelloWorld { ... }# 错误:HelloWorld.java 中的类 HelloWorld 必须在其同名文件中声明# 解决:让文件名与类名保持一致# 方式一:改文件名为 HelloWorld.java# 方式二:改类名为 Hello错误3:缺少分号
publicclassHelloWorld{publicstaticvoidmain(String[]args){System.out.println("Hello, World!")// 缺少分号!}}// 错误:需要 ';'错误4:中英文标点混淆
// ❌ 错误:使用了中文分号System.out.println("Hello");// ✅ 正确:使用英文分号System.out.println("Hello");7.2 运行错误
错误5:找不到主类
javaHello World# 错误:找不到或无法加载主类 Hello World# 原因:类名中间有空格被当成了两个参数# 解决:java HelloWorld错误6:在错误目录运行
# 在错误的目录下运行javaHelloWorld# 错误:找不到或无法加载主类 HelloWorld# 解决:切换到 .class 文件所在目录cd/path/to/your/class/filesjavaHelloWorld7.3 常见错误汇总表
| 错误类型 | 错误信息 | 解决方案 |
|---|---|---|
| 文件名错误 | file not found | 检查文件名和路径 |
| 类名不匹配 | 类必须在同名文件中 | 文件名与类名保持一致 |
| 缺少分号 | 需要';' | 在语句末尾添加英文分号 |
| 中文符号 | 非法字符 | 使用英文标点符号 |
| 大括号不匹配 | 解析时已到达文件结尾 | 检查{}是否配对 |
| 找不到主类 | 找不到或无法加载主类 | 检查类名和classpath |
| 版本不兼容 | UnsupportedClassVersionError | 编译和运行使用相同JDK版本 |
7.4 编码错误问题
# 如果代码中有中文注释,可能遇到编码错误# 错误:编码 GBK 的不可映射字符# 解决:指定UTF-8编码javac-encodingUTF-8 HelloWorld.java八、进阶:改进你的Hello World
8.1 带有变量的Hello World
publicclassHelloWorldWithVariables{publicstaticvoidmain(String[]args){// 声明变量Stringgreeting="Hello";Stringtarget="World";intyear=2026;// 字符串拼接System.out.println(greeting+", "+target+"!");// 格式化输出System.out.println("欢迎来到Java世界,现在是"+year+"年!");// 多行输出System.out.println("==================");System.out.println("| Hello World! |");System.out.println("| Java is Cool! |");System.out.println("==================");}}输出:
Hello, World! 欢迎来到Java世界,现在是2026年! ================== | Hello World! | | Java is Cool! | ==================8.2 使用用户输入
importjava.util.Scanner;publicclassInteractiveHello{publicstaticvoidmain(String[]args){// 创建Scanner对象用于读取用户输入Scannerscanner=newScanner(System.in);System.out.print("请输入你的名字:");Stringname=scanner.nextLine();System.out.println("你好,"+name+"!欢迎学习Java!");System.out.println("当前时间:"+java.time.LocalDateTime.now());scanner.close();}}8.3 使用方法封装
publicclassHelloWithMethods{publicstaticvoidmain(String[]args){// 调用自定义方法sayHello("World");sayHello("Java");sayHello("开发者");// 带返回值的方法Stringmessage=createGreeting("World");System.out.println(message);}// 自定义方法:无返回值publicstaticvoidsayHello(Stringname){System.out.println("Hello, "+name+"!");}// 自定义方法:有返回值publicstaticStringcreateGreeting(Stringname){return"Hello, "+name+"! Welcome to Java!";}}九、Java程序的基本结构
9.1 文件结构
// 1. package语句(可选,表示包/目录)packagecom.example;// 2. import语句(可选,导入其他类)importjava.util.Scanner;importjava.time.LocalDateTime;// 3. 类声明(必须,一个文件通常一个public类)publicclassMyProgram{// 4. 成员变量(可选)privateStringname;privateintage;// 5. 构造方法(可选)publicMyProgram(Stringname,intage){this.name=name;this.age=age;}// 6. 主方法(程序入口)publicstaticvoidmain(String[]args){// 程序从这里开始执行System.out.println("程序开始运行!");MyProgramprogram=newMyProgram("Java",30);program.greet();}// 7. 自定义方法(可选)publicvoidgreet(){System.out.println("Hello, I'm "+name+", "+age+" years old.");}}9.2 命名规则
| 元素 | 命名规则 | 示例 |
|---|---|---|
| 类名 | 大驼峰(PascalCase) | HelloWorld,StudentInfo |
| 方法名 | 小驼峰(camelCase) | sayHello,getAge |
| 变量名 | 小驼峰(camelCase) | studentName,maxAge |
| 常量名 | 全大写下划线 | MAX_VALUE,PI |
| 包名 | 全小写 | com.example.demo |
9.3 代码风格
// ✅ 好的代码风格publicclassGoodStyle{privatestaticfinalintMAX_COUNT=100;publicstaticvoidmain(String[]args){StringuserName="Java Learner";intscore=95;if(score>=60){System.out.println(userName+" 通过了考试!");}else{System.out.println(userName+" 需要继续努力!");}}}// ❌ 不好的代码风格publicclassbadstyle{privatestaticfinalintmax_count=100;// 常量应用全大写publicstaticvoidmain(String[]args){Stringuser_name="Java Learner";// 变量应用小驼峰ints=95;// 缺少空格,变量名不清晰if(s>=60){// 缺少空格System.out.println(user_name+"通过了考试!");}}}十、总结与预告
✅ 本篇总结
- ✅ 编写了第一个Java程序
Hello World - ✅ 逐行解析了代码中每个关键字的含义
- ✅ 深入理解了
main方法的作用和结构 - ✅ 了解了Java程序的编译和运行流程
- ✅ 学会了在IDEA中创建和运行项目
- ✅ 掌握了常见错误的排查方法
- ✅ 了解了Java程序的基本结构和命名规范
💬 互动问题
- 你在运行Hello World时遇到了什么错误?
public static void main(String[] args)中每个关键字的作用是什么?.java文件和.class文件有什么区别?
📖 下篇预告
第04篇:变量与数据类型,我们将学习:
- 什么是变量?如何声明和初始化变量
- Java的八大基本数据类型
- 类型转换(自动和强制)
- 变量的作用域和命名规范
📚 参考资料
- Oracle Java教程 - Hello World
- Java语言规范
- IntelliJ IDEA入门教程
📝系列目录:Java入门到精通系列 |上一篇:02-环境搭建JDK安装与配置 |下一篇:04-变量与数据类型
