🐸 青蛙编程网
首页 / Java / Java 基础 / 2. 第一个程序

第一个程序:Hello World

这是什么:Hello World = 你的第一个 Java 程序,让屏幕上打印出一句话。

为什么用:上一章装好了 JDK 25,这一章写出并跑起你人生第一段 Java。别小看这十来行代码,它包含了 Java 的全部骨架——类、方法、语句,以后你写的每个程序都是这套骨架上长出来的血肉。

如何用:本章新建一个文件、敲完整代码、两种方式跑起来,再逐行解读每一行为什么必须在那。

第一步:新建文件

  1. 桌面建个文件夹,比如 java-demo
  2. 在里面新建文本文件,改名为 HelloWorld.java(注意大小写!)

Java 铁律:文件名必须和代码里的类名一模一样(包括大小写)。类叫 HelloWorld,文件就必须叫 HelloWorld.java。

Windows 用户这里有个著名的暗坑:系统默认隐藏已知扩展名。你看到的 HelloWorld.java,真实文件名可能是 HelloWorld.java.txt——记事本默认按文本文件保存,悄悄在后面补了 .txt,而你的系统把后缀藏起来不给你看。后果是编译时报"找不到文件",你盯着屏幕检查十遍也看不出毛病。

自查方法:在文件所在文件夹点顶部"查看",勾选"文件扩展名",让所有后缀现出原形。这是一次设置、终身受益的操作。

完整代码

用记事本或 VS Code 打开 HelloWorld.java,写入:

public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Hello, World!");
        System.out.println("你好,世界!这是我写的第一个 Java 程序");
    }
}

暂时不理解每个词?没关系,先记住这个固定框架——它就像写作文的"开头格式":

public class 类名 {          ← 楼:代码必须住在类里
    public static void main(String[] args) {   ← 大门:程序从这里开始
        你的代码写在这里;      ← 房间:一句句话,句句带分号
    }
}

类名可以换成你想要的(跟文件名保持一致),main 那一行在入门阶段原样照抄。为什么必须这样?因为 JVM 启动程序时,第一件事就是找名为 main 的方法作为入口——找不到它,代码写得再好也没人执行。至于 public、static、void 各是什么意思,面向对象篇会逐一揭晓,现在先跟它们混个脸熟。

第二步:运行它(两种方式)

方式一:一条命令直接跑(推荐,JDK 11+ 都支持)

在 HelloWorld.java 所在文件夹的地址栏输入 cmd 回车(在当前路径打开命令行),然后:

java HelloWorld.java

对,不用先编译,一条命令直接出结果——这就是现代 Java 的打开方式。

方式二:传统两步走(顺便理解 Java 的编译本质)

javac HelloWorld.java
java HelloWorld

javac 把代码编译成字节码文件 HelloWorld.class(JVM 认识的"中间码"),再用 java HelloWorld 运行它。注意第二步不要写 .java 后缀。

两步走完,用 dir(Mac/Linux 用 ls)看一眼文件夹:多了一个 HelloWorld.class。这个文件就是上一章说的"字节码"——它在哪个装了 JVM 的电脑上都能跑,"到处运行"的载体就是它。

两种方式殊途同归:方式一其实是把"编译 + 运行"打包成一条命令,编译这一步并没有省掉,只是 JVM 替你默默做了。

你会看到

Hello, World!
你好,世界!这是我写的第一个 Java 程序

恭喜!🎉 而且你已经顺便理解了 Java 的灵魂:先编译成字节码,再交给 JVM 运行——"一次编写,到处运行"的底气就在这。

逐行解读

代码 作用
public class HelloWorld 定义一个类叫 HelloWorld,Java 的代码必须住在类里(类比:整栋楼的楼名)
public static void main(String[] args) main 方法:程序入口,程序一启动就执行这里,入门阶段先照抄这个框架
System.out.println(...) 打印:把括号里的内容显示出来并换行,相当于 Python 的 print
; 分号 每句话结束必须打分号,忘写分号是新手报错第一名

补充几个表格放不下的细节:

  • String[] args 是什么:main 方法的参数,用来接收运行程序时从命令行塞进来的额外信息(比如 java HelloWorld 张三 里的"张三")。入门阶段用不到它,但一个字都不能少写,少写了 JVM 就认不出这个 main。
  • println 的 ln:line 的缩写,表示打完这行换行。与之对应的还有 print,打完不换行,两句话会挤在同一行。
  • 大括号 {} 是边界:类有大括号,方法也有大括号,一层套一层。哪个大括号包住哪些代码,就是"谁住在谁家"的问题——缩进不是语法要求,但统一缩进(一级缩 4 格)能让你一眼看清层级。

常见报错与修复

报错 原因 修复
‘javac’ 不是内部或外部命令 JDK 没装或没加 PATH 按《Java 是什么》一章装 JDK,并添加到 PATH
类 HelloWorld 是 public,应在名为 HelloWorld.java 的文件中声明 文件名和类名不一致 把文件改名为 HelloWorld.java
‘;’ 预期 漏了分号 找到漏分号的行,补上 ;
错误: 找不到文件: HelloWorld.java 当前文件夹里没这个文件,或后缀是隐藏的 .txt dir 确认文件在;检查真实扩展名
错误: 在类 HelloWorld 中找不到 main 方法 main 拼错(如 mian)或漏了 static 对照框架逐字检查 main 那一行
中文标点导致的 非法字符 报错 用了中文括号、中文引号或中文分号 输入法切英文,代码符号全部半角

