🚀 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

⚠️ 重要:文件名必须与类名完全一致,包括大小写!

第二步:编写代码

public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Hello, World!");
    }
}

第三步:编译运行

# 打开终端/命令提示符,进入文件所在目录

# 编译(将 .java 编译为 .class 字节码文件)
javac HelloWorld.java

# 运行(注意:不加 .class 后缀)
java HelloWorld

# 输出:
# 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)

三、逐行解析代码

public class HelloWorld {                          // 第1行:类声明
    public static void main(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方法的完整签名

public static void main(String[] args)

逐个关键字分析:

public      // 1. 公开访问权限,JVM需要调用它
static      // 2. 静态方法,无需创建对象即可调用
void        // 3. 无返回值,main不需要向JVM返回结果
main        // 4. 方法名,JVM固定识别的入口名
String[]    // 5. 参数类型,字符串数组
args        // 6. 参数名(可以改成其他名字,但约定俗成用args)

4.2 main方法的等价写法

以下写法都是合法的main方法声明:

// 标准写法
public static void main(String[] args) { }

// args可以换成其他名字
public static void main(String[] arguments) { }

// 可变参数写法(Java 5+)
public static void main(String... args) { }

// 以下写法是不合法的 ❌
// static public void main(String[] args) { }  // 修饰符顺序不规范(但编译能过)
// public void main(String[] args) { }          // 缺少static
// public static void main(String args) { }     // 缺少[]

4.3 命令行参数

public class CommandLineArgs {
    public static void main(String[] args) {
        // args数组包含命令行传入的参数
        System.out.println("参数个数:" + args.length);

        for (int i = 0; i < args.length; i++) {
            System.out.println("参数" + i + ":" + args[i]);
        }
    }
}

运行方式:

javac CommandLineArgs.java
java CommandLineArgs Hello Java 2026

# 输出:
# 参数个数:3
# 参数0:Hello
# 参数1:Java
# 参数2:2026

4.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 -encoding UTF-8 HelloWorld.java    # 指定编码
javac -d out HelloWorld.java              # 指定输出目录
javac -verbose HelloWorld.java            # 显示详细信息

# 编译成功后,会生成 HelloWorld.class 文件
# 这个文件包含字节码,是平台无关的

5.3 运行详解

# 运行命令
java HelloWorld

# 注意:运行时不加 .class 后缀!

# 运行时的内部过程:
# 1. JVM启动
# 2. 类加载器(ClassLoader)加载HelloWorld.class
# 3. 字节码验证器验证字节码的合法性
# 4. 执行引擎(解释器/JIT编译器)执行字节码
# 5. 找到main方法并开始执行

5.4 反编译查看字节码

# 使用javap查看字节码
javap -c HelloWorld.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:缺少分号

public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Hello, World!")  // 缺少分号!
    }
}
// 错误:需要 ';'

错误4:中英文标点混淆

// ❌ 错误:使用了中文分号
System.out.println("Hello")// ✅ 正确:使用英文分号
System.out.println("Hello");

7.2 运行错误

错误5:找不到主类

java Hello World
# 错误:找不到或无法加载主类 Hello World

# 原因:类名中间有空格被当成了两个参数
# 解决:java HelloWorld

错误6:在错误目录运行

# 在错误的目录下运行
java HelloWorld
# 错误:找不到或无法加载主类 HelloWorld

# 解决:切换到 .class 文件所在目录
cd /path/to/your/class/files
java HelloWorld

7.3 常见错误汇总表

错误类型 错误信息 解决方案
文件名错误 file not found 检查文件名和路径
类名不匹配 类必须在同名文件中 文件名与类名保持一致
缺少分号 需要';' 在语句末尾添加英文分号
中文符号 非法字符 使用英文标点符号
大括号不匹配 解析时已到达文件结尾 检查 {} 是否配对
找不到主类 找不到或无法加载主类 检查类名和classpath
版本不兼容 UnsupportedClassVersionError 编译和运行使用相同JDK版本

7.4 编码错误问题

# 如果代码中有中文注释,可能遇到编码错误
# 错误:编码 GBK 的不可映射字符

# 解决:指定UTF-8编码
javac -encoding UTF-8 HelloWorld.java

八、进阶:改进你的Hello World

8.1 带有变量的Hello World

public class HelloWorldWithVariables {
    public static void main(String[] args) {
        // 声明变量
        String greeting = "Hello";
        String target = "World";
        int year = 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 使用用户输入

import java.util.Scanner;

public class InteractiveHello {
    public static void main(String[] args) {
        // 创建Scanner对象用于读取用户输入
        Scanner scanner = new Scanner(System.in);

        System.out.print("请输入你的名字:");
        String name = scanner.nextLine();

        System.out.println("你好," + name + "!欢迎学习Java!");
        System.out.println("当前时间:" + java.time.LocalDateTime.now());

        scanner.close();
    }
}

8.3 使用方法封装

public class HelloWithMethods {
    public static void main(String[] args) {
        // 调用自定义方法
        sayHello("World");
        sayHello("Java");
        sayHello("开发者");

        // 带返回值的方法
        String message = createGreeting("World");
        System.out.println(message);
    }

    // 自定义方法:无返回值
    public static void sayHello(String name) {
        System.out.println("Hello, " + name + "!");
    }

    // 自定义方法:有返回值
    public static String createGreeting(String name) {
        return "Hello, " + name + "! Welcome to Java!";
    }
}

九、Java程序的基本结构

9.1 文件结构

// 1. package语句(可选,表示包/目录)
package com.example;

// 2. import语句(可选,导入其他类)
import java.util.Scanner;
import java.time.LocalDateTime;

// 3. 类声明(必须,一个文件通常一个public类)
public class MyProgram {

    // 4. 成员变量(可选)
    private String name;
    private int age;

    // 5. 构造方法(可选)
    public MyProgram(String name, int age) {
        this.name = name;
        this.age = age;
    }

    // 6. 主方法(程序入口)
    public static void main(String[] args) {
        // 程序从这里开始执行
        System.out.println("程序开始运行!");

        MyProgram program = new MyProgram("Java", 30);
        program.greet();
    }

    // 7. 自定义方法(可选)
    public void greet() {
        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 代码风格

// ✅ 好的代码风格
public class GoodStyle {
    private static final int MAX_COUNT = 100;

    public static void main(String[] args) {
        String userName = "Java Learner";
        int score = 95;

        if (score >= 60) {
            System.out.println(userName + " 通过了考试!");
        } else {
            System.out.println(userName + " 需要继续努力!");
        }
    }
}

// ❌ 不好的代码风格
public class badstyle {
    private static final int max_count = 100;  // 常量应用全大写
    public static void main(String[] args) {
        String user_name = "Java Learner";  // 变量应用小驼峰
        int s=95;  // 缺少空格,变量名不清晰
        if(s>=60){  // 缺少空格
            System.out.println(user_name+"通过了考试!");
        }
    }
}

十、总结与预告

✅ 本篇总结

  • ✅ 编写了第一个Java程序 Hello World
  • ✅ 逐行解析了代码中每个关键字的含义
  • ✅ 深入理解了 main 方法的作用和结构
  • ✅ 了解了Java程序的编译和运行流程
  • ✅ 学会了在IDEA中创建和运行项目
  • ✅ 掌握了常见错误的排查方法
  • ✅ 了解了Java程序的基本结构和命名规范

💬 互动问题

  1. 你在运行Hello World时遇到了什么错误?
  2. public static void main(String[] args) 中每个关键字的作用是什么?
  3. .java 文件和 .class 文件有什么区别?

📖 下篇预告

第04篇:变量与数据类型,我们将学习:

  • 什么是变量?如何声明和初始化变量
  • Java的八大基本数据类型
  • 类型转换(自动和强制)
  • 变量的作用域和命名规范

📚 参考资料


📝 系列目录Java入门到精通系列 | 上一篇02-环境搭建JDK安装与配置 | 下一篇04-变量与数据类型

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