报错信息看似吓人,其实每一行都在给你线索:报错里有行号、有"预期什么""找到了什么"。读报错的能力就是这么一步步攒出来的——先定位行号,再对照上表找原因。

⚠️ 新手翻车现场

翻车一:文件名和类名大小写不一致

类 HelloWorld 是 public,应在名为 HelloWorld.java 的文件中声明

问题:Java 要求 public class HelloWorld 的文件必须叫 HelloWorld.java,helloworld.java 不行。

修正:把文件重命名为 HelloWorld.java,注意大小写完全一致。

翻车二:漏写分号

System.out.println("Hi")  // 漏了分号

问题:Java 每条语句必须以分号结尾。

修正:System.out.println("Hi");

翻车三:java HelloWorld.java 方式二混淆

用 java HelloWorld.java 时带 .java;用 java HelloWorld 运行编译后的字节码时不带 .java。

修正:两种方式别混,记住:源码带 .java,字节码不带。

翻车四:中文标点混入代码

System.out.println("你好");   // ❌ 结尾是中文分号

完整报错:

错误: 非法的表达式开始

问题:中文分号 ;、中文括号 ()、中文引号 "" 肉眼难辨,Java 却一个都不认识。代码里的内容(引号内的文字)用中文完全没问题,符号必须全英文半角。

修正:输入法切到英文状态写代码;报"非法字符"时优先检查标点。

翻车五:main 拼成了 mian

public static void mian(String[] args) { ... }

完整报错:

错误: 在类 HelloWorld 中找不到 main 方法, 请将 main 方法定义为:
   public static void main(String[] args)

问题:mian 是个普通方法,JVM 启动时找不到它认识的 main,直接罢工。这个报错的贴心之处在于把正确答案打出来了——照着敲一遍就能修。

修正:把 mian 改回 main。

翻车六:文件藏在别的文件夹,命令行却在原地找

错误: 找不到文件: HelloWorld.java

问题:命令行的工作目录不对——你以为在文件旁边,实际在用户主目录。加上文件名是隐藏 .txt 后缀的情况,"找不到文件"稳居新手报错榜前列。

修正:先 dir 看当前目录有没有这个文件;没有就重新执行"地址栏输 cmd 回车",确保命令行开在文件所在文件夹。

❓ 常见问题

Q1:一定要用命令行吗?IDEA 里点个按钮不行吗?

行,但前几章强烈建议命令行。IDE 的运行按钮把编译、运行都包进了黑盒,一旦报错,新手分不清是代码问题还是环境问题。命令行把每一步摊开给你看,原理扎实了再切 IDE,效率与理解兼得。

Q2:一个文件里能写多个类吗?

能,但 public 的类只能有一个,且文件名必须跟它走。其他非 public 类写在同一个文件里也能编译,入门阶段建议一文件一类,清爽不出错。

Q3:代码里的缩进和空行,Java 会管吗?

编译器完全不管,缩进错了照样跑。但人要管:缩进体现层级、空行分隔逻辑,是代码可读性的底线。跟着本书的格式走(大括号换行、一级缩 4 格),形成肌肉记忆。

Q4:HelloWorld.class 文件能直接打开看吗?

能打开,但看到的是"天书"——字节码是给 JVM 读的指令,不是给人读的文本。好奇的话可以打开感受一下,然后关掉:你只需要知道它是"翻译好的中间码"就够了。

🎯 什么时候用哪种运行方式

场景 推荐 原因
快速试一个小片段 java HelloWorld.java 一条命令,无需单独编译
理解 Java 编译原理 javac + java 看到 .class 字节码文件,理解 JVM 运行机制

随着代码变大,你还会接触 IDEA 里的绿色运行按钮——它背后同样是"编译 + 运行",只是被界面包了起来。命令行是最诚实的运行方式:每一步都摆在你眼前,出了问题也藏不住。建议前几章都在命令行跑,把原理走扎实,再切换 IDE 提效。

📝 本章小结

  • public class Xxx 源文件必须叫 Xxx.java,大小写完全一致
  • 程序入口是 public static void main(String[] args),一个字符都不能错
  • System.out.println 打印并换行(print 不换行)
  • 每条语句以分号结尾,代码符号必须英文半角
  • 两种运行方式:直接运行源码,或先 javac 编译再 java 运行(不带 .java)
  • 记忆口诀:类是楼,main 是大门,println 是喇叭,分号记得打。

记忆锚点:把 Java 程序想成一家连锁店——类是"营业执照上的店名"(必须和文件名一致),main 方法是"营业大门"(JVM 只认这扇门),println 是门口的大喇叭,分号是每句话的句号。大门不对,客人(JVM)扭头就走。

动手改

  1. 把两句台词改成你自己的自我介绍,再跑一次
  2. 试试去掉某行末尾的分号,看看报错长什么样——报错不可怕,它在告诉你哪里没看懂
  3. 把文件改名为 hello.java 再运行,体验一下"类名和文件名不一致"的后果
  4. 把 println 改成 print 跑一次,观察两句话挤在一行的效果,体会 ln 的作用
  5. 故意把 main 敲成 mian,读懂那个"贴心"的报错信息

下一章:变量与数据类型,让程序帮你记住数据 🐸

📥 下载本章代码

ZIP 内含本章全部代码文件与说明,解压即用,与教程内容同步生成。